Startup Configuration File

MinIO AIStor supports using a YAML-formatted configuration file for specifying startup server parameters. The configuration file supports specific advanced deployment patterns, such as distributed clusters with non-sequential hostnames, heterogeneous hostname patterns, and multi-NIC internode communication.

Example config.yaml

The following example configuration lists all available fields and example values. Remove any parameters you do not need.

version: v3

# Core settings
address: ":9000"
consoleAddress: ":9001"
rootUser: "minioadmin"
rootPassword: "secret-CHANGE-ME"
license: "/path/to/license.minio"
certsDir: "/etc/minio/certs"

# Behavior settings
api: "S3"
objectNaming: "safe"

# Network tuning
network:
  idleTimeout: "15s"
  readHeaderTimeout: "5s"
  connUserTimeout: "10m"
  dnsCacheTTL: "1h"
  maxIdleConnsPerHost: 2048
  sendBufSize: 4194304
  recvBufSize: 4194304
  writeBufSize: 65536
  readBufSize: 65536

# Storage configuration
storage:
  lazyAccessTime: "24h"

# Logging
log:
  json: false
  dir: ""
  size: 10485760
  compress: false

# FTP server configuration
ftp:
  address: ":8021"
  passivePortRange: "30000-40000"

# SFTP server configuration
sftp:
  address: ":8022"
  sshPrivateKey: "/etc/minio/sftp-key"

# Storage pools
pools:
  - nodes:
      - addresses:
          - "https://rack{1,3,5,7}.example.com:9000"
        path: "/mnt/disk{1...4}"
  - nodes:
      - addresses:
          - "https://rack{2,4,6,8}.example.com:9000"
        path: "/mnt/disk{1...4}"

Minimal configuration example

version: v3
rootUser: "minioadmin"
rootPassword: "secret-CHANGE-ME"
address: ":9000"
pools:
  - nodes:
      - addresses:
          - "https://server{1...4}:9000"
        path: "/mnt/disk{1...4}/"

Parameters

Core settings

The configuration file must include the version and pools fields. All other fields are optional.

#versionparam

Required

Configuration format version. Use v3 (recommended) for multi-NIC support and the latest pool definition format. v2 is still accepted for backward compatibility. MinIO AIStor auto-migrates v1 and v2 configurations to v3 on startup. Specify a string value.

#addressparam

Bind address and listen port for the S3 API. Specify a string value. Defaults to :9000.

#consoleAddressparam

Bind address and listen port for the web console. Specify a string value. Defaults to :9001.

#rootUserparam

Root username for initial authentication. Specify a string value. Defaults to minioadmin.

#rootPasswordparam

Root password for initial authentication. Specify a string value. Defaults to minioadmin.

#licenseparam

Path to the MinIO AIStor license file. Specify a string value.

#certsDirparam

Directory containing TLS certificates. Specify a string value. Defaults to /etc/minio/certs.

#poolsparam

Required

Array of storage pool configurations. See Pools.

Behavior settings

#apiparam

API mode. Set to S3 for standard S3 API compatibility.

Specify a string value.

#objectNamingparam

Object naming mode.

