如何在Ubuntu上实现MinIO高可用性
小樊
41
2025-12-10 22:02:26
在 Ubuntu 上实现 MinIO 高可用
一、架构与前置条件
- 采用 多节点多驱动器 MNMD(分布式) 部署,生产环境强烈推荐。官方建议最小为 4 台服务器,每台 4 块盘,总计 16 个驱动器;该配置使用 纠删码,可容忍最多 一半节点或驱动器丢失 且仍可提供读取服务。若使用单节点多磁盘(SNMD),仅具备磁盘级容错,不具备节点级高可用。为获得企业级性能与可扩展性,优先选择分布式。
- 网络与端口:节点间需 双向互通,开放 9000(S3 API) 与 9001(Console);建议使用 负载均衡器 统一管理入口,负载均衡策略使用 最少连接数(least_conn)。
- 主机命名与解析:MinIO 分布式要求 连续的主机名或 IP(支持扩展表示法如 {1…4});若不满足,可在 /etc/hosts 中配置连续解析。
- 时间同步:所有节点需 NTP/chrony 时间同步,避免集群异常。
- 存储与文件系统:使用 直连存储(DAS/JBOD),磁盘格式化为 XFS,并通过 /etc/fstab 配置自动挂载;不建议在分布式场景使用 RAID/NFS/SAN 等网络/聚合存储,通常无法带来额外弹性且可能降低性能。
- 规模与一致性:单租户在分布式模式下常见限制为 最少 4 盘、最多 16 盘;MinIO 提供 read-after-write 一致性。
二、部署步骤
- 节点规划示例(4 节点、每节点 4 盘):
| 节点 |
IP |
磁盘 |
挂载点 |
| minio1.example.com |
192.168.72.51 |
/dev/sdb~/sde |
/var/lib/minio/data{1…4} |
| minio2.example.com |
192.168.72.52 |
/dev/sdb~/sde |
/var/lib/minio/data{1…4} |
| minio3.example.com |
192.168.72.53 |
/dev/sdb~/sde |
/var/lib/minio/data{1…4} |
| minio4.example.com |
192.168.72.54 |
/dev/sdb~/sde |
/var/lib/minio/data{1…4} |
- 基础环境(所有节点)
- 主机名与解析:
hostnamectl set-hostname minio1.example.com(其余类推)
echo -e “192.168.72.51 minio1.example.com\n192.168.72.52 minio2.example.com\n192.168.72.53 minio3.example.com\n192.168.72.54 minio4.example.com” >> /etc/hosts
- 时间同步:
apt install -y chrony && systemctl enable --now chrony && timedatectl set-timezone Asia/Shanghai
- 磁盘与挂载(示例为 4 盘,使用 LABEL 挂载更稳健):
for d in b c d e; do mkfs.xfs /dev/sd$d -L DISK$d; mkdir -p /var/lib/minio/data${d}; done
cat >>/etc/fstab <<EOF
LABEL=DISKb /var/lib/minio/data1 xfs defaults,noatime 0 2
LABEL=DISKc /var/lib/minio/data2 xfs defaults,noatime 0 2
LABEL=DISKd /var/lib/minio/data3 xfs defaults,noatime 0 2
LABEL=DISKe /var/lib/minio/data4 xfs defaults,noatime 0 2
EOF
mount -av && df -hT
- 安装 MinIO(所有节点)
- DEB 安装:wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240704142545.0.0_amd64.deb -O minio.deb && sudo dpkg -i minio.deb
- 创建系统用户与授权:
groupadd -r minio-user && useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /var/lib/minio
- 配置服务与启动
- 统一环境变量(/etc/default/minio,所有节点保持一致):
MINIO_VOLUMES=“http://minio{1…4}.example.com:9000/var/lib/minio/data{1…4}/minio”
MINIO_OPTS=“–console-address :9001”
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio@123456
MINIO_BROWSER_REDIRECT_URL=“http://minio.example.com/minio/ui”
说明:如通过域名/负载均衡对外暴露,建议设置 MINIO_SERVER_URL=https://minio.example.com:9000(所有节点一致)。
- systemd 服务(/usr/lib/systemd/system/minio.service 或 /etc/systemd/system/minio.service):
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- 启动与验证:
systemctl daemon-reload && systemctl enable --now minio
systemctl status minio && journalctl -f -u minio
控制台访问:http://任意节点IP:9001(或使用统一域名/负载均衡地址)。
三、负载均衡与入口高可用
- 方案建议:部署 2 台 Nginx + Keepalived 提供 VIP(如 192.168.72.100) 与 7 层反向代理,对外统一域名 minio.example.com;API 与 Console 分别反向代理到后端 9000/9001,策略使用 least_conn。
- Nginx 核心配置片段(/etc/nginx/conf.d/minio-lb.conf):
upstream minio_s3 { least_conn; server minio1.example.com:9000; server minio2.example.com:9000; server minio3.example.com:9000; server minio4.example.com:9000; }
upstream minio_console { least_conn; server minio1.example.com:9001; server minio2.example.com:9001; server minio3.example.com:9001; server minio4.example.com:9001; }
server { listen 80; server_name minio.example.com; client_max_body_size 0; proxy_buffering off; proxy_request_buffering off;
location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_pass http://minio_s3; }
location /minio/ui/ { rewrite ^/minio/ui/(.*) /$1 break; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; proxy_pass http://minio_console; }
}
说明:生产建议启用 TLS/HTTPS(可使用 certbot/企业 CA),并将证书挂载至 MinIO 的 ~/.minio/certs 或通过 –certs-dir 指定。
四、验证与运维要点
- 集群健康与信息:
mc alias set myminio http://minio.example.com:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
mc admin info myminio(检查节点数、磁盘数、可用性与纠删码信息)
- 可用性验证:
- 停掉任意 1 台 MinIO 服务,验证对象仍可 读取,并可通过控制台/客户端继续 写入(满足 N/2 在线可读、N/2+1 在线可写)。
- 依次宕机至 2 台,在 4 节点 4 盘配置下仍应可读;尝试创建/删除桶与对象验证写入能力边界。
- 数据与容量:
- 确保所有节点 磁盘类型与容量一致;部署容量受最小盘限制(例如混入 1TB 盘,则所有盘按 1TB 使用)。
- 分布式模式不建议 RAID,优先 JBOD + XFS 直连存储。
- 时间与解析:
- 持续监控 chrony 同步状态;变更主机名/IP 需同步更新 /etc/hosts 与负载均衡后端。
- 升级与变更:
- 采用 滚动升级(逐台重启)并观察 journalctl 与 mc admin info;变更 MINIO_VOLUMES/MINIO_SERVER_URL 需谨慎评估并备份。