生产环境实战:手把手教你从零搭建4节点高可用MinIO分布式集群

如果你已经理解了 MinIO 纠删码的工作原理,那么接下来最实际的问题就是:如何把理论落地到生产环境?

很多初学者在接触 MinIO 时,往往从单机版开始,用 Docker 跑个 Demo,上传下载几个文件就觉得”会用了”。但真正的挑战在于:当业务增长到需要面对TB 甚至 PB 级数据时,单机显然无法满足需求。你需要的是一个高可用、可扩展、能容忍节点故障的分布式集群。

这篇文章,我将带你从零开始,完整走一遍生产环境 4 节点 MinIO 分布式集群的搭建过程。不省略任何步骤,不跳过任何坑,每一步都有明确说明。

集群架构与规划

为什么要 4 节点?

MinIO 的分布式模式要求集群节点数满足 2 × N(N 为正整数),也就是至少需要 2 个节点。但生产环境中,2 节点意味着只能容忍 1 个节点故障,容错能力有限。而 4 节点配合 EC:2(2 数据块 + 2 校验块)或更大的 EC 配置,可以同时容忍 2 个节点故障,容灾能力更强。

更关键的原因是:4 节点是 MinIO 纠删码默认配置(EC:4)的最小规模。只有达到 4 节点,你才能体验到 MinIO 完整的高可用特性。

我们的集群规划

项目 配置
节点数 4 台
操作系统 CentOS 7.9 / Ubuntu 20.04
单节点磁盘 4 块 1TB SSD(数据盘)+ 1 块 200GB SSD(系统盘)
单节点内存 32GB
CPU 8 核以上,支持 AVX-512 或 AVX2
网络 万兆以太网(内网数据同步专用)
部署目录 /data/minio
服务端口 API: 9000,Console: 9001

网络规划

节点 内网 IP 用途
minio-01 192.168.1.101 主节点 1
minio-02 192.168.1.102 主节点 2
minio-03 192.168.1.103 主节点 3
minio-04 192.168.1.104 主节点 4

磁盘挂载方案

每台服务器的 4 块数据盘需要分别挂载到独立目录。以 minio-01 为例:

/dev/sdb -> /data/minio/disk1
/dev/sdc -> /data/minio/disk2
/dev/sdd -> /data/minio/disk3
/dev/sde -> /data/minio/disk4

重要提醒:MinIO 要求每个节点上的磁盘数相同,并且所有节点的磁盘配置一致。如果你的节点磁盘数不一致,MinIO 会拒绝启动。


第一步:系统环境准备

1.1 设置主机名与 hosts 文件

所有节点上执行:

# 设置主机名(以 minio-01 为例,其他节点对应修改)
hostnamectl set-hostname minio-01

# 配置 /etc/hosts
cat >> /etc/hosts <<EOF
192.168.1.101 minio-01
192.168.1.102 minio-02
192.168.1.103 minio-03
192.168.1.104 minio-04
EOF

1.2 关闭防火墙与 SELinux

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

生产环境建议:不要真正关闭防火墙,而是开放对应端口。这里为了演示简化处理。

1.3 挂载数据盘

所有节点上,格式化并挂载 4 块数据盘:

# 创建挂载目录
mkdir -p /data/minio/{disk1,disk2,disk3,disk4}

# 格式化磁盘(假设数据盘为 /dev/sdb ~ /dev/sde,请根据实际情况调整)
mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc
mkfs.xfs /dev/sdd
mkfs.xfs /dev/sde

# 挂载
echo '/dev/sdb /data/minio/disk1 xfs defaults,noatime 0 0' >> /etc/fstab
echo '/dev/sdc /data/minio/disk2 xfs defaults,noatime 0 0' >> /etc/fstab
echo '/dev/sdd /data/minio/disk3 xfs defaults,noatime 0 0' >> /etc/fstab
echo '/dev/sde /data/minio/disk4 xfs defaults,noatime 0 0' >> /etc/fstab

mount -a

为什么推荐 XFS? XFS 在处理大文件和高并发写入场景下性能更优,是 MinIO 官方推荐使用的文件系统。

验证挂载是否成功:

df -h | grep minio

1.4 同步时间

分布式系统对时间同步极其敏感,必须在所有节点上配置 NTP:

# 安装并启用 chrony
yum install -y chrony
systemctl enable chronyd
systemctl start chronyd

# 验证时间同步
chronyc tracking

第二步:安装 MinIO

2.1 下载二进制文件

所有节点上下载并安装 MinIO:

# 创建安装目录
mkdir -p /usr/local/minio
cd /usr/local/minio

# 下载 MinIO(以 2024 年稳定版为例,请替换为最新版本)
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio

# 创建软链接
ln -sf /usr/local/minio/minio /usr/local/bin/minio

# 验证安装
minio --version

2.2 创建专用用户

出于安全考虑,MinIO 不应使用 root 用户运行:

# 在所有节点上创建 minio 用户
groupadd -r minio-user
useradd -r -g minio-user -s /sbin/nologin minio-user

# 授权数据目录
chown -R minio-user:minio-user /data/minio

2.3 创建环境变量文件

所有节点上创建 /etc/default/minio

cat > /etc/default/minio <<'EOF'
# MinIO 访问密钥(生产环境请使用强密码)
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=YourStrongPassword123!

# MinIO 启动参数
# 注意:每个节点的 MINIO_VOLUMES 配置相同
MINIO_VOLUMES="http://minio-0{1...4}:9000/data/minio/disk{1...4}"

# MinIO 控制台地址
MINIO_OPTS="--console-address :9001"
EOF

这里有几个关键点需要理解

  1. MINIO_VOLUMES 格式http://minio-0{1...4}:9000/data/minio/disk{1...4} 使用了 MinIO 的扩展符号{1...4} 表示展开为 1,2,3,4。这会被解析为:

    • 4 个节点(minio-01 到 minio-04)
    • 每个节点 4 个磁盘目录(disk1 到 disk4)
    • 总共 16 个存储位置
  2. 为什么所有节点的配置相同? 因为 MinIO 是无中心架构,每个节点启动时都知道整个集群的拓扑结构,它们通过相同的 MINIO_VOLUMES 参数自动发现彼此并组成集群。

  3. –console-address :9001:指定 MinIO Web 管理控制台监听端口。

2.4 创建 Systemd 服务文件

所有节点上创建 /etc/systemd/system/minio.service

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target

[Service]
Type=notify
WorkingDirectory=/usr/local/minio
User=minio-user
Group=minio-user
EnvironmentFile=-/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=on-failure
RestartSec=5

# 生产环境建议的资源限制
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

2.5 启动 MinIO 集群

关键步骤:需要在短时间内在所有节点上依次启动 MinIO。因为 MinIO 集群采用仲裁机制(Quorum),需要大多数节点在线才能正常初始化。

# 在所有节点上执行
systemctl daemon-reload
systemctl enable minio
systemctl start minio

启动顺序建议:使用 Ansible、Pssh 等多机执行工具,在 30 秒内完成所有节点的启动。如果节点启动间隔过长,可能会导致集群初始化失败。

2.6 验证启动状态

在任意节点上查看服务状态:

systemctl status minio






次阅读

扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论