# 工具部署MinIO
工具类型: shell 脚本
文档更新: 2025-02-22 16:43:06
适用场景: 非云化产品的的私有化部署(自建环境)
# 免责申明和使用须知
1.工具定位声明
- 本工具为 辅助部署工具,旨在帮助快速搭建云原生环境所依赖的中间件(包含并不仅限于Kubernetes、Nacos、Kafka等),便于项目组快速部署微服务应用。
- 不承诺提供中间件的长期完整维护、支持或安全保障。
2.开源组件免责声明
- 本工具使用的 Kubernetes、etcd、calico、Nacos、Kafka等组件均为开源软件,受各自开源许可证保护。
- 本工具 不修改、不篡改 任何开源组件,仅作为安装和部署的辅助工具。
- 使用本工具即表示您已阅读并同意相关开源组件的 使用许可协议。
3.安全与责任声明
- 本工具 不承担 因使用过程中出现的安全问题、系统崩溃、数据丢失等后果的责任。
- 建议用户自行评估部署环境的安全性,并根据自身需求选择合适的版本和配置。
4.不提供长期维护
- 本工具仅为临时部署工具,不承诺对中间件进行持续更新、补丁修复、安全处置和兼容性支持。
- 用户应自行关注官方更新,并根据实际需要决定是否升级或更换工具。
5.商业使用提醒
- 若您将本工具用于 商业环境,请确保所有使用组件符合其 开源许可证,并遵守相关法律法规。
- 本工具不提供任何形式的商业支持或担保。
6.用户自主决策
- 本工具仅供参考和学习使用,最终部署方案由用户自行决定。
- 在使用前,请确保您具备足够的技术能力,并了解Kubernetes、Nacos、Kafka等等云原生组件的运行机制和配置方法。
# 相关下载
安装工具: https://pan.baidu.com/s/1cp8zb9ifxSk0-C8FfHw6tg?pwd=2024
官方下载地址:https://dl.min.io/community/
推荐使用控制台具备全功能菜单的最后一个版本: RELEASE.2025-04-22T22-12-26Z
# 工具安装部署
# 环境准备要求
MinIO工具部署原理是:[MinIO主机] —-SSH远程部署—-> [MinIO单机/MinIO集群]
故,如果是单机,就将工具放在当前单机服务器上;如果是集群,就将工具放在集群第一个节点上,其余服务器确保SSH端口互通,工具自动部署。
# 准备工具安装包
将工具安装所需包上传到服务器任意位置,如 /seeyon/scripts/minio ,安装包包含两个文件(amd是X86,arm是ARM架构,按需选择上传):
上传后,解压安装包,其中.7z文件需要安装解压命令,如果操作系统没有,也可以在windows电脑解压然后改成zip再上传:
tar -xf multi-install-minio-amd64.tgz
7z x minio-binaries-20250422-amd64.7z
# 如果是全量包 不需要再下载和解压 minio-binaries-20250422-amd64.7z

# 运维机配置工具参数
vim multi-install-minio.sh
参数说明:
- 具体参数解读,可见安装工具云盘地址里面的部署视频。
- disks{"/dev/sdb"}和fsFormat="xfs"参数是主动格式化选项,需要确保minio独立服务器独立数据盘存储,工具会对数据盘进行格式化;个人单机环境不要调整,更不要设置成系统盘地址
- 单机和集群环境,都需要配置服务器的SSH信息,要求每台服务器的SSH信息保持一致
- 安装工具默认已经提供了桶的初始化信息,可以直接复用。

# 执行脚本工具
1、直接运行.sh不会执行安装,脚本工具会输出用法供参考:
bash multi-install-minio.sh
一般单机部署选择:单节点单设备;集群部署选择:多节点多设备。 生产环境默认推荐集群模式,以确保对象存储的高可用能力。

2、运行部署命令,参考上一步的用法信息,执行部署命令。 如单机部署执行:
bash multi-install-minio.sh i ss
部署过程中,如缺少依赖,按工具提示自行安装依赖再重新部署。
3、部署完成,注意记录部署信息,供后续配置使用

4、访问MinIO管理控制台效果:

