目 录

1 方案规划 1

2 网络设计 2

2.1 设计思路 2​

2.2 拓扑设计 2​

2.3 网络设置 3​

3 CentOS安装 4

3.1 初始安装 4​

3.2 内核升级 6​

3.3 关闭防火墙 7​

3.4 时钟同步 7​

3.5 基础软件 8​

4 Docker安装 8

4.1 安装Docker 8​

4.2 容器镜像加速 9​

4.3 使能IP转发功能 9​

4.4 安装docker-compose 10​

5 MinIO部署安装 10

5.1 下载配置文件 10​

5.2 修改配置文件(可选) 10​

5.3 创建和启用MinIO容器集群 11​

5.4 访问MinIO容器集群的控制台 12​

5.5 常用命令 13​


分布式存储
(Docker-Compose+MinIO集群)

元工:2022.5.30

背景:最近大家对容器技术的讨论越来越多,兴趣也越来越浓,容器的应用场景也非常之多,其中在分布式系统应用领域更突显它的优势和魅力,本文是工作之余所做相关实验的整理,供大家一起学习和分享。

目标:在仅有的一台工作电脑上搭建全能型虚拟化容器平台,并在其上运行目前主流的分布式存储系统(如:Ceph、Minio、GlusterFS等)作为应用场景进行全方位体验和研究。

亮点:编者最后按本文所述从头至尾重新做了一遍,犹如闲庭信步,一次性成功,确保本文内容百分百的正确性和百分百的完整性。

价值:减少学习的硬件成本、减少学习目标前面的障碍、化天堑为通途;不仅是学习容器技术的入门宝典,也为学习分布式存储系统的同学提供了实验环境准备的好方法。

使用要求:对Linux、VMware workstaion有一定的熟悉,祝您使用愉快!

方案规划​

需求:满足分布式存储系统多节点的要求(3个以上),以及每人仅一台电脑的限制。

可行性:Minio、Ceph等开源分布式存储系统都支持容器化部署,因此具有可行性。

总体方案 CentOS + Docker + Docker-Composekubernetes + Ceph/Minio/...

组件

版本

说明

宿主机操作系统

CentOS 7.9(内核升级至最新稳定版本)

Docker要求Linux内核版本高于3.10,镜像下载网页:CentOS Linux release 7.9.2009 (Core)华为镜像​,选择CentOS的7(x86_64,Minimal,2009)镜像下载链接,该镜像内核版本是3.10.0,下面3.3章节介绍了将内核升级至最新长期稳定版本方法

容器引擎

Docker(CE社区版)

目前最新版为v20.10.16

容器集群编排工具(单节点部署简单易用,推荐使用

Docker-Compose v2.5.1

目前最新版为v2.5.1

容器集群编排工具(多节点部署,适合深入学习),将在下期介绍

Kubernetes v1.23.6

Minio官方要求Kubernetes 1.19 or Later,虽V1.24.0刚于2022.5.6发布,但它不再内置Dockershim,需另外下载、编译、安装cri-dockerd,而且XX.0版本都不成熟,因此我们选择最新的稳定版本v1.23.6

分布式系统

MinIO社区版

最新版本

主机运行环境

编者的环境如下:(供参考)

  • 华为MateBook 14(i5-1135G7 @ 2.40GHz 2.42 GHz,16.0 GB)
  • Windows 10, 64-bit(Build 19044.1706) 10.0.19044
  • VMware® Workstation 15 Pro15.5.7 build-17171714

网络设计​

设计思路​

应用需求:将MinIO容器节点的管理控制台端口及API端口暴露至办公物理网络上。

设计思路:借助Docker的bridge网络和VMware的VMNet8网络,通过两级NAT地址映射,将容器的端口9000/9001逐级暴露出来,如下图所示:

1.分布式存储 (Docker-Compose+MinIO集群)_docker



拓扑设计​

设计目标:通过http://192.168.66.11:9001和http://10.0.4.11:9001两个URL,都能访问到MinIO容器集群的控制台界面。

1)通过ifconfg /all查看自己主机的网络配置 (下面是编者的环境,供参考):

1.分布式存储 (Docker-Compose+MinIO集群)_docker_02



2)考虑到后续多节点部署需要,虚拟机VM网络和容器网络的设计如下图所示:

1.分布式存储 (Docker-Compose+MinIO集群)_linux_03


1、虚拟机VM网络

1.分布式存储 (Docker-Compose+MinIO集群)_linux_04


2、容器网络

网络设置​

打开VMware Workstation软件主界面,选择菜单项:编辑 虚拟网络编辑器,然后依据前面的网络设计按下图方法完成相应的网络设置。

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_05


a)采用手动分配IP,需去掉DHCP勾选

1.分布式存储 (Docker-Compose+MinIO集群)_docker_06


