Skip to content

MinIO 部署方案

1. 单机部署

1.1 二进制文件部署

适用场景:快速部署单机 MinIO 服务,适用于开发、测试或小规模生产环境

部署步骤

  1. 下载 MinIO 二进制文件

    bash
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x minio
  2. 创建数据目录

    bash
    mkdir -p /data/minio
  3. 设置环境变量

    bash
    export MINIO_ROOT_USER=admin
    export MINIO_ROOT_PASSWORD=password@123
  4. 启动 MinIO 服务

    bash
    ./minio server /data/minio --console-address :9001
  5. 设置开机自启

    • 创建 systemd 服务文件 /etc/systemd/system/minio.service
    ini
    [Unit]
    Description=MinIO Server
    Documentation=https://docs.min.io
    After=network.target
    
    [Service]
    User=root
    Group=root
    Environment="MINIO_ROOT_USER=admin"
    Environment="MINIO_ROOT_PASSWORD=password@123"
    ExecStart=/usr/local/bin/minio server /data/minio --console-address :9001
    Restart=always
    RestartSec=3
    
    [Install]
    WantedBy=multi-user.target
    • 启动并设置开机自启:
    bash
    cp minio /usr/local/bin/
    systemctl daemon-reload
    systemctl start minio
    systemctl enable minio
  6. 访问 MinIO 控制台

    • 浏览器访问:http://<server-ip>:9001
    • 使用设置的用户名和密码登录

1.2 YUM 部署

适用场景:在 RHEL/CentOS 系统上通过包管理器部署 MinIO

部署步骤

  1. 添加 MinIO YUM 仓库

    bash
    cat > /etc/yum.repos.d/minio.repo << EOF
    [minio]
    name=MinIO Repository
    baseurl=https://dl.min.io/server/minio/release/linux-amd64/yum/
    enabled=1
    gpgcheck=1
    gpgkey=https://dl.min.io/server/minio/release/linux-amd64/minio-20240101000000.0.0.x86_64.rpm.asc
    EOF
  2. 安装 MinIO

    bash
    yum -y install minio
  3. 创建数据目录

    bash
    mkdir -p /data/minio
  4. 配置 MinIO

    • 编辑 /etc/default/minio 文件:
    bash
    MINIO_ROOT_USER=admin
    MINIO_ROOT_PASSWORD=password@123
    MINIO_VOLUMES="/data/minio"
    MINIO_OPTS="--console-address :9001"
  5. 启动 MinIO 服务

    bash
    systemctl start minio
    systemctl enable minio
  6. 访问 MinIO 控制台

    • 浏览器访问:http://<server-ip>:9001

2. 分布式集群部署

2.1 二进制文件部署分布式集群

适用场景:生产环境中部署高可用的 MinIO 分布式集群

部署规划

  • 4 个节点,每个节点 4 块磁盘
  • 节点 IP:192.168.1.101-192.168.1.104
  • 数据目录:/data/disk1, /data/disk2, /data/disk3, /data/disk4

部署步骤

  1. 在所有节点上下载 MinIO 二进制文件

    bash
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x minio
    cp minio /usr/local/bin/
  2. 在所有节点上创建数据目录

    bash
    for i in {1..4}; do mkdir -p /data/disk$i; done
  3. 在所有节点上设置环境变量

    bash
    cat >> /etc/profile << EOF
    export MINIO_ROOT_USER=admin
    export MINIO_ROOT_PASSWORD=password@123
    EOF
    source /etc/profile
  4. 在所有节点上创建 systemd 服务文件

    ini
    [Unit]
    Description=MinIO Server
    Documentation=https://docs.min.io
    After=network.target
    
    [Service]
    User=root
    Group=root
    Environment="MINIO_ROOT_USER=admin"
    Environment="MINIO_ROOT_PASSWORD=password@123"
    ExecStart=/usr/local/bin/minio server http://192.168.1.10{1...4}/data/disk{1...4} --console-address :9001
    Restart=always
    RestartSec=3
    
    [Install]
    WantedBy=multi-user.target
  5. 在所有节点上启动 MinIO 服务

    bash
    systemctl daemon-reload
    systemctl start minio
    systemctl enable minio
  6. 访问 MinIO 控制台

    • 浏览器访问:http://<any-node-ip>:9001
    • 登录后可在控制台查看集群状态

