Administrator
Administrator
发布于 2025-07-16 / 3 阅读

minio 集群

Docker 容器编排方式

下面是配置,创建了4个容器,每个容器就是一个minio服务,每个容器一个drive(也可以设置多个,一个drive建议就是一个硬盘分区,会更合理),minio需要4个节点构成一个池。注意,最新版无法通过控制台创建assertKey等鉴权,需要使用命令(具体见官网),建议使用minio/minio:RELEASE.2025-04-22T22-12-26Z 这个镜像:

version: '3.8'

services:
  minio1:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z # 使用最新版,或指定稳定版本如 RELEASE.2024-07-09T19-52-02Z
    hostname: minio1 # 容器主机名很重要,用于节点间通信
    container_name: minio1
    volumes:
      - /opt/minio-cluster/data/node1/drive1:/data/drive1 # 挂载宿主机目录到容器内驱动器路径
    ports:
      - "9001:9000" # API端口 (S3) 映射到宿主机不同端口
      - "9091:9090" # 控制台端口映射到宿主机不同端口
    environment:
      MINIO_ROOT_USER: minioadmin # *所有节点必须使用相同的ROOT凭据!*
      MINIO_ROOT_PASSWORD: minioadmin # *所有节点必须使用相同的ROOT凭据!*
    command: server --console-address ":9090" http://minio{1...4}:9000/data/drive{1...1} # 关键!指定集群所有节点和驱动器路径/data-{1...4}/minio
    networks:
      - minio-cluster-net

  minio2:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    hostname: minio2
    container_name: minio2
    volumes:
      - /opt/minio-cluster/data/node2/drive1:/data/drive1
    ports:
      - "9002:9000"
      - "9092:9090"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    command: server --console-address ":9090" http://minio{1...4}:9000/data/drive{1...1}
    networks:
      - minio-cluster-net

  minio3:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    hostname: minio3
    container_name: minio3
    volumes:
      - /opt/minio-cluster/data/node3/drive1:/data/drive1
    ports:
      - "9003:9000"
      - "9093:9090"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    command: server --console-address ":9090" http://minio{1...4}:9000/data/drive{1...1}
    networks:
      - minio-cluster-net

  minio4:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    hostname: minio4
    container_name: minio4
    volumes:
      - /opt/minio-cluster/data/node4/drive1:/data/drive1
    ports:
      - "9004:9000"
      - "9094:9090"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    command: server --console-address ":9090" http://minio{1...4}:9000/data/drive{1...1}
    networks:
      - minio-cluster-net

networks:
  minio-cluster-net:
    name: minio-cluster-network  # 使用共享网络名称
    driver: bridge               # 标记为外部网络
  • --console-address ":9090" 这一句的目的是告诉minio,控制台请使用9090这个端口,否则控制台的端口会是随机的, 这样就不好做外网端口映射(如果不是docker就无所谓了)

  • /opt/minio-cluster/data/node1/drive1 /opt/minio-cluster/data/node2/drive1 /opt/minio-cluster/data/node3/drive1 /opt/minio-cluster/data/node4/drive1,这个几个路径,建议除了node1这个文件夹其他都是一样,方便管理。

  • 目前未解决的问题:无法连接两个池,组成minio集群