Options:

  • safe (default)
  • extended (supports // in names). For more details on the extended mode, see Extended name mode.

This mode cannot be changed after initial MinIO AIStor boot.

Specify a string value. Defaults to safe.

#bootstrapLeaderparam

Bootstrap leader node URL for coordinating cluster formation (for example, https://node1.example.com:9000). The leader node orchestrates the initial formatting process for all pools in the cluster. If not set, the first node in the cluster acts as the default formatting leader.

formattingLeaderNode is a retained deprecated alias for this setting. When both are set, bootstrapLeader takes precedence.

Specify a string value.

The config.yaml must be identical on every node in the cluster. If nodes specify different bootstrapLeader values, more than one node may attempt to act as the formatting leader and race during initial cluster or pool formation. The worst outcome is that the affected cluster or pool must be formatted again after the config.yaml is corrected.

#idpHttpModeparam

IDP HTTP mode setting. Set to on to allow HTTP for IDP endpoints. Specify a string value.

#memLimitparam

Memory limit for the server process (for example, 8GiB). Supports standard size suffixes. Specify a string value.

Network configuration

The network object configures network behavior and timeouts. All fields are optional.

#idleTimeoutparam

Maximum time to wait for the next request when keep-alive is enabled. Specify a duration value. The value cannot be negative. MinIO AIStor fails to start if it is. Defaults to 30s.

#readHeaderTimeoutparam

Time allowed to read request headers. Specify a duration value. The value cannot be negative. MinIO AIStor fails to start if it is. Defaults to 10s.

#connUserTimeoutparam

Custom TCP_USER_TIMEOUT for socket buffers. Specify a duration value. The value cannot be negative. MinIO AIStor fails to start if it is. Defaults to 10m.

#interfaceparam

Bind to specific VRF device for MinIO AIStor services. Specify a string value for the interface name.

#dnsCacheTTLparam

DNS cache TTL. In orchestrated environments, defaults to 30s. Specify a duration value. The value cannot be negative. MinIO AIStor fails to start if it is. Defaults to 1h.

#maxIdleConnsPerHostparam

Maximum idle connections per host. Specify an integer value. Defaults to 100.

#sendBufSizeparam

Send buffer size in bytes. Specify an integer value. Defaults to 262144.

#recvBufSizeparam

Receive buffer size in bytes. Specify an integer value. Defaults to 262144.

#writeBufSizeparam

Write buffer size in bytes. Specify an integer value. Defaults to 32768.

#readBufSizeparam

Read buffer size in bytes. Specify an integer value. Defaults to 32768.

Duration values support standard Go duration formats (for example, 30s, 10m, 1h).

Log configuration

The log object configures logging behavior. All fields are optional.

#jsonparam

Enable JSON-formatted logging output. Specify true or false. Defaults to false.

#dirparam

Directory path for log files. If not set, logs to stdout.

#sizeparam

Maximum log file size in bytes before rotation. Specify an integer. Defaults to 10485760 (10 MiB).

#compressparam

Compress rotated log files with gzip. Specify true or false. Defaults to false.

#prefixparam

Prefix to use for log files.

#quietparam

Deprecated

Disable startup informational messages. Specify true or false. Defaults to false.

#anonymousparam

Deprecated

Hide sensitive information from logs (such as credentials and IPs). Specify true or false. Defaults to false.

Storage configuration

The storage object configures storage behavior. All fields are optional.

#lazyAccessTimeparam

Interval for lazy access time updates to reduce write load on drives. Specify a duration in a format like 12h or 2d. Defaults to 24h.

FTP configuration

The ftp object configures the optional FTP server. See File Transfer Protocol for more information.

#addressparam

Bind address for FTP server (for example, :8021).

#passivePortRangeparam

Port range for FTP passive mode (for example, 30000-40000).

SFTP configuration

The sftp object configures the optional SFTP server. See File Transfer Protocol for more information.

#addressparam

Bind address for SFTP server (for example, :8022).

#sshPrivateKeyparam

Path to SSH private key file for authentication.

Pools

The pools field defines the storage pools in the deployment. Each pool contains one or more node definitions with address and path patterns. Ellipsis notation {n...m} is supported in both addresses and paths.

In v3, each pool contains a nodes array. Each node definition has addresses (one or more NIC address patterns) and a path (disk path pattern).

pools:
  - nodes:
      - addresses:
          - "https://rack{1...4}.example.com:9000"
        path: "/mnt/disk{1...4}"
    setDriveCount: 4

When multiple addresses are listed per node, MinIO AIStor automatically configures multi-NIC internode communication.

You can mix explicit and ellipsis definitions within the same pool:

pools:
  - nodes:
      - addresses:
          - "https://192.168.10.11:9000"
        path: "/mnt/disk{1...4}/"
      - addresses:
          - "https://192.168.10.{12...14}:9000"
        path: "/mnt/disk{1...4}/"
    setDriveCount: 4

v2 format (legacy)

In v2, each pool uses an args array where each element combines the address and path in a single URL string. v2 configurations are auto-migrated to v3 on startup.

pools:
  - args:
      - "https://rack2.example.com:9000/mnt/disk{1...4}"
      - "https://rack4.example.com:9000/mnt/disk{1...4}"
      - "https://198.51.100.10:9000/mnt/disk{1...8}"
      - "https://203.0.113.10:9000/mnt/disk{1...8}"

Pool naming

MinIO AIStor assigns each pool a name that identifies it in administrative commands such as mc admin decommission.

  • Single-node pools: When a pool has a single node entry, MinIO AIStor uses the address string directly as the pool name. For example, a pool defined as https://minio-{1...4}.example.net:9000 with path /mnt/disk{1...4} appears with that address in administrative output.

  • Multi-node pools: When a pool has multiple node entries (for example, heterogeneous hostnames or IP addresses), MinIO AIStor generates a hash:<hex> identifier from the expanded endpoint layout. This hash-based name appears in the Pools column of commands like mc admin decommission status:

    ┌─────┬──────────────────────┬──────────────────────────────────┬────────┐
    │ ID  │ Pools                │ Capacity                         │ Status │
    │ 1st │ hash:a510f38e84ec12b │  60 TiB (used) / 100 TiB (total) │ Active │
    │ 2nd │ hash:b9c4d2e6f8a01e3 │  40 TiB (used) / 100 TiB (total) │ Active │
    └─────┴──────────────────────┴──────────────────────────────────┴────────┘

    Use the full hash:<hex> string as the pool identifier when running commands that require a pool argument, such as mc admin decommission start.

Pool requirements

  • Each pool requires a minimum of 2 nodes with unique, non-repeating hosts.
  • Each host in a pool must have the same number of drives as every other host in that pool.
  • Mixing local paths and distributed paths is not allowed.

Multi-NIC configuration

MinIO AIStor supports multiple network interfaces (NICs) for internode communication to achieve aggregate bandwidth. When configured, MinIO AIStor distributes internode traffic across all configured NICs using round-robin, effectively multiplying available bandwidth.

How it works

  • Requests are distributed round-robin across healthy NICs.
  • Each outgoing connection binds to a specific local NIC IP (source binding).
  • Failed NICs are temporarily skipped and retried after 30 seconds.
  • Supports any number of NICs.

Configuration

In v3, configure multi-NIC by listing multiple address templates per node definition. All address templates must expand to the same number of nodes.

The following example configures 8 nodes with dual NICs and 8 drives each:

version: v3
rootUser: "minioadmin"
rootPassword: "secret-CHANGE-ME"
address: ":9000"
pools:
  - nodes:
      - addresses:
          - "https://192.168.10.{11...18}:9000"  # NIC1 subnet
          - "https://192.168.20.{11...18}:9000"  # NIC2 subnet
        path: "/mnt/disk{1...8}/"

This expands to 8 nodes where each node has two NIC addresses:

NodeNIC1 (primary)NIC2
1192.168.10.11:9000192.168.20.11:9000
2192.168.10.12:9000192.168.20.12:9000
3192.168.10.13:9000192.168.20.13:9000
………

Deploy the same config file to all nodes. Each node auto-detects itself by matching NIC IPs against local interfaces, then builds a route map: when communicating with remote node N, NIC position i on the local node connects to NIC position i on node N.

Multi-NIC requirements

  • All address templates within a node definition must expand to the same number of nodes.
  • Each NIC should be on a separate network or subnet, so the aggregated links do not share a bottleneck.
  • Every NIC uses the port from the first address, so set the same port on every address.
  • All NIC subnets must be routable to that port on every node.
  • Source binding requires appropriate network routing on each node.

Configuration settings and CLI equivalents

The following tables map configuration file fields to their corresponding environment variables and command-line flags, along with the precedence order when the same parameter is configured in multiple ways.

Core settings

Config FileEnvironment VariableCLI FlagPrecedence Order
pools.nodesMINIO_VOLUMESminio server DIRSConfig > Env
pools.setDriveCountMINIO_ERASURE_SET_DRIVE_COUNT-Env > Config
addressMINIO_ADDRESS--addressConfig > Env > CLI
consoleAddressMINIO_CONSOLE_ADDRESS--console-addressConfig > Env > CLI
license---licenseConfig > CLI
certsDir---certs-dirConfig > CLI
rootUserMINIO_ROOT_USER-Env > Config
rootPasswordMINIO_ROOT_PASSWORD-Env > Config

Behavior settings

Config FileEnvironment VariableCLI FlagPrecedence Order
api---apiConfig > CLI
objectNamingMINIO_OBJECT_NAMING--object-namingConfig > Env > CLI
bootstrapLeader---bootstrap-leaderConfig > CLI
idpHttpMode---idp-http-modeConfig > CLI
memLimit---mem-limitConfig > CLI

Storage configuration

Config FileEnvironment VariableCLI FlagPrecedence Order
storage.lazyAccessTime---lazy-access-timeConfig > CLI

FTP and SFTP configuration

Config FileCLI FlagPrecedence Order
ftp.address--ftp="address=:8021"Config > CLI
ftp.passivePortRange--ftp="passive-port-range=30000-40000"Config > CLI
sftp.address--sftp="address=:8022"Config > CLI
sftp.sshPrivateKey--sftp="ssh-private-key=/etc/minio/sftp-key"Config > CLI

On this page