2.2 离线部署分布式集群

适用场景:在没有网络连接的环境中部署 MinIO 分布式集群

部署步骤

  1. 在有网络的机器上下载 MinIO 二进制文件和依赖

    bash
    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    wget https://dl.min.io/client/mc/release/linux-amd64/mc
  2. 将下载的文件传输到所有节点

    bash
    scp minio mc root@192.168.1.101:/root/
    scp minio mc root@192.168.1.102:/root/
    scp minio mc root@192.168.1.103:/root/
    scp minio mc root@192.168.1.104:/root/
  3. 在所有节点上执行部署步骤

    • 参考 2.1 节的部署步骤,完成集群部署

3. Docker 部署

3.1 单机 Docker 部署

适用场景:快速部署单机 MinIO 服务,适合开发和测试

部署步骤

  1. 拉取 MinIO Docker 镜像

    bash
    docker pull minio/minio
  2. 创建数据目录

    bash
    mkdir -p /data/minio
  3. 启动 MinIO 容器

    bash
    docker run -d \
      -p 9000:9000 \
      -p 9001:9001 \
      --name minio \
      -v /data/minio:/data \
      -e "MINIO_ROOT_USER=admin" \
      -e "MINIO_ROOT_PASSWORD=password@123" \
      minio/minio server /data --console-address :9001
  4. 访问 MinIO 控制台

    • 浏览器访问:http://<server-ip>:9001

3.2 Docker Compose 部署

适用场景:使用 Docker Compose 部署单机或分布式 MinIO 服务

部署步骤

  1. 创建 docker-compose.yml 文件

    yaml
    version: '3.8'
    
    services:
      minio:
        image: minio/minio
        container_name: minio
        ports:
          - "9000:9000"
          - "9001:9001"
        volumes:
          - /data/minio:/data
        environment:
          - MINIO_ROOT_USER=admin
          - MINIO_ROOT_PASSWORD=password@123
        command: server /data --console-address :9001
        restart: always
  2. 启动 MinIO 服务

    bash
    docker-compose up -d
  3. 访问 MinIO 控制台

    • 浏览器访问:http://<server-ip>:9001

3.3 Docker Compose 分布式集群部署

部署步骤

  1. 创建 docker-compose.yml 文件

    yaml
    version: '3.8'
    
    services:
      minio1:
        image: minio/minio
        container_name: minio1
        ports:
          - "9001:9001"
        volumes:
          - /data/minio1-1:/data1
          - /data/minio1-2:/data2
        environment:
          - MINIO_ROOT_USER=admin
          - MINIO_ROOT_PASSWORD=password@123
        command: server http://minio{1...4}/data{1...2} --console-address :9001
        restart: always
        networks:
          - minio-net
    
      minio2:
        image: minio/minio
        container_name: minio2
        ports:
          - "9002:9001"
        volumes:
          - /data/minio2-1:/data1
          - /data/minio2-2:/data2
        environment:
          - MINIO_ROOT_USER=admin
          - MINIO_ROOT_PASSWORD=password@123
        command: server http://minio{1...4}/data{1...2} --console-address :9001
        restart: always
        networks:
          - minio-net
    
      minio3:
        image: minio/minio
        container_name: minio3
        ports:
          - "9003:9001"
        volumes:
          - /data/minio3-1:/data1
          - /data/minio3-2:/data2
        environment:
          - MINIO_ROOT_USER=admin
          - MINIO_ROOT_PASSWORD=password@123
        command: server http://minio{1...4}/data{1...2} --console-address :9001
        restart: always
        networks:
          - minio-net
    
      minio4:
        image: minio/minio
        container_name: minio4
        ports:
          - "9004:9001"
        volumes:
          - /data/minio4-1:/data1
          - /data/minio4-2:/data2
        environment:
          - MINIO_ROOT_USER=admin
          - MINIO_ROOT_PASSWORD=password@123
        command: server http://minio{1...4}/data{1...2} --console-address :9001
        restart: always
        networks:
          - minio-net
    
    networks:
      minio-net:
        driver: bridge
  2. 创建数据目录

    bash
    for i in {1..4}; do
      for j in {1..2}; do
        mkdir -p /data/minio$i-$j
      done
    done
  3. 启动 MinIO 集群

    bash
    docker-compose up -d
  4. 访问 MinIO 控制台

    • 浏览器访问:http://<server-ip>:9001

