工作中需要搭建单独的图像服务器,经过在fastDFS和Minio之间选型,最终选择了Minio,因为是Apache的开源项目,而且实现了Amazon S3协议。以下是搭建的过程,以及可能碰到的坑,做一个备忘:
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
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的登陆界面,说明已经成功。
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 pull
docker-compose up
如果没有报错,并且显示了4台docker容器同时起来,说明minio集群已经成功运行。
这个时候可以在浏览器中输入“http://你虚拟机的ip:9001”,看是否可以进入登录界面。如果无法访问,说明网络配置存在问题,docker容器和虚拟机之间无法双向通信,需要寻找解决办法。
minio集群部署不难,而且部署完成后,4台服务器均能自动同步。只要你的服务器保持4/2=2个以上,就可以正常读写,不用担心文件丢失,如果只剩下2个服务器正常,则只能下载,无法上传。如果只剩下1台服务器运转,那就只能重新部署了。