使用docker搭建minio集群搭建

工作中需要搭建单独的图像服务器,经过在fastDFS和Minio之间选型,最终选择了Minio,因为是Apache的开源项目,而且实现了Amazon S3协议。以下是搭建的过程,以及可能碰到的坑,做一个备忘:

第一步,当然是要在虚拟机上安装好docker以及docker-compose。

1、安装docker比较简单,网络上资料太多,但在Yunos7上面还是会碰到selinux的坑——报错“Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disabl...nabled=false)”,应该是这个Yunos镜像的linux的内核中的SELinux不支持 overlay2 graph driver 。解决方法有两个:

1)要么启动一个新内核。已经用yum install -y kernel 实践,发现坑很大。升级内核后服务器完全起不来,报“kernel panic - not syncing”错误,所以放弃。

2)要么就在docker配置文件里面里禁用selinux,--selinux-enabled=false。打开/etc/sysconfig/docker 把--selinux-enabled参数设置为false,重新systemctl start docker启动docker服务即可

3)设置国内镜像。不同linux略有差异。我的是centos,只要在/etc/docker/daemon.json中加入"registry-mirrors":"https://registry.docker-cn.com"]”即可。然后“systemctl restart docker”。

2、安装docker compose相对折腾点,网络上有两种方法,一种是直接curl 下载,一种是用pip安装,后一种方法时间长,但比较顺畅。

1)先从github下载最新版的docker-compose文件 

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2)如果github太慢,可以从 daocloud下载

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

3)添加可执行权限

sudo chmod +x /usr/local/bin/docker-compose

第二步,可以先起一个单节点的minio试试,具体指令如下:

docker run --rm --name myminio -p 9000:9000 -v /home/minio/data:/data -v /home/minio/config:/root/.minio minio/minio server /data

如果打开浏览器,输入"http://你虚拟机的ip:9000"可以看到minio的登陆界面,说明已经成功。

第三步,准备minio集群的yml文件,共分4个容器,8个目录。

version: '3.7'

# starts 4 docker containers running minio server instances. Each
# minio server's web interface will be accessible on the host at port
# 9001 through 9004.
services:
  minio1:
    image: minio/minio
    volumes:
      - data1-1:/data1
      - data1-2:/data2
    ports:
      - "9001:9000"
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio2:
    image: minio/minio
    volumes:
      - data2-1:/data1
      - data2-2:/data2
    ports:
      - "9002:9000"
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio3:
    image: minio/minio
    volumes:
      - data3-1:/data1
      - data3-2:/data2
    ports:
      - "9003:9000"
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio4:
    image: minio/minio
    volumes:
      - data4-1:/data1
      - data4-2:/data2
    ports:
      - "9004:9000"
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    command: server http://minio{1...4}/data{1...2}
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
  data1-1:
  data1-2:
  data2-1:
  data2-2:
  data3-1:
  data3-2:
  data4-1:
  data4-2:

第四步,执行docker-compose命令,启动minio集群

docker-compose pull
docker-compose up

如果没有报错,并且显示了4台docker容器同时起来,说明minio集群已经成功运行。

这个时候可以在浏览器中输入“http://你虚拟机的ip:9001”,看是否可以进入登录界面。如果无法访问,说明网络配置存在问题,docker容器和虚拟机之间无法双向通信,需要寻找解决办法。

总结

minio集群部署不难,而且部署完成后,4台服务器均能自动同步。只要你的服务器保持4/2=2个以上,就可以正常读写,不用担心文件丢失,如果只剩下2个服务器正常,则只能下载,无法上传。如果只剩下1台服务器运转,那就只能重新部署了。

你可能感兴趣的:(Java)