天天看点

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集群

继续阅读