Docker Compose创建minio集群

分享到:

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

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

 1version: '3'
 2services:
 3  minio-node1:
 4    image: minio/minio 
 5    hostname: minio-node1 
 6    ports:
 7      - "29001:9000"
 8    volumes:
 9      - ./node1/data:/data
10    env_file: ./key.env
11    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data 
12  minio-node2:
13    image: minio/minio
14    hostname: minio-node2
15    ports:
16      - "29002:9000"
17    volumes:
18      - ./node2/data:/data
19    env_file: ./key.env
20    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data
21  minio-node3:
22    image: minio/minio
23    hostname: minio-node3
24    ports:
25      - "29003:9000"
26    volumes:
27      - ./node3/data:/data
28    env_file: ./key.env
29    command: server http://minio-node1/data http://minio-node2/data http://minio-node3/data http://minio-node4/data
30  minio-node4:
31    image: minio/minio
32    hostname: minio-node4
33    ports:
34      - "29004:9000"
35    volumes:
36      - ./node4/data:/data
37    env_file: ./key.env
38    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示例:

1MINIO_ACCESS_KEY=testkey
2MINIO_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 来访问和操作对象

 1upstream minio_servers {
 2    server 127.0.0.1:29001;
 3    server 127.0.0.1:29002;
 4    server 127.0.0.1:29003;
 5    server 127.0.0.1:29004;
 6}
 7
 8server {
 9    listen 29000;
10    server_name localhost;
11
12    location / {
13        proxy_set_header Host $http_host;
14        proxy_pass http://minio_servers;
15    }
16}