b)NAT1设置:将虚拟机CS01的9000/9001端口暴露出来

CentOS安装​

初始安装​

  1. 首先创建虚拟机;然后设置光驱加载CentOS镜像,设置网络适配器为NAT模式(如下图所示),检查宿主机VMnet虚拟网卡的IP正确后,最后再启动虚拟机。

1.分布式存储 (Docker-Compose+MinIO集群)_docker_07


a)光驱加载CentOS镜像


1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_08


b)虚拟机网络选择:NAT模式,或是自定义虚拟网络中的Vmnet8

1.分布式存储 (Docker-Compose+MinIO集群)_linux_09


c)宿主机VMnet8虚拟网卡地址

  1. 进入安装向导界面,按照提示完成下面的设置(包括:语言、时区、磁盘分区、网络)

1.分布式存储 (Docker-Compose+MinIO集群)_docker_10


a):语言选择中文

1.分布式存储 (Docker-Compose+MinIO集群)_docker_11


b):磁盘分区点击1进入c),网络配置点击2进入d),完成以上两个配置后,再点击【开始安装】,直到完成

1.分布式存储 (Docker-Compose+MinIO集群)_MinIO_12


c):如果采用默认配置,直接点击完成即可

1.分布式存储 (Docker-Compose+MinIO集群)_docker_13


d):点击右下角【配置】按钮进入e)或f),结果如上

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_14


e):进入IPv4设置,选择手动方法(即静态IP)

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_15


f):进入IPv6设置,如果不启用,则选择忽略


  1. 验证安装是否成功

// 检查网络连通

# ping 114.114.114.114

// 检查DNS解析

# ping sohu.com

内核升级​

请按以下步骤依次不漏的执行,如下:

1)配置主机名

# hostnamectl set-hostname cs01 && bash

2)导入elrepo gpg key

// 访问​http://elrepo.org/tiki/HomePage​,获得最新的配置信息

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

3)安装elrepo YUM源仓库

# yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

4)安装kernet-ml版本,ml为长期稳定版本,lt为长期维护版本

yum --enablerepo=elrepo-kernel -y install kernel-ml.x86_64

5)设置grub2默认引导0

# grub2-set-default 0

6)重新生成grub2引导文件

# grub2-mkconfig -o /boot/grub2/grub.cfg

7)更新后,需要重启使内核生效

#reboot

8)验证内核版本

# uname -r

5.18.0-1.el7.elrepo.x86_64

9)查看本机所有的内核

# rpm -qa | grep kernel

kernel-tools-libs-3.10.0-1160.el7.x86_64

kernel-3.10.0-1160.el7.x86_64

kernel-tools-3.10.0-1160.el7.x86_64

kernel-ml-5.18.0-1.el7.elrepo.x86_64

10)删除旧内核

# yum remove kernel-3.10.0-1160.el7.x86_64

11)重启系统,查看删除结果

# reboot

// 如下:Linux启动界面仅保留了最新的内核,说明删除成功

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_16


关闭防火墙​

请按以下步骤依次不漏的执行,如下:

1)关闭防火墙

# systemctl stop firewalld && systemctl disable firewalld

2)关闭 iptables 防火墙

2.1) 安装

# yum install iptables-services -y

2.2) 禁用

# service iptables stop && systemctl disable iptables

2.3) 清空防火墙规则

# iptables -F

3)关闭 selinux

# setenforce 0

# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

// 以上selinux 配置修改后,需重启机器才能生效

# reboot

// 检查是否已生效,如果以下命令输出Disabled,则表示selinux 关闭成功

# getenforce

Disabled

时钟同步​

配置时钟同步,满足MinIO多节点部署的时钟同步的要求,步骤如下:

1)安装ntp服务

# yum install -y ntp ntpdate

2)执行一次时间同步,检查功能是否正常

# ntpdate cn.pool.ntp.org

3)创建计划任务

# crontab -e

// 输入下面内容

* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org

// 重启crond服务使配置生效

# systemctl restart crond

基础软件​

安装基础的软件包集,如下:

# yum install -y yum-utils wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack

Docker安装​

安装Docker​

1)安装Docker源

# yum install -y wget

# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

2)安装Docker依赖包

# yum install -y yum-utils device-mapper-persistent-data lvm2

3)安装 docker-ce

# yum install docker-ce -y

4)设置自启和启动

# systemctl enable docker && systemctl start docker

5)查看版本

# docker version

6)查看运行状态

# systemctl status docker

// 如果看到running,表示docker正常运行

容器镜像加速​

如果有阿里云账号,访问容器镜像服务网面,可获得所分配的容器镜像加速地址,比如我的是“https://6wu5f3fc.mirror.aliyuncs.com”。否则也可使用我的,也可不用,下面我还提供了几个公共的容器镜像加速地址。加速配置方法如下:

