本文主要内容为:在一台Centos7.9虚拟机(模拟物理机)内通过两台docker容器构建glusterfs集群并实现在虚拟机上的挂载,由于虚拟机可以虚拟硬盘,方便操作,所以本文没有选择在物理机上搭建。
一、配置虚拟机硬盘和网络
首先要保证虚拟机能够和外网联通,如果想配置外网和内网,可以在虚拟机内添加两个虚拟网卡,一个为桥接模式,另一个为NAT模式。然后在虚拟机上虚拟两个20G的硬盘。下图为虚拟机配置:
第一块硬盘为操作系统硬盘,主要是网络和硬盘需要配置好,其他参数酌情配置。
二、安装docker
接下来是进入虚拟机内安装docker,docker容器的安装,本人是按照菜鸟docker教程中采用手动方式安装的,由于本文不是主要讲解docker的安装,所以详细的步骤可以参考:CentOS Docker 安装 | 菜鸟教程 (runoob.com)
安装完docker后启动docker,
systemctl start docker
三、容器启动和网络配置
可以去docker hub查找一下centos官方镜像然后拉取,我拉取的是官方centos7.9的镜像.
docker pull centos:centos7.9.2009
通过docker images命令可以查看到我来取的镜像。
接下来是配置容器网络,我采用的是桥接网络:
docker network create mynet --subnet 192.168.4.0/24 --gateway 192.168.4.1
通过docker network ls可以查看到我创建的网络mynet:
配置好网络后,就可以启动容器并绑定网络,分别启动两台docker容器server1和server2:
docker run -it -d --restart=always --network mynet --name server1 --privileged=true eeb6 /sbin/init
docker run -it -d --restart=always --network mynet --name server2 --privileged=true eeb6 /sbin/init
参数介绍:-it交互模式,-d后台守护进程,--restart随docker守护进程启动而启动,--privileged特权模式,由于我要在容器内启动服务,挂载硬盘,所以需要特权模式,注意后面一定是/sbin/init或者/usr/sbin/init,我容器的tag是以eeb6打头,实际运行时要运行你们本地镜像的名字。使用docker ps可以查看到我创建的两个容器:
然后检查一下两台容器的网络:
server1为4.2,server2为4.3,由于我在创建容器时没有指定容器IP,所以该IP为docker自动分配的。然后检查一下容器之间的网络连接和容器和虚拟机的网络连接,我这里是正常的,由于我要挂载,所以我修改了一下宿主机的/etc/hosts文件,
四、容器内安装glusterfs-server
接下来就是glusterfs的安装,我以server1为例来讲解:
首先在虚拟机上下载yum源:(由于我下载的centos7.9镜像没有wget命令,只能拷贝了)
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
docker cp CentOS7-Base-163.repo server1:/etc/yum.repos.d/
将163的源拷贝到容器中并替换容器原来的源。
docker exec -it server1 /bin/bash //进入容器
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak //备份旧配置文件
mv CentOS7-Base-163.repo CentOS-Base.repo //替换
然后在server1容器内安装glusterfs:
yum install centos-release-gluster
yum clean all&&yum makecache
yum install glusterfs-server
//启动glusterd服务
systemctl start glusterd
server2也按照server1这样安装glusterfs。
五、硬盘格式化挂载
接下来就是硬盘格式化挂载:
正常我们在server1容器内能看到两块磁盘,server1对/dev/sdb进行格式化挂载:
# mkfs.xfs -i size=512 /dev/sdb
# mkdir -p /data/brick1
# echo '/dev/sdb /data/brick1 xfs defaults 1 2' >> /etc/fstab
# mount -a && mount
然后在server2上执行同样的操作:
# mkfs.xfs -i size=512 /dev/sdc
# mkdir -p /data/brick1
# echo '/dev/sdc /data/brick1 xfs defaults 1 2' >> /etc/fstab
# mount -a && mount
server1挂载的是/dev/sdb,挂载后我们可以看到server1为:
六、glusterfs分布式文件系统集群搭建
然后构建glusterfs集群:
gluster peer probe server2 //该命令在server1上执行
gluster peer probe server1 //该命令在server2上执行
在server1上执行命令查看集群状态:
gluster peer status
在每个节点上执行:
mkdir -p /data/brick1/gv0
然后创建分布式复制卷,在任意一个节点上执行:
//创建卷
gluster volume create gv0 replica 2 server1:/data/brick1/gv0 server2:/data/brick1/gv0
//启动卷
gluster volume start gv0
任一节点执行以下命令,查看卷是否正常启动
gluster volume info
卷正常启动后,我们就可以在虚拟机上挂载该卷,执行命令如下:
//安装文件系统接口
yum -y install glusterfs-fuse
//挂载
mount -t glusterfs server2:/gv0 /mnt
挂载后执行df -hT就可以看到挂载的盘了: