看了很多使用容器部署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安裝完畢
二 安裝docker
更新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安裝完畢
三 使用docker部署minio叢集
本叢集部署在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叢集
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 <https://www.gnu.org/licenses/agpl-3.0.html>
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叢集背景管理系統
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkVmYkRWOmJWN1YDN3IjN4UjYxQjMmVjZ0UWOllzY0U2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)