1)创建或修改/etc/docker/daemon.json,内容如下:

{

"registry-mirrors": ["https://6wu5f3fc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]

}

2)让配置文件生效

// 重新加载

# systemctl daemon-reload

// 重启容器引擎

# systemctl restart docker

使能IP转发功能​

根据2.2章节的网络设计需要构建NAT2服务,则必须开启IP转发功能,方法如下:

1)加载br_netfilter模块(将桥接流量转发至

# modprobe br_netfilter

2)修改内核参数

# cat > /etc/sysctl.d/docker.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

3)使配置参数生效

# sysctl -p /etc/sysctl.d/docker.conf

4)配置参数永久生效

以上配置重启后会失效,下面通过开机自动加载脚本的方式永久生效:

4.1)新建文件/etc/rc.sysinit :

# vim /etc/rc.sysinit

// 内容如下:

#!/bin/bash

for file in /etc/sysconfig/modules/*.modules ; do

[ -x $file ] && $file

done

4.2)新建文件/etc/sysconfig/modules/br_netfilter.modules

# vim /etc/sysconfig/modules/br_netfilter.modules

//内容如下:

modprobe br_netfilter

4.3)增加权限

# chmod 755 /etc/sysconfig/modules/br_netfilter.modules

4.4)检查重启机器后,模块是否自动加载了

# reboot

# lsmod |grep br_netfilter

br_netfilter 28672 0

// 如果输出以上类似结果,则表示自动加载成功。

安装docker-compose​

1)查看和选择版本

查看官方网页:​https://github.com/docker/compose/releases​,选择版本,如:docker-compose-linux-x86_64,复制下载地址后执行下面步骤。

2)下载和安装

# wget https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose

# chmod +x /usr/local/bin/docker-compose

3)验证结果

# docker-compose version

Docker Compose version v2.5.1

MinIO部署安装​

参考官网:​https://docs.min.io/docs/deploy-minio-on-docker-compose.html​

下载配置文件

docker-compose.yaml”,“nginx.conf

修改配置文件(可选)

为了方便查看对象存储空间的变化情况,可以将minio容器节点的volume宿主机挂载目录改成当前用户的本地目录,步骤如下:

1)在本地用户目录下创建本项目的data子目录

# mkdir -p ~/MinIO/{data1-1,data1-2,data2-1,data2-2,data3-1,data3-2,data4-1,data4-2}

2)修改“docker-compose.yaml”volumes的配置项,即将“:”左边的部分修改为以上本地用户目录,以minio1为例,其它类似不再赘述。

services:

minio1:

<<: *minio-common

hostname: minio1

volumes:

- ~/MinIO/data1-1:/data1

- ~/MinIO/data1-2:/data2

3)如果是在客户端下载和修改以上配置文件,需通过SCP工具将其上传至宿主机的目录中,比如:“~/MinIO/”

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_17


创建和启用MinIO容器集群

进入在配置文件所在目录下(如:~/MinIO/),然后依次执行下面命令:

1)拉取MinIO服务镜像

# docker-compose pull

2)创建和启用MinIO容器集群

# docker-compose up

1.分布式存储 (Docker-Compose+MinIO集群)_linux_18


如果出现以上输出结果,则表示已安装、创建、启动成功。Ctrl+C,可以终止运行,效果与docker-compose stop 相同。

访问MinIO容器集群的控制台

从配置文件“nginx.conf”可知,集群中的4个Minio容器节点是通过Nginx容器节点轮询方式代理,并采用了IP哈希算法来保证同一个会话访问同一个MinIO容器服务节点。因此,我们只需要访问Nginix暴露出来的端口即可。

1.分布式存储 (Docker-Compose+MinIO集群)_MinIO_19


a)位于nginx.conf配置文件

1.分布式存储 (Docker-Compose+MinIO集群)_docker_20


b)位于docker-compose.yaml配置文件

分别采用以下两种访问方式验证(默认用户/密码: minioadmin/minioadmin)

1)本机访问

在浏览器打开:​http://192.168.66.11:9001/​

2)办公局域方式(即在同一网络的其它电脑上也能访问)

在浏览器打开:​http://10.0.4.11:9001/ ​

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_21


1.分布式存储 (Docker-Compose+MinIO集群)_linux_22


常用命令

// 创建并启动容器集群

# docker-compose up

// 停止容器集群运行

# docker-compose stop

// 开启容器集群运行

# docker-compose start

// 重启集群运行

# docker-compose restart

// 停止集群运行,并卸载容器和网络

# docker-compose down

注意:以上命令需在配置文件所在目录上执行,否则需要指定具体目录。

// 查看命令

# docker-compose -h

// 查看容器网络

# brctl show

# docker network list

1.分布式存储 (Docker-Compose+MinIO集群)_配置文件_23