# 日常运维
1、部署脚本目录下 /document/v8-minio.txt 存放了桶信息。
2、部署脚本目录下 document/deploy-minio.info 存放了minio的http和api访问地址及帐号密码。
3、服务启停:
启动systemctl start minio
停止systemctl stop minio
重启systemctl restart minio
查看状态systemctl status minio
# 单机部署截图

# 集群部署截图

# minio扩容

在MinIO集群中扩容磁盘需要遵循特定的规则,以确保数据均衡和纠删码(Erasure Coding)的有效性。以下是扩容磁盘的关键步骤和要求:
# 一、扩容磁盘的基本规则
扩容单位 MinIO要求以纠删码组(Erasure Set)为单位扩容,且扩容后需保持每组磁盘数量一致。
- 默认情况下,纠删码组大小为 4到16块磁盘(必须跨节点分布)。
- 例如:初始集群为4节点×2磁盘=8块,若默认纠删码组大小为4,则共有2个纠删码组(每组4块,跨4节点)。
扩容磁盘数量要求
- 必须成组扩容:每次扩容的磁盘数需是纠删码组大小的整数倍。
- 若纠删码组大小为4,则每次至少扩容4块(例如:+4、+8、+12等)。
- 必须均匀分布到所有节点:新磁盘需在所有节点间均衡添加。
- 例如:4节点集群扩容4块磁盘 → 每节点新增1块磁盘。
- 必须成组扩容:每次扩容的磁盘数需是纠删码组大小的整数倍。
扩容后磁盘数量限制
- 单个MinIO集群最多支持32个节点,每个节点最多16块磁盘(总磁盘数≤512块)。
# 二、具体扩容步骤
# 场景示例
初始集群:4节点,每节点2块100G磁盘(共8块,默认2个纠删码组,每组4块)。 目标:扩容到每节点4块磁盘(共16块)。
# 步骤1:准备新磁盘
- 确保每个节点新增的磁盘容量和类型与原磁盘一致(推荐)。
- 例如:每节点新增2块100G磁盘(共+8块)。
# 步骤2:动态扩容(无需停机)
扩展磁盘目录 修改MinIO启动命令,将新磁盘路径加入原有命令:
# 原命令(假设): minio server http://node{1...4}/data/{1...2}/disk # 扩容后命令(每节点新增2块磁盘): minio server http://node{1...4}/data/{1...4}/disk- 重启MinIO服务(滚动重启节点,避免服务中断)。
自动数据均衡
- MinIO会自动将数据均衡分布到新磁盘,无需手动干预。
- 通过监控工具(如
mc admin info)观察均衡进度。
# 步骤3:验证扩容
# 检查集群状态和可用容量
mc admin info myminio
- 确认新磁盘已加入,且
Usable Space按纠删码比例增加。
# 三、扩容后的容量计算
- 初始容量:8块×100G = 800G,默认EC:4(4数据+4校验),可用400G。
- 扩容后:16块×100G = 1600G,EC组仍为4数据+4校验(每组8块,共2组),可用800G。
- 可用容量公式:
(数据分片数 / 总磁盘数) × 总原始容量。
- 可用容量公式:
# 四、注意事项
不可缩减磁盘
MinIO不支持减少磁盘数量,扩容后无法回退。节点扩展 vs 磁盘扩展
- 增加节点:需保持每节点磁盘数一致(如从4节点×2盘扩容到8节点×2盘)。
- 增加磁盘:需保持所有节点同步增加(如4节点×2盘→4节点×4盘)。
性能影响
- 扩容期间可能短暂影响I/O性能(数据均衡占用资源)。
- 建议在低峰期操作。
# 五、总结
- 扩容要求:成组(纠删码组倍数)、均匀分布、同类型磁盘。
- 操作步骤:修改启动命令→滚动重启→自动均衡。
- 容量增长:可用空间按纠删码比例线性增加(如默认EC:4下,50%利用率)。
通过遵循上述规则,可以安全地扩展MinIO集群的存储容量。
# 附录 minio扩容 实操
1、gossh 在部署脚本工具的 bin/
2、相关操作命令为测试时使用到的命令 不完全按照顺序来 按需使用 不要照着顺序敲
原有脚本的磁盘如下写法扩容失败。网上的资料说这种写法无法扩容。测试了N多方法未解决,不知道原因是什么。
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED=true
MINIO_CONSOLE_WEB_SOCKET_PORT=9001
MINIO_VOLUMES="http://192.168.100.211/data/minio/disk1 \
http://192.168.100.211/data/minio/disk2 \
http://192.168.100.212/data/minio/disk1 \
http://192.168.100.212/data/minio/disk2 \
http://192.168.100.213/data/minio/disk1 \
http://192.168.100.213/data/minio/disk2 \
http://192.168.100.214/data/minio/disk1 \
http://192.168.100.214/data/minio/disk2"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
部署时如下写法扩容成功
# 扩容前
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.21{1...4}/data/minio/disk{1...2}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
# 扩容后
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.21{1...4}/data/minio/disk{1...2} http://192.168.100.21{5...8}/data/minio/disk{1...2}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
| 部署模式 | 原有节点 | 原有磁盘 | 新增节点 | 新增磁盘 | 测试结果 | 其他实测通过的扩容解决方案 |
|---|---|---|---|---|---|---|
| 单节点单设备 | 1 | 1 | 0 | 1 | 失败 | 法一:换盘不加盘 使用 rsync 把数据整体迁移到更大的盘 法二:新建一套minio 使用 mc mirror/mc cp来实现扩容 |
| 单节点多设备 | 1 | 2 | 0 | 2 | 失败 | 法一:换盘不加盘 使用 rsync 把数据整体迁移到更大的盘 法二:新建一套minio 使用 mc mirror/mc cp来实现扩容 |
| 多节点单设备 | 2 | 1 | 0 | 1 | 成功 | 原地新增磁盘 |
| 多节点多设备 | 2 | 2 | 0 | 2 | 成功 | 原地新增磁盘 |
| 多节点多设备 | 2 | 2 | 2 | 2 | 成功 | 对等扩容 |
| 多节点多设备 | 4 | 2 | 4 | 2 | 成功 | 对等扩容 |
# 单节点单设备
旧节点-/apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="/data/minio/disk1"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
已测 不支持原地扩容
yum install -y rsync
rsync -aHAX --progress /data/minio/disk1/ /data/minio/disk2/
# 单节点多设备
旧节点-/apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="/data/minio/disk{1...2}"
MINIO_VOLUMES="/data/minio/disk1 /data/minio/disk2"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
已测 不支持原地扩容
# 多节点单设备
旧节点-/apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.171/data/minio/disk1 http://192.168.100.172/data/minio/disk1"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
新节点-/apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.17{1...2}/data/minio/disk1 http://192.168.100.17{1...2}/data/minio/disk2"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
# 多节点多设备
# 2节点2磁盘
旧节点-/apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.171/data/minio/disk{1...2} http://192.168.100.172/data/minio/disk{1...2}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
新节点-/apps/minio/etc/minio.conf
仅新增磁盘
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.171/data/minio/disk{1...2} http://192.168.100.172/data/minio/disk{1...2} http://192.168.100.171/data/minio/disk{3...4} http://192.168.100.172/data/minio/disk{3...4}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
新增节点+新增磁盘
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.171/data/minio/disk{1...2} http://192.168.100.172/data/minio/disk{1...2} http://192.168.100.173/data/minio/disk{1...2} http://192.168.100.174/data/minio/disk{1...2}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
# 4节点2磁盘
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
#MINIO_VOLUMES="/data/minio/disk{1...2}"
#MINIO_VOLUMES="http://192.168.100.171/data/minio/disk{1...2}"
MINIO_VOLUMES="http://192.168.100.171/data/minio/disk{1...2} http://192.168.100.172/data/minio/disk{1...2} http://192.168.100.171/data/minio/disk{3...4} http://192.168.100.172/data/minio/disk{3...4}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
集群一旦部署,后期只能对等扩容,务必提前做好集群规划,集群的最大节点数不得超过32个。
export PATH=/seeyon/scripts/bin/amd64:$PATH
olds="192.168.100.211 192.168.100.212 192.168.100.213 192.168.100.214"
news="192.168.100.215 192.168.100.216 192.168.100.217 192.168.100.218"
1、在新节点上准备磁盘与目录
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e "echo 'export PATH=/apps/minio/bin:/apps/minio/sbin:\$PATH' >> /etc/profile"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e 'mkdir -p /data/minio/disk1 && mkfs.xfs -f /dev/sdb && uuid=$(blkid -s UUID /dev/sdb | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk1 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk1 xfs defaults 0 0" >> /etc/fstab'
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e 'mkdir -p /data/minio/disk2 && mkfs.xfs -f /dev/sdc && uuid=$(blkid -s UUID /dev/sdc | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk2 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk2 xfs defaults 0 0" >> /etc/fstab'
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e "mount -a && df -h | grep minio"
2、在1节点上更新 /apps/minio/etc/minio.conf 配置 效果如下所示
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED=true
MINIO_CONSOLE_WEB_SOCKET_PORT=9001
MINIO_VOLUMES="\
http://192.168.100.211/data/minio/disk1 \
http://192.168.100.211/data/minio/disk2 \
http://192.168.100.212/data/minio/disk1 \
http://192.168.100.212/data/minio/disk2 \
http://192.168.100.213/data/minio/disk1 \
http://192.168.100.213/data/minio/disk2 \
http://192.168.100.214/data/minio/disk1 \
http://192.168.100.214/data/minio/disk2:\
http://192.168.100.215/data/minio/disk1 \
http://192.168.100.215/data/minio/disk2 \
http://192.168.100.216/data/minio/disk1 \
http://192.168.100.216/data/minio/disk2 \
http://192.168.100.217/data/minio/disk1 \
http://192.168.100.217/data/minio/disk2 \
http://192.168.100.218/data/minio/disk1 \
http://192.168.100.218/data/minio/disk2"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
3、部署 minio 到新节点
# 在新节点上创建目录
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e "mkdir -p /apps/minio/etc"
# 把节点1上的 /apps/minio/etc/minio.conf 传输到除首节点外的所有旧节点以及所有新节点
gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds/192.168.100.211 /} ${news} -F -f "/apps/minio/etc/minio.conf" -d "/apps/minio/etc"
# 把节点1上的安装目录传输到新节点
gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -F -f "/apps/minio" -d "/apps"
gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -F -f "/etc/systemd/system/minio.service" -d "/etc/systemd/system"
4、启动 minio 服务
# gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} ${news} -n -e "systemctl restart minio"
# 先在所有旧节点重启服务
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e "systemctl stop minio; pkill -f minio"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e "systemctl restart minio"
# 后在所有新节点重启服务
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e "systemctl daemon-reload && systemctl enable minio && systemctl restart minio"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e "rm -rf /data/minio/disk{1,2}/.minio.sys"
5、使用mc 检查是否成功扩容
source /etc/profile
mc alias set minio http://192.168.100.211:9000 admin i4Seeyon
mc admin info minio
执行一次健康检查
mc admin heal minio --recursive
检查是否扩容结果
journalctl -u minio -f
日志中出现以下内容表示扩容成功
Formatting new set of drives
All drives online
systemctl stop minio
umount /data/minio/disk1
umount /data/minio/disk2
rm -rf /data/minio/disk{1,2}
mkfs.xfs -f /dev/sdb
mkfs.xfs -f /dev/sdc
mkdir -p /data/minio/disk{1,2}
mount -t xfs /dev/sdb /data/minio/disk1
mount -t xfs /dev/sdc /data/minio/disk2
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e "systemctl stop minio; pkill -f minio"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e "umount /data/minio/disk{1,2}"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${news} -n -e 'mkdir -p /data/minio/disk1 && mkfs.xfs -f gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e 'mkdir -p /data/minio/disk1 && mkfs.xfs -f /dev/sdb && uuid=$(blkid -s UUID /dev/sdb | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk1 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk1 xfs defaults 0 0" >> /etc/fstab'
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e 'mkdir -p /data/minio/disk2 && mkfs.xfs -f /dev/sdc && uuid=$(blkid -s UUID /dev/sdc | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk2 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk2 xfs defaults 0 0" >> /etc/fstab'
[root@minio-1 scripts]# cat /apps/minio/etc/minio.conf
MINIO_PORT="9000"
MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="i4Seeyon"
# MINIO_SSL_ENABLE=true
# MINIO_SSL_CERT_FILE="/apps/minio/certs/public.crt"
# MINIO_SSL_KEY_FILE="/apps/minio/certs/private.key"
MINIO_PROMETHEUS_AUTH_TYPE="public"
MINIO_PROMETHEUS_URL="http://192.168.100.240:9090"
MINIO_PROMETHEUS_JOB_ID="minio-job"
MINIO_CONSOLE_WEB_SOCKET_ENABLED="true"
MINIO_CONSOLE_WEB_SOCKET_PORT="9001"
MINIO_VOLUMES="http://192.168.100.21{1...4}/data/minio/disk{1...2}"
MINIO_OPTS="--certs-dir /apps/minio/certs --config-dir /apps/minio/etc"
# gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds/192.168.100.211 /} -F -f "/apps/minio" -d "/apps"
gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds/192.168.100.211 /} -F -f "/apps/minio/etc/minio.conf" -d "/apps/minio/etc"
gossh -c 10 push -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds/192.168.100.211 /} ${news} -F -f "/apps/minio/etc/minio.conf" -d "/apps/minio/etc"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} -n -e "systemctl restart minio"
gossh -c 10 command -j -o /seeyon/scripts/logs/gossh.log -P 22 -u root -p 110110 ${olds} ${news} -n -e "systemctl restart minio"
# 单机单设备-不支持扩容
可以考虑新加一块大盘 停服后拷贝数据到新盘 再调整minio配置盘为新盘
# 单机多设备
mkdir -p /data/minio/disk{1,2}
mkdir -p /data/minio/disk1 && mkfs.xfs -f /dev/sdb && uuid=$(blkid -s UUID /dev/sdb | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk1 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk1 xfs defaults 0 0" >> /etc/fstab
mkdir -p /data/minio/disk2 && mkfs.xfs -f /dev/sdc && uuid=$(blkid -s UUID /dev/sdc | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk2 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk2 xfs defaults 0 0" >> /etc/fstab
systemctl daemon-reload
# 双节点双设备
mkdir -p /data/minio/disk3 && mkfs.xfs -f /dev/sdd && uuid=$(blkid -s UUID /dev/sdd | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk3 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk3 xfs defaults 0 0" >> /etc/fstab
mkdir -p /data/minio/disk4 && mkfs.xfs -f /dev/sde && uuid=$(blkid -s UUID /dev/sde | awk -F "=" "{print \$2}" | sed "s|\"||g") && mount -t xfs UUID=$uuid /data/minio/disk4 && grep -q "UUID=$uuid" /etc/fstab || echo "UUID=$uuid /data/minio/disk4 xfs defaults 0 0" >> /etc/fstab
# 容错与风险分析
| *集群规模* | *总盘数* | *允许坏盘数* | *允许坏节点数* | *建议用途* |
|---|---|---|---|---|
| 2节点×2盘 | 4 | 最多坏1盘 | 不允许坏任意节点 | 测试、小型POC |
| 4节点×2盘 | 8 | 可坏2盘 | 可坏1节点 | 小型生产可用 |
| 6节点×2盘 | 12 | 可坏4盘 | 可坏1节点 | 推荐起点 |
| 8节点×2盘 | 16 | 可坏5盘 | 可坏2节点 | 企业级部署推荐 |
说明:
- MinIO 要求****至少一半以上的 drives 可用**** 才能保持读写。
- 在 2×2 架构下,如果坏掉一个节点(2块盘),只剩 2/4 可用 → 少于 50% → 集群直接宕机。
https://docs.min.io/enterprise/aistor-object-store/reference/aistor-server/requirements/storage/
使用基于标签的挂载规则,而非基于 UUID 的规则。基于标签的规则允许在不修改任何配置文件的情况下,将故障或无法工作的硬盘更换为标签匹配的替换硬盘。而基于 UUID 的规则则需要获取替换硬盘的 UUID,并编辑配置文件/etc/fstab以将映射替换为新的硬盘 UUID。
关于lvm
https://github.com/minio/minio/issues/14573
快速跳转