4. 部署验证

4.1 检查服务状态

  • 二进制部署

    bash
    systemctl status minio
  • Docker 部署

    bash
    docker ps
    docker logs minio

4.2 测试 S3 API 访问

  1. 安装 mc 客户端

    bash
    wget https://dl.min.io/client/mc/release/linux-amd64/mc
    chmod +x mc
  2. 配置 mc 客户端

    bash
    ./mc alias set myminio http://localhost:9000 admin password@123
  3. 测试基本操作

    bash
    # 创建 bucket
    ./mc mb myminio/test-bucket
    
    # 上传文件
    echo "test data" > test.txt
    ./mc cp test.txt myminio/test-bucket/
    
    # 下载文件
    ./mc cp myminio/test-bucket/test.txt test-download.txt
    
    # 列出 bucket 中的文件
    ./mc ls myminio/test-bucket

4.3 检查集群状态(分布式部署)

  1. 通过 mc 客户端查看集群状态

    bash
    ./mc admin info myminio
  2. 通过控制台查看集群状态

    • 登录 MinIO 控制台
    • 导航到 "Dashboard" 页面
    • 查看集群状态和节点信息

5. 最佳实践

5.1 数据目录规划

  • 使用独立磁盘:建议将 MinIO 数据目录挂载在独立的磁盘或分区上
  • 磁盘格式:推荐使用 XFS 或 EXT4 文件系统
  • 目录结构:为每个 MinIO 实例创建独立的数据目录

5.2 安全配置

  • 强密码:设置强密码,避免使用默认密码
  • TLS 加密:生产环境建议启用 TLS 加密
  • 防火墙规则:限制访问 MinIO 服务的 IP 地址
  • 定期更新:定期更新 MinIO 版本,获取最新的安全补丁

5.3 性能优化

  • 磁盘选择:使用 SSD 磁盘可以获得更好的性能
  • 网络配置:使用千兆或万兆网络,确保节点间通信顺畅
  • Erasure Coding 设置:根据数据重要性调整 Erasure Coding 模式
  • 缓存配置:合理配置 MinIO 缓存,提高读取性能

5.4 监控和告警

  • Prometheus 监控:配置 Prometheus 监控 MinIO 指标
  • Grafana 仪表板:使用官方 Grafana 仪表板可视化监控数据
  • 告警配置:设置告警规则,及时发现和处理问题

6. 常见问题排查

6.1 服务无法启动

  • 检查端口是否被占用:

    bash
    netstat -tuln | grep 9000
    netstat -tuln | grep 9001
  • 检查数据目录权限:

    bash
    ls -ld /data/minio
  • 查看服务日志:

    bash
    journalctl -u minio
    docker logs minio

6.2 控制台无法访问

  • 检查防火墙规则:

    bash
    iptables -L -n
    firewall-cmd --list-ports
  • 检查 MinIO 服务是否正常运行:

    bash
    systemctl status minio
    docker ps

6.3 集群节点无法通信

  • 检查节点间网络连接:

    bash
    ping <other-node-ip>
  • 检查节点间端口是否开放:

    bash
    telnet <other-node-ip> 9000
  • 查看集群状态:

    bash
    ./mc admin info myminio

总结

MinIO 提供了多种部署方式,包括二进制部署、YUM 部署、Docker 部署等,可以根据不同的场景选择合适的部署方式。在生产环境中,建议部署分布式集群,以获得更好的性能和高可用性。部署完成后,需要进行验证和监控,确保 MinIO 服务正常运行。通过合理的规划和配置,可以充分发挥 MinIO 的高性能和可靠性,为应用提供稳定的对象存储服务。