看了很多使用容器部署minio集群的博客,大都写的比较粗糙,关键的细节方面没有交代,导致踩了很多坑。本文档仅仅记录自己在云主机下,从0到1部署minio集群的流程
使用系统服务部署minio服务的方式比较简单,强烈建议直接参考官方文档
https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html#minio-mnmd
1. 创建用户qkup
groupadd -r qkup
useradd -m -r -g qkup qkup
2.设置pubkey登录、权限
执行visudo,新增下面内容,这里直接设置成sudo免密
qkup ALL=(ALL) NOPASSWD: ALL
vi /etc/ssh/sshd_config,修改sshd的PubkeyAuthentication为yes(如果是yes则直接去掉#即可),然后重启sshd服务
systemctl restart sshd.service
至此,root用户使用完毕,切换至qkup用户,下面所有操作在qkup用户下进行即可
切换qkup用户,生成密钥对
ssh-keygen -t rsa
在~/.ssh目录下新增authorized_keys文件,填入ssh-rsa的公钥,并确定文件的权限
chmod 644 authorized_keys
配置好~/.ssh/config,至此可以通过ssh 云主机name登录
3. 安装配置oh my zsh
安装zsh、git
yum -y install zsh
yum -y install git
切换默认shell为zsh
chsh -s /bin/zsh
安装oh my zsh,可以通过curl、wget两种方式
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
安装oh my zsh过程中,容易出现超时情况,可以采用下面方法:
mkdir plugins
cd plugins
git clone https://github.com/robbyrussell/oh-my-zsh
sh oh-my-zsh/tools/install.sh
至此oh my zsh安装完毕
更新yum包
update:升级所有包同时也升级软件和系统内核
yum -y update
upgrade:只升级所有包,不升级软件和系统内核
yum -y upgrade
卸载旧版本(如果之前安装过的话)
yum remove docker docker-common docker-selinux docker-engine
安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
设置一个yum源,下面两个都可用
中央仓库
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
阿里仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
选择一个版本并安装:yum install docker-ce-版本号
yum -y install docker-ce
启动并设置开机自启
systemctl start docker
systemctl enable docker
查看docker版本
docker --version
如果使用docker命令,比如出现:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
即权限不足连接/var/run/docker.sock,查看相关权限
drwx------ 5 root root 120 12月 10 14:49 docker
-rw-r--r-- 1 root root 5 12月 10 14:49 docker.pid
srw-rw---- 1 root docker 0 12月 10 14:49 docker.sock
可以看出,这个套接字所属组为docker,需要将qkup普通用户加入到docker这个组
【gpasswd】 是Linux下工作组文件/etc/group 和 /etc/gshadow 管理工具,用于将一个用户添加到组或者从组中删除,-a添加用户到组,-d从组删除用户
gpasswd -a qkup docker
更新docker组
newgrp docker
至此docker安装完毕
本集群部署在2台机器上,每台机器一个实例,每台机器挂载一个磁盘,每个minio实例配置4个data模拟4个磁盘,挂载目录为minio,在minio目录下创建目录data1、data2、data3、data4
vdc xfs 503bab69-ebef-450f-9c48-e2fb7f2ff507 /minio
内网DNS为:
minio-node-3.localdomain,对应IP为:172.18.2.8
minio-node-4.localdomain,对应IP为:172.18.2.5
在两台主机上分别拉取最新版本minio
docker pull minio/minio
在两台主机上分别执行
docker run -d --name minio -p 9000:9000 -p 9001:9001 --restart=always --net=host -e MINIO_ACCESS_KEY=minio -e MINIO_SECRET_KEY=minio123 -v /minio/data1:/data1 -v /minio/data2:/data2 -v /minio/data3:/data3 -v /minio/data4:/data4 minio/minio server http://minio-node-4.localdomain/data/{1...4} http://minio-node-3.localdomain/data/{1...4} --console-address ":9001"
执行完毕后查看容器状态,确定启动成功,使用任意IP+9001(需要开启端口),即可登录
docker-compose只能在单台主机部署多个分布式MinIO实例,分布式MinIO实例将部署在同一主机上的多个容器中,但是这样不满足分布式高可用原则;如果单机上采用Multi-Node Multi-Drive模式,多台主机组成一个minio集群也是种不错的方式。
本次部署采用3台主机,每台机器用docker-compose部署一个minio节点
1. docker-compose安装
docker-compose通常采用2种方式安装,第一种使用pip3方式安装,该方式依赖比较麻烦,建议采用binary方式安装,流程如下
(1)通过curl下载并输出到/usr/local/bin/docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
(2)给docker-compose文件添加可执行权限
chmod +x /usr/local/bin/docker-compose
(3)添加软连接到/usr/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(4)执行docker-compose --version查看版本信息,正常输出则代表安装成功
➜ ~ docker-compose --version
docker-compose version 1.29.2, build 5becea4c
➜ ~ docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
2. 部署minio集群
本文档不介绍docker-compose的使用,直奔主题,下面为本集群部署时使用的yaml文件,注意network_mode设置成host模式,否则容易出问题:
version: "3.7"
services:
minio3:
image: "quay.io/minio/minio:RELEASE.2022-08-02T23-59-16Z"
network_mode: host
volumes:
- "/minio/disk1:/data1"
- "/minio/disk2:/data2"
environment:
- MINIO_ROOT_USER=qk_admin
- MINIO_ROOT_PASSWORD=qk_admin123
command: server --console-address ":9001" http://minio-node-{1...3}.localdomain/data/{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
内网DNS为:
minio-node-1.localdomain,对应IP为:172.18.2.2
minio-node-2.localdomain,对应IP为:172.18.2.3
minio-node-3.localdomain,对应IP为:172.18.2.4
磁盘挂载情况:
➜ ~ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
vda
└─vda1 xfs 9cff3d69-3769-4ad9-8460-9c54050583f9 /
vdb swap YUNIFYSWAP f490fae5-73c7-47a0-88df-084f3ed627e0 [SWAP]
vdc xfs 22175874-7fee-4d66-b210-88eb90e7148d /minio
运行情况:
➜ ~ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------
qkup_minio3_1 /usr/bin/docker-entrypoint ... Up (healthy)
➜ ~ docker-compose top
qkup_minio3_1
UID PID PPID C STIME TTY TIME CMD
-------------------------------------------------------------------------------------------------------------------------------------------
root 23583 23563 0 11:49 ? 00:01:28 minio server --console-address :9001 http://minio-node-{1...3}.localdomain/data/{1...2}
minio1_1 | Waiting for all other servers to be online to format the disks (elapses 1m1s)
minio1_1 |
minio1_1 | Formatting 1st pool, 1 set(s), 6 drives per set.
minio1_1 | Waiting for all MinIO sub-systems to be initialized.. lock acquired
minio1_1 | Automatically configured API requests per node based on available memory on the system: 20
minio1_1 | All MinIO sub-systems initialized successfully in 677.671577ms
minio1_1 | Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
minio1_1 | MinIO Object Storage Server
minio1_1 | Copyright: 2015-2022 MinIO, Inc.
minio1_1 | License: GNU AGPLv3
minio1_1 | Version: RELEASE.2022-08-02T23-59-16Z (go1.18.5 linux/amd64)
minio1_1 |
minio1_1 | Status: 6 Online, 0 Offline.
minio1_1 | API: http://172.18.2.2:9000 http://172.17.0.1:9000 http://127.0.0.1:9000
minio1_1 | Console: http://172.18.2.2:9001 http://172.17.0.1:9001 http://127.0.0.1:9001
minio1_1 |
minio1_1 | Documentation: https://docs.min.io
使用任意节点IP:9001(9001端口需要开启下行规则),即可登录minio集群后台管理系统