Docker创建Minio集群

220 阅读2分钟

单机器伪集群

docker-compose.yml文件如下

version: "3"

x-minio-common: &minio-common
  image: minio/minio 
  # 9001控制台端口
  command: server --console-address ":9001" http://minio{1...4}/data
  # api端口
  expose:
    - "9000"
  environment: 
    MINIO_ROOT_USER: minio
    MINIO_ROOT_PASSWORD: "你的密码"
  #healthcheck: 
    #test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
    # 两次健康检查的间隔,默认为 30 秒
    #interval: 30s
    # 健康检查命令运行超时时间,如果超过这个时间,本次健康检查就被视为失败,默认 30 秒
    #timeout: 10s
    # 当连续失败指定次数后,则将容器状态视为 unhealthy,默认 3 次
    #retries: 3

services: 
  minio1:
     <<: *minio-common
     container_name: minio1
     hostname: minio1
     ports:
        - "9001:9001"
     volumes:
        - ./data1:/data
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
  minio2:
     <<: *minio-common
     container_name: minio2
     hostname: minio2
     ports:
        - "9002:9001"
     volumes:
        - ./data2:/data
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
  minio3:
     <<: *minio-common
     container_name: minio3
     hostname: minio3
     ports:
        - "9003:9001"
     volumes:
        - ./data3:/data
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
  minio4:
     <<: *minio-common
     container_name: minio4
     hostname: minio4
     ports:
        - "9004:9001"
     volumes:
        - ./data4:/data
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
  nginx: 
     image: nginx:1.24.0-alpine
     hostname: nginx
     container_name: nginx
     volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
     ports:
      - "9000:9000"
     depends_on: 
        - minio1
        - minio2
        - minio3
        - minio4

Nginx配置文件

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;

    # include /etc/nginx/conf.d/*.conf;

    upstream minio {
        server minio1:9000;
        server minio2:9000;
        server minio3:9000;
        server minio4:9000;
    }

    server {
        listen       9000;
        listen  [::]:9000;
        server_name  localhost;

        # To allow special characters in headers
        ignore_invalid_headers off;
        # Allow any size file to be uploaded.
        # Set to a value such as 1000m; to restrict file size to a specific value
        client_max_body_size 0;
        # To disable buffering
        proxy_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_connect_timeout 300;
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;

            proxy_pass http://minio;
        }
    }
}

访问测试

访问控制台:http://IP地址:9000

单机版

docker-compose.yml文件如下

version: "3"
services:
  minio:
    image: minio/minio
    container_name: minio
    command: server --console-address ":9001" http://minio/data{1...4}
    volumes:
        - ./data1:/data1
        - ./data2:/data2
        - ./data3:/data3
        - ./data4:/data4
        - /etc/timezone:/etc/timezone
        - /etc/localtime:/etc/localtime
    ports:
        - "9000:9000"
        - "9001:9001"
    restart: always
    environment:
        MINIO_ROOT_USER: minio
        MINIO_ROOT_PASSWORD: "你的密码"
    #healthcheck: 
    #    test: [ "CMD","curl","-f","http://localhost:9000/minio/health/live"  ]
    #    interval: 30s
    #    timeout: 20s
    #    retries: 3

访问测试

访问控制台:http://IP地址:9001

集群版

docker-compose.yml文件如下

version: "3"
services:
  minio-node:
    image: minio/minio:latest
    container_name: minio-node
    network_mode: host
    restart: always
    privileged: true
    hostname: minio-node
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: "你的密码"
      MINIO_UPDATE: off
    volumes:
      - /minio/data1:/data1
      - /minio/data2:/data2
      - /minio/data3:/data3
      - /minio/data4:/data4
      - /home/minioServer/log:/home/minio/.minio.sys/log
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    command: server http://172.19.2.3{6...9}/data{1...4} --console-address "0.0.0.0:9001" --address "0.0.0.0:9000"
    #healthcheck:
    #  test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"]
    #  interval: 30s
    #  timeout: 10s
    #  retries: 3

在各minio节点服务器上依次重复以上动作