The removal role also defaults minio_type to silo; other values are rejected. The examples still spell it out so the backend, cluster identity, and paths are visible during review.
Architecture Change: Pigsty v3.6+
Starting from Pigsty v3.6, cluster removal has been migrated from minio.yml playbook to the dedicated minio-rm.yml playbook. The old minio_clean task has been deprecated.
The removal playbook attempts these operations in order:
Deregisters object-storage targets from VictoriaMetrics monitoring
Removes records from the DNS service on INFRA nodes
Stops and disables silo.service
Deletes data directories and Silo configuration (minio_rm_data, enabled by default)
Uninstalls Silo and mcli packages (minio_rm_pkg, disabled by default)
The playbook tolerates errors. Its return status alone does not prove that the service, data, DNS records, and monitoring targets were all handled as intended; inspect each item after a real run.
Expand Cluster
This section uses the MinIO-compatible administration interfaces retained by Silo. Before a production operation, verify the constraints of the exact Silo version and complete a dedicated rehearsal.
Silo cannot directly change the node or disk count of an existing storage pool, but it can expand by adding a new pool.
Assume you have a four-node Silo cluster and want to double capacity by adding a new four-node storage pool.
minio:hosts:10.10.10.10:{minio_seq:1 , nodename:minio-1 }10.10.10.11:{minio_seq:2 , nodename:minio-2 }10.10.10.12:{minio_seq:3 , nodename:minio-3 }10.10.10.13:{minio_seq:4 , nodename:minio-4 }vars:minio_cluster:miniominio_type:silominio_data:'/data{1...4}'minio_buckets:[{name:pgsql }, { name: infra }, { name: redis } ]minio_users:- {access_key:dba , secret_key:S3User.DBA, policy:consoleAdmin }- {access_key:pgbackrest , secret_key:S3User.SomeNewPassWord , policy:readwrite }# bind a node l2 vip (10.10.10.9) to minio cluster (optional)node_cluster:miniovip_enabled:truevip_vrid:128vip_address:10.10.10.9vip_interface:eth1# expose minio service with haproxy on all nodeshaproxy_services:- name:minio # [REQUIRED] service name, uniqueport:9002# [REQUIRED] service port, uniquebalance:leastconn # [OPTIONAL] load balancer algorithmoptions:# [OPTIONAL] minio health check- option httpchk- option http-keep-alive- http-check send meth OPTIONS uri /minio/health/live- http-check expect status 200servers:- {name:minio-1 ,ip:10.10.10.10 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-2 ,ip:10.10.10.11 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-3 ,ip:10.10.10.12 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-4 ,ip:10.10.10.13 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}
First, modify the Silo cluster definition to add four new nodes, assigning sequence numbers 5 to 8.
The key step is to modify the minio_volumes parameter to designate the new four nodes as a new storage pool.
Step 4: On the entire cluster, use the Ansible playbook to reconfigure Silo:
./minio.yml -l minio -t minio_config
This step updates the MINIO_VOLUMES configuration on the existing four nodes
Step 5: Restart the entire Silo cluster at once (do not use a rolling restart):
./minio.yml -l minio -t minio_launch -f 10# Up to 10 forks; restart all 8 nodes together
Step 6 (optional): If you are using a load balancer, make sure the load balancer configuration is updated. For example, add the new four nodes to the load balancer configuration:
# expose minio service with haproxy on all nodeshaproxy_services:- name:minio # [REQUIRED] service name, uniqueport:9002# [REQUIRED] service port, uniquebalance:leastconn # [OPTIONAL] load balancer algorithmoptions:# [OPTIONAL] minio health check- option httpchk- option http-keep-alive- http-check send meth OPTIONS uri /minio/health/live- http-check expect status 200servers:- {name:minio-1 ,ip:10.10.10.10 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-2 ,ip:10.10.10.11 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-3 ,ip:10.10.10.12 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-4 ,ip:10.10.10.13 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-5 ,ip:10.10.10.14 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-6 ,ip:10.10.10.15 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-7 ,ip:10.10.10.16 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}- {name:minio-8 ,ip:10.10.10.17 ,port:9000 ,options:'check-ssl ca-file /etc/pki/ca.crt check port 9000'}
Then, run the haproxy subtask of the node.yml playbook to update the load balancer configuration:
Silo cannot directly reduce the node or disk count of an existing storage pool. To shrink at the pool level, add a new pool, drain the old pool into it, and then retire the old pool.
First, download the new silo and mcli packages to the local repository on the INFRA node, then rebuild repository metadata with SOW:
./infra.yml -t repo_create
Next, upgrade the Silo server and compatible mcli client:
ansible minio -m package -b -a 'name=silo state=latest'# Serveransible minio -m package -b -a 'name=mcli state=latest'# Compatible client
Finally, have the role restart the complete Silo cluster:
./minio.yml -l minio -t minio_config,minio_launch
A package upgrade and migration from legacy MinIO to Silo are different operations. The former applies to a cluster already running Silo; the latter requires separate data-compatibility validation, backups, a maintenance window, and a rehearsed rollback plan. Do not reuse this upgrade procedure for migration.
# 1. Remove the failed node from the clusterbin/node-rm <your_old_node_ip>
# 2. Replace the failed node and keep its original name (if the IP changes, update the Silo cluster definition)bin/node-add <your_new_node_ip>
# 3. Install and configure Silo on the new node./minio.yml -l <your_new_node_ip>
# 4. Instruct Silo to healmcli admin heal
# 1. Unmount the failed disk from the clusterumount /dev/<your_disk_device>
# 2. Replace the failed disk, format with xfsmkfs.xfs /dev/sdb -L DRIVE1
# 3. Don't forget to setup fstab for auto-mountvi /etc/fstab
# LABEL=DRIVE1 /mnt/drive1 xfs defaults,noatime 0 2# 4. Remountmount -a
# 5. Instruct Silo to healmcli admin heal
Manage Silo Passwords
minio_secret_key, which defaults to S3User.MinIO, is the Silo root password. It is rendered to /etc/default/silo.
After changing it, refresh configuration and restart the entire cluster:
To change a regular Silo user password, such as pgbackrest, run this on a node that can access Silo:
set +o historymcli admin user passwd sss pgbackrest <YOUR_NEW_PASSWORD>
set -o history
Then update every consumer of that password. For example, if pgBackRest uses the minio S3-compatible repository preset, refresh its configuration with: