温馨提示×

如何在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 与负载均衡后端。
  • 升级与变更:
    • 采用 滚动升级(逐台重启)并观察 journalctlmc admin info;变更 MINIO_VOLUMES/MINIO_SERVER_URL 需谨慎评估并备份。

0