天天看点

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

目 录​

​​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-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社区版​ 最新版本​
主机运行环境​ 编者的环境如下:(供参考)​
  • 华为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 Pro(15.5.7 build-17171714)​

网络设计​

设计思路​

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

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

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

拓扑设计​

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

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

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

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

1.分布式存储 (Docker-Compose+MinIO集群)
1、虚拟机VM网络​
1.分布式存储 (Docker-Compose+MinIO集群)
2、容器网络​

网络设置​

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

1.分布式存储 (Docker-Compose+MinIO集群)
a)采用手动分配IP,需去掉DHCP勾选​
1.分布式存储 (Docker-Compose+MinIO集群)
b)NAT1设置:将虚拟机CS01的9000/9001端口暴露出来​

CentOS安装​

初始安装​

  1. 首先创建虚拟机;然后设置光驱加载CentOS镜像,设置网络适配器为NAT模式(如下图所示),检查宿主机VMnet虚拟网卡的IP正确后,最后再启动虚拟机。
1.分布式存储 (Docker-Compose+MinIO集群)
a)光驱加载CentOS镜像​
1.分布式存储 (Docker-Compose+MinIO集群)
b)虚拟机网络选择:NAT模式,或是自定义虚拟网络中的Vmnet8​
1.分布式存储 (Docker-Compose+MinIO集群)
c)宿主机VMnet8虚拟网卡地址​
  1. 进入安装向导界面,按照提示完成下面的设置(包括:语言、时区、磁盘分区、网络)
1.分布式存储 (Docker-Compose+MinIO集群)
a):语言选择中文​
1.分布式存储 (Docker-Compose+MinIO集群)
b):磁盘分区点击1进入c),网络配置点击2进入d),完成以上两个配置后,再点击【开始安装】,直到完成​
1.分布式存储 (Docker-Compose+MinIO集群)
c):如果采用默认配置,直接点击完成即可​
1.分布式存储 (Docker-Compose+MinIO集群)
d):点击右下角【配置】按钮进入e)或f),结果如上​
1.分布式存储 (Docker-Compose+MinIO集群)
e):进入IPv4设置,选择手动方法(即静态IP)​
1.分布式存储 (Docker-Compose+MinIO集群)
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集群)

关闭防火墙​

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

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

创建和启用MinIO容器集群

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

1)拉取MinIO服务镜像​

# docker-compose pull​

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

# docker-compose up​

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

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

访问MinIO容器集群的控制台

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

1.分布式存储 (Docker-Compose+MinIO集群)
a)位于nginx.conf配置文件​
1.分布式存储 (Docker-Compose+MinIO集群)
b)位于docker-compose.yaml配置文件​

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

1)本机访问​

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

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

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

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

常用命令

// 创建并启动容器集群​

# docker-compose up​

// 停止容器集群运行​

# docker-compose stop​

// 开启容器集群运行​

# docker-compose start​

// 重启集群运行​

# docker-compose restart​

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

# docker-compose down​

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

// 查看命令​

# docker-compose -h​

// 查看容器网络​

# brctl show​