目 录
1 方案规划 1
2 网络设计 2
2.1 设计思路 2
2.2 拓扑设计 2
2.3 网络设置 3
3.1 初始安装 4
3.2 内核升级 6
3.4 时钟同步 7
3.5 基础软件 8
分布式存储
(Docker-Compose+MinIO集群)
元工:2022.5.30
背景:最近大家对容器技术的讨论越来越多,兴趣也越来越浓,容器的应用场景也非常之多,其中在分布式系统应用领域更突显它的优势和魅力,本文是工作之余所做相关实验的整理,供大家一起学习和分享。
目标:在仅有的一台工作电脑上搭建全能型虚拟化容器平台,并在其上运行目前主流的分布式存储系统(如:Ceph、Minio、GlusterFS等)作为应用场景进行全方位体验和研究。
亮点:编者最后按本文所述从头至尾重新做了一遍,犹如闲庭信步,一次性成功,确保本文内容百分百的正确性和百分百的完整性。
价值:减少学习的硬件成本、减少学习目标前面的障碍、化天堑为通途;不仅是学习容器技术的入门宝典,也为学习分布式存储系统的同学提供了实验环境准备的好方法。
使用要求:对Linux、VMware workstaion有一定的熟悉,祝您使用愉快!
方案规划
需求:满足分布式存储系统多节点的要求(3个以上),以及每人仅一台电脑的限制。
可行性:Minio、Ceph等开源分布式存储系统都支持容器化部署,因此具有可行性。
总体方案: CentOS + Docker + Docker-Compose或kubernetes + 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社区版 | 最新版本 |
主机运行环境 | 编者的环境如下:(供参考)
|
网络设计
设计思路
应用需求:将MinIO容器节点的管理控制台端口及API端口暴露至办公物理网络上。
设计思路:借助Docker的bridge网络和VMware的VMNet8网络,通过两级NAT地址映射,将容器的端口9000/9001逐级暴露出来,如下图所示:
拓扑设计
设计目标:通过http://192.168.66.11:9001和http://10.0.4.11:9001两个URL,都能访问到MinIO容器集群的控制台界面。
1)通过ifconfg /all查看自己主机的网络配置 (下面是编者的环境,供参考):
2)考虑到后续多节点部署需要,虚拟机VM网络和容器网络的设计如下图所示:
1、虚拟机VM网络 | 2、容器网络 |
网络设置
打开VMware Workstation软件主界面,选择菜单项:编辑 虚拟网络编辑器,然后依据前面的网络设计按下图方法完成相应的网络设置。
a)采用手动分配IP,需去掉DHCP勾选 | b)NAT1设置:将虚拟机CS01的9000/9001端口暴露出来 |
CentOS安装
初始安装
- 首先创建虚拟机;然后设置光驱加载CentOS镜像,设置网络适配器为NAT模式(如下图所示),检查宿主机VMnet虚拟网卡的IP正确后,最后再启动虚拟机。
a)光驱加载CentOS镜像 | |
b)虚拟机网络选择:NAT模式,或是自定义虚拟网络中的Vmnet8 | c)宿主机VMnet8虚拟网卡地址 |
- 进入安装向导界面,按照提示完成下面的设置(包括:语言、时区、磁盘分区、网络)
a):语言选择中文 | b):磁盘分区点击1进入c),网络配置点击2进入d),完成以上两个配置后,再点击【开始安装】,直到完成 |
c):如果采用默认配置,直接点击完成即可 | d):点击右下角【配置】按钮进入e)或f),结果如上 |
e):进入IPv4设置,选择手动方法(即静态IP) | f):进入IPv6设置,如果不启用,则选择忽略 |
- 验证安装是否成功
// 检查网络连通
# 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)关闭防火墙
# 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/”
创建和启用MinIO容器集群
进入在配置文件所在目录下(如:~/MinIO/),然后依次执行下面命令:
1)拉取MinIO服务镜像
# docker-compose pull
2)创建和启用MinIO容器集群
# docker-compose up
如果出现以上输出结果,则表示已安装、创建、启动成功。Ctrl+C,可以终止运行,效果与docker-compose stop 相同。
访问MinIO容器集群的控制台
从配置文件“nginx.conf”可知,集群中的4个Minio容器节点是通过Nginx容器节点轮询方式代理,并采用了IP哈希算法来保证同一个会话访问同一个MinIO容器服务节点。因此,我们只需要访问Nginix暴露出来的端口即可。
a)位于nginx.conf配置文件 | b)位于docker-compose.yaml配置文件 |
分别采用以下两种访问方式验证(默认用户/密码: minioadmin/minioadmin)
1)本机访问
在浏览器打开:http://192.168.66.11:9001/
2)办公局域方式(即在同一网络的其它电脑上也能访问)
在浏览器打开:http://10.0.4.11:9001/
常用命令
// 创建并启动容器集群
# docker-compose up
// 停止容器集群运行
# docker-compose stop
// 开启容器集群运行
# docker-compose start
// 重启集群运行
# docker-compose restart
// 停止集群运行,并卸载容器和网络
# docker-compose down
注意:以上命令需在配置文件所在目录上执行,否则需要指定具体目录。
// 查看命令
# docker-compose -h
// 查看容器网络
# brctl show
# docker network list