管理预案
Module:
Categories:
创建集群
要创建一个集群,在配置清单中定义好后,执行 minio.yml
剧本即可。
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
例如,上面的配置定义了一个 SNSD 单机单盘 MinIO 集群,使用以下命令即可创建该 MinIO 集群:
./minio.yml -l minio # 在 minio 分组上安装 MinIO 模块
销毁集群
要销毁一个集群,执行 minio.yml
剧本的 minio_clean
子任务即可
./minio.yml -l minio -t minio_clean -e minio_clean=true # 停止并清理 MinIO 数据目录
如果您希望将 MinIO 从 Prometheus 监控系统中移除,可以执行:
ansible infra -b -a 'rm -rf /etc/prometheus/targets/minio/minio-1.yml' # 删除 MinIO 监控目标 minio-1
集群扩容
MinIO 无法在节点/磁盘级别上扩容,但可以在存储池(多个节点)层次上进行扩容。
现在假设您有 这样一个 四节点的 MinIO 集群,希望扩容一倍,新增一个四节点的存储池。
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: minio
minio_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: minio
vip_enabled: true
vip_vrid: 128
vip_address: 10.10.10.9
vip_interface: eth1
# expose minio service with haproxy on all nodes
haproxy_services:
- name: minio # [REQUIRED] service name, unique
port: 9002 # [REQUIRED] service port, unique
balance: leastconn # [OPTIONAL] load balancer algorithm
options: # [OPTIONAL] minio health check
- option httpchk
- option http-keep-alive
- http-check send meth OPTIONS uri /minio/health/live
- http-check expect status 200
servers:
- { 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' }
首先,修改 MinIO 集群定义,新增四台节点,按顺序分配序列号 5 到 8。
这里的关键一步是修改 minio_volumes
参数,将新的四个节点指定为一个新的 存储池。
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 }
# 新增的四个节点
10.10.10.14: { minio_seq: 5 , nodename: minio-5 }
10.10.10.15: { minio_seq: 6 , nodename: minio-6 }
10.10.10.16: { minio_seq: 7 , nodename: minio-7 }
10.10.10.17: { minio_seq: 8 , nodename: minio-8 }
vars:
minio_cluster: minio
minio_data: '/data{1...4}'
minio_volumes: 'https://minio-{1...4}.pigsty:9000/data{1...4} https://minio-{5...8}.pigsty:9000/data{1...4}' # 新增的集群配置
# …… 省略其他配置
第二步,将这些节点交由 Pigsty 纳管:
./node.yml -l 10.10.10.14,10.10.10.15,10.10.10.16,10.10.10.17
第三步,在新节点上,使用 Ansible 剧本 安装并准备 MinIO 软件:
./minio.yml -l 10.10.10.14,10.10.10.15,10.10.10.16,10.10.10.17 -t minio_install
第四步,在 整个集群 上,使用 Ansible 剧本 重新配置 MinIO 集群:
./minio.yml -l minio -t minio_config
这一步会更新现有四个节点的
MINIO_VOLUMES
配置
第五步,一次性重启整个 MinIO 集群(请注意,不要滚动重启!):
./minio.yml -l minio -t minio_launch -f 10 # 8并发数,确保同时重启
第六步(可选):如果您使用了负载均衡,那么请确保负载均衡器的配置也已经更新。例如,将新的四个节点加入到负载均衡器的配置中:
# expose minio service with haproxy on all nodes
haproxy_services:
- name: minio # [REQUIRED] service name, unique
port: 9002 # [REQUIRED] service port, unique
balance: leastconn # [OPTIONAL] load balancer algorithm
options: # [OPTIONAL] minio health check
- option httpchk
- option http-keep-alive
- http-check send meth OPTIONS uri /minio/health/live
- http-check expect status 200
servers:
- { 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' }
然后,执行 node.yml
剧本的 haproxy
子任务,更新负载均衡器配置:
./node.yml -l minio -t haproxy_config,haproxy_reload # 更新负载均衡器配置并在线加载
如果您使用 L2 VIP 来确保可靠的负载均衡器接入,那么还需要将新的节点(如果有)加入到现有 NODE VIP 分组中:
./node.yml -l minio -t node_vip # 刷新集群 L2 VIP 配置
集群缩容
MinIO 无法在节点/磁盘级别上缩容,但可以在存储池(多个节点)层次上进行退役 —— 新增一个新存储池,将旧存储池排干迁移到新存储池,然后将旧存储池退役。
集群升级
首先,将新版本的 MinIO 软件包下载至 INFRA 节点的本地软件仓库,然后重建软件仓库索引:
./infra.yml -t repo_create
其次,使用 Ansible 批量升级 MinIO 软件包版本:
ansible minio -m package -b -a 'name=minio state=latest' # 升级 MinIO 服务器软件版本
ansible minio -m package -b -a 'name=mcli state=latest' # 升级 MinIO 客户端软件版本
最后,使用 mc 命令行工具通知 MinIO 集群重启:
mc admin service restart sss
替换故障节点
# 1. 从集群中下线故障节点
bin/node-rm <your_old_node_ip>
# 2. 替换故障节点,使用原来的节点名称(如果IP变化,您需要修改 MinIO 集群定义)
bin/node-add <your_new_node_ip>
# 3. 在新节点上安装配置 MinIO
./minio.yml -l <your_new_node_ip>
# 4. 指示 MinIO 执行恢复动作
mc admin heal
替换故障磁盘
# 1. 从集群中删除故障磁盘
umount /dev/<your_disk_device>
# 2. 替换故障磁盘,使用xfs格盘
mkfs.xfs /dev/sdb -L DRIVE1
# 3. 不要忘记设置开机自动挂载
vi /etc/fstab
# LABEL=DRIVE1 /mnt/drive1 xfs defaults,noatime 0 2
# 4. 重新挂载
mount -a
# 5. 指示 MinIO 执行恢复动作
mc admin heal
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.