Docker Compose创建minio集群

Docker Compose创建minio集群

July 18, 2018

Minio是一个简单易用的轻量级对象存储服务,同时它也支持集群环境。使用Minio的docker镜像可以快速地搭建集群环境。

下面是docker-compose.yml文件的示例。分布式的Minio服务至少需要4个节点,所以在docker-compose.yml文件中,至少要配置4个服务。每个服务的command配置必须一样,保证集群环境正常运行。

version: '3'
services:
  minio-node1:
    image: minio/minio 
    hostname: minio-node1 
    ports:
      - "29001:9000"
    volumes:
      - ./node1/data:/data
    env_file: ./key.env
    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data 
  minio-node2:
    image: minio/minio
    hostname: minio-node2
    ports:
      - "29002:9000"
    volumes:
      - ./node2/data:/data
    env_file: ./key.env
    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data
  minio-node3:
    image: minio/minio
    hostname: minio-node3
    ports:
      - "29003:9000"
    volumes:
      - ./node3/data:/data
    env_file: ./key.env
    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data
  minio-node4:
    image: minio/minio
    hostname: minio-node4
    ports:
      - "29004:9000"
    volumes:
      - ./node4/data:/data
    env_file: ./key.env
    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data

上面的配置中env_file指定的加载环境变量文件key.env,这里是为了设置登录minio的用户名密码。下面的key.env示例:

MINIO_ACCESS_KEY=testkey
MINIO_SECRET_KEY=testpassword

通过上述的docker-compose.yml文件,就可以启动一个minio的集群环境。可以做一些测试,通过浏览器访问 http://localhost:29001 ,新建bucket并上传一个文件,然后在 http://localhost:29002 上面也可以正常访问。同时,可以特地停掉或者启用其中一些服务,用来测试minio集群环境的高可用性。

如果其中某一个节点服务不可用,这就意味着无法向该节点发起请求来操作对象。比如上述的节点1挂掉, 就无法通过浏览器来访问 http://localhost:29001。 从高可用和负载均衡角度来讲,必须通过负载均衡器来转发请求到各个节点,而不是直接访问某个节点的服务。可以在nginx上做个简单的配置来实现。

下面是nginx配置的示例。配置完重启nginx服务后,就可以使用 http://localhost:29000 来访问和操作对象

upstream minio_servers {
    server 127.0.0.1:29001;
    server 127.0.0.1:29002;
    server 127.0.0.1:29003;
    server 127.0.0.1:29004;
}

server {
    listen 29000;
    server_name localhost;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://minio_servers;
    }
}
最后更新于