天天看點

Centos雲主機下使用docker、docker-compose部署MiniO叢集

看了很多使用容器部署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叢集背景管理系統

Centos雲主機下使用docker、docker-compose部署MiniO叢集

繼續閱讀