Configuration
Before deploying the MINIO module, define a Silo object-storage cluster in the config inventory. The current role requires minio_type: silo and supports these inventory deployment modes:
- Single-Node Single-Disk: SNSD: Single-node single-disk mode, can use any directory as a data disk, for development, testing, and demo only.
- Single-Node Multi-Disk: SNMD: Compromise mode, using multiple disks (>=2) on a single server, only when resources are extremely limited.
- Multi-Node Single-Disk: MNSD: Multiple servers with one independent data drive each, providing compact node-level high availability.
- Multi-Node Multi-Disk: MNMD: Multi-node multi-disk mode, standard production deployment with the best reliability, but requires multiple servers.
Use SNSD for development and testing. Three-node MNSD provides compact HA with limited resources. Use MNMD for production environments that need more capacity, throughput, and drive redundancy. SNMD handles drive failures within one server but cannot tolerate losing the server.
Silo can also use multi-pool deployment for expansion, or you can deploy multiple clusters.
In a multi-node cluster, any member can serve the S3 API. We recommend load balancing and high-availability service access in front of the cluster.
Backend Selection
minio_type remains as a selector for future backends. The current deployment and removal roles accept only silo. This value maps to the silo package, silo.service, /etc/default/silo, and ~/.minio/certs/.
To support migration in place, silo.service first reads the legacy /etc/default/minio file. It then reads /etc/default/silo, which has higher priority. It also conflicts with the old minio.service. New deployments should maintain only the Silo configuration file.
Legacy inventories with minio_type: minio or minio_type: rustfs fail identity validation. Before upgrading an existing MinIO deployment, validate MinIO-to-Silo data compatibility, backups, and rollback. The MinIO topology terms and upstream links below describe interfaces that Silo retains. The current role does not install the minio package.
Core Parameters
Pigsty uses minio_volumes to describe members and disks. It renders this value as Silo’s MINIO_VOLUMES. The role derives this value from inventory by default and also allows an explicit override.
- Single-Node Single-Disk:
minio_volumespoints to a regular local directory derived fromminio_data, defaulting to/data/minio. - Single-Node Multi-Disk:
minio_volumespoints to a sequence of local mount points derived fromminio_data, for example/data{1...4}. - Multi-Node Single-Disk:
minio_volumespoints to one data path on each server, for examplehttps://minio-{1...3}.pigsty:9000/data/minio. - Multi-Node Multi-Disk:
minio_volumespoints to mount points across multiple servers, automatically generated from two parts:- First, use
minio_datato specify the disk mount point sequence for each cluster member/data{1...4} - Also use
minio_nodeto specify the node naming pattern${minio_cluster}-${minio_seq}.pigsty
- First, use
- Multi-Pool: Explicitly set
minio_volumesto assign nodes to each storage pool.
Storage Paths and Mounts
minio_data is a filesystem directory, not a raw block device. First, format and mount a local disk, cloud volume, separate partition, or LVM logical volume. Give Silo the mount point or a directory under it. Do not put /dev/sdb in minio_data.
The MINIO role creates data directories and sets ownership and permissions. It does not format production storage or configure persistent mounts. Topologies impose different requirements on the backing filesystem:
- Single-node single-disk may use a regular directory on the root filesystem, but only for development, testing, and demos.
- Every path in a single-node multi-disk deployment should map to a separate filesystem. Multiple directories on one drive do not create multiple drive failure domains.
- Multi-node distributed Silo detects and rejects data paths on the root filesystem with
drive is part of root drive, will not be used.
Therefore, /data/minio may be a regular subdirectory when /data is a separately mounted persistent filesystem. If /data is merely a directory under /, it does not satisfy the distributed-storage requirement. A bind mount backed by the root filesystem does not create a new drive failure domain either.
Inspect the actual mounts before deployment:
The second command should report a separate /data or /data/minio mount rather than /. Configure persistent production mounts in /etc/fstab or with an equivalent mechanism. Drives in the same storage pool should have similar capacities.
Single-Node Single-Disk
SNSD mode, compatible topology reference: MinIO Single-Node Single-Drive
In Pigsty, defining a singleton Silo instance is straightforward:
Single-node mode requires minio_seq and minio_cluster. Together, these parameters uniquely identify each object-storage instance.
Single-node single-disk mode is for development only. You can use a regular data directory. Set its path with minio_data. The default is /data/minio.
We strongly recommend that you access Silo through a domain name with static resolution. For example, minio_domain defaults to sss.pigsty. Add static resolution for this name on all nodes to access the service.
Use single-node single-disk mode only for development, testing, and demos. It cannot tolerate hardware failure or provide multi-disk performance improvements. For production, use Multi-Node Multi-Disk mode.
Single-Node Multi-Disk
SNMD mode, compatible topology reference: MinIO Single-Node Multi-Drive
For multiple disks on one node, follow a procedure similar to Single-Node Single-Disk. Set minio_data to {{ prefix }}{x...y}. This pattern defines a series of disk mount points.
Every SNMD data path must reside on a separate filesystem. If multiple paths resolve to the same filesystem, Silo refuses to treat them as separate drives. We recommend XFS for production. If XFS tools are unavailable, the Vagrant test setup can prepare ext4 data drives.
For example, the Vagrant object-storage sandbox defines a single-node Silo cluster with four disks: /data1, /data2, /data3, and /data4. Before starting Silo, mount them correctly and format them with xfs:
Disk mounting is part of server provisioning and beyond Pigsty’s scope. Mounted disks should be written to /etc/fstab for auto-mounting after server restart.
SNMD uses multiple disks on one machine to increase performance and capacity. It can tolerate some disk failures.
However, SNMD cannot tolerate failure of the entire node. You also cannot add nodes at runtime. We do not recommend SNMD for production unless you have a specific reason.
Multi-Node Single-Disk
MNSD uses one data drive on each of several servers. The following inventory defines a three-node, single-drive Silo cluster. The ha/trio template uses the same storage topology:
The role generates https://minio-{1...3}.pigsty:9000/data/minio. The three paths reside on different servers. On each server, /data/minio must use a non-root, persistent filesystem.
A three-drive set uses EC:1 by default. Silo splits each object into two data shards and one parity shard. Both read and write quorum are two. Thus, one node or one data drive can be unavailable.
With equal-size drives, usable capacity is about two-thirds of raw capacity before filesystem and metadata overhead. The smallest drive limits capacity.
This compact HA topology uses resources efficiently. It removes the single object-storage node as a failure point. Each node still has only one data drive. Use Multi-Node Multi-Disk when capacity, throughput, or per-node drive redundancy requirements are higher.
An existing single-node storage pool cannot be converted in place by adding two members. Create a new three-node cluster. Migrate the objects and change the client endpoints.
Multi-Node Multi-Disk
MNMD mode, compatible topology reference: MinIO Multi-Node Multi-Drive
Set minio_data to specify disks, as in Single-Node Multi-Disk mode. Also set minio_node to specify the node naming pattern.
For example, the following configuration defines a four-node Silo cluster with four disks per node:
The minio_node parameter specifies the internal node-name pattern. The MINIO module uses it to generate a unique name for each node. The default is ${minio_cluster}-${minio_seq}.pigsty. Here, ${minio_cluster} is the cluster name, and ${minio_seq} is the node sequence number.
Pigsty automatically writes instance names to /etc/hosts on each Silo node. Cluster members use these names to identify and reach each other.
Here, the derived minio_volumes is https://minio-{1...4}.pigsty:9000/data{1...4}. It identifies four drives on each of four nodes. The role writes it to Silo’s compatible environment variable.
You can set minio_volumes directly on the object-storage cluster to override the automatically generated value.
However, this is usually not necessary as Pigsty will automatically generate it based on the config inventory.
Multi-Pool
Silo retains the compatible ability to scale by adding new storage pools. In Pigsty, explicitly set minio_volumes to assign nodes to each pool.
For example, start with the Silo cluster from the Multi-Node Multi-Disk example. Add another four-node storage pool.
You need to directly override the minio_volumes parameter:
Here, the two space-separated values represent two storage pools, each with four nodes and four disks per node. For details, see Administration: Cluster Expansion.
Multiple Clusters
You can deploy new nodes as an independent Silo cluster. The following configuration declares two object-storage clusters with different identities:
minio_cluster has no default and must be defined for every cluster. Each cluster must use distinct minio_alias, minio_domain, and minio_endpoint values. Otherwise, shared client aliases and domains on INFRA nodes overwrite each other.
The Ansible group name can differ from minio_cluster. Roles find members across the inventory by identity.
Expose Service
Silo serves the S3 API on port 9000 by default. A multi-node cluster can be accessed through any member.
The NODE module manages service access. This section provides a basic introduction.
High-availability access to a multi-node object-storage cluster can use L2 VIP or HAProxy. For example, bind an L2 VIP with keepalived. You can also use the haproxy component from NODE to expose the S3 service.
The configuration above enables HAProxy on every Silo node. It exposes S3 on port 9002 and binds a Layer 2 VIP to the cluster.
Resolve sss.pigsty to VIP 10.10.10.9 and access port 9002. If a node fails, the VIP moves to another node.
Also update global domain resolution and minio_endpoint. This makes the mcli alias on management nodes use the new endpoint:
Dedicated Load Balancer
Pigsty allows using a dedicated load balancer server group instead of the cluster itself to run VIP and HAProxy. For example, the ha/simu template uses this approach.
Point sss.pigsty to the load balancer. Update minio_endpoint so the mcli alias on management nodes uses that endpoint:
Access Service
To access the Silo service exposed through HAProxy from PGSQL, add a repository definition to pgbackrest_repo:
Expose Console
Silo provides an administration UI on port 9001 by default, controlled by minio_admin_port.
Exposing the administration interface externally may pose security risks. If required, add Silo to infra_portal and refresh the Nginx configuration.
DO NOT expose an unencrypted object-storage administration UI in production.
You will usually need an m.pigsty record in DNS or local /etc/hosts to access the Silo administration page.
If you use Pigsty’s self-signed CA instead of a public CA, you usually need to trust the CA or certificate manually. This removes the browser’s “insecure” warning.
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)