如何在Ubuntu上实现MinIO高可用性
导读:在 Ubuntu 上实现 MinIO 高可用 一、架构与前置条件 采用 多节点多驱动器 MNMD(分布式) 部署,生产环境强烈推荐。官方建议最小为 4 台服务器,每台 4 块盘,总计 16 个驱动器;该配置使用 纠删码,可容忍最多 一半节...
在 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(或使用统一域名/负载均衡地址)。
- 统一环境变量(/etc/default/minio,所有节点保持一致):
三、负载均衡与入口高可用
- 方案建议:部署 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 需谨慎评估并备份。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上实现MinIO高可用性
本文地址: https://pptw.com/jishu/769552.html
