mfs的高可用有热备和冷备,官方的是冷备,备用机安装这个moosefs-metalogger;而这里要做的是热备,结合pacemaker做成服务级别的热备
实验环境:rhel7.6 selinux and iptables disabled
server1 5 moosefs-master iscsi客户端
server3 4 moosefs-chunkserver
server2 targetcli服务端
真机 fence-virtd
因为前面已经搭建好server1:moosefs-master,server2 3 4 5:moosefs-chunkserver,因此首先将server2 5脱离出来
一.磁盘共享
一开始的时候,由于server5新建的master,上面没有元数据,因此需要创建网络文件系统,保证server1 5数据同步
server2 iscsi服务端
因为之前server2上已经使用了一个虚拟磁盘,现在将其格式化
systemctl stop moosefs-chunkserver.service
umount /mnt/chunk1/
fdisk /dev/vdb ->d #清空磁盘
yum install targetcli.noarch -y #安装iscsi服务,rhel7是targetcli
systemctl start target.service
targetcli #创建共享磁盘
/backstores/block> create my_disk /dev/vdb
Created block storage object my_disk using /dev/vdb.
/iscsi> create iqn.2021-03.org.westos:target1
Created target iqn.2021-03.org.westos:target1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi/iqn.20...et1/tpg1/luns> create /backstores/block/my_disk
Created LUN 0.
/iscsi/iqn.20...et1/tpg1/acls> create iqn.2021-03.org.westos:client
Created Node ACL for iqn.2021-03.org.westos:client
Created mapped LUN 0.
server1 server5 iscsi客户端
yum install iscsi-* -y
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-03.org.westos:client
iscsiadm -m discovery -t st -p 172.25.2.2 #连接共享磁盘
iscsiadm -m node -l #登陆
cat /proc/partitions
server1
fdisk /dev/sda #创建磁盘
mkfs.ext4 /dev/sda1
cat /proc/partitions
server5
partprobe #同步
cat /proc/partitions
将数据写入设备/dev/sda1,这样的话两个moosefs-master的数据实现同步
mount /dev/sda1 /mnt
chown mfs.mfs /mnt/ #权限跟着设备走的
systemctl stop moosefs-master.service
cp /var/lib/mfs/* /mnt/
umount /mnt/
mount /dev/sda1 /var/lib/mfs/
cd /var/lib/mfs/
二.创建pacemaker集群
server1 5 master
vim /etc/yum.repos.d/rhel7.6.repo
[rhel7.6]
name=rhel7.6
baseurl=http://172.25.2.250/rhel7.6
gpgcheck=0
[HighAvailability]
name=rhel7.6
baseurl=http://172.25.2.250/rhel7.6/addons/HighAvailability
gpgcheck=0
yum install -y pacemaker pcs psmisc policycoreutils-python
systemctl enable --now pcsd.service
echo westos | passwd --stdin hacluster
pcs cluster auth server1 server5
pcs cluster setup --name mycluster server1 server5 #设置集群
pcs cluster start --all
pcs cluster enable --all
crm_verify -L #校验
pcs property set stonith-enabled=false #先关掉fence
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=172.25.2.100 cidr_netmask=32 op monitor interval=30s #创建vip
pcs resource create mfsmaster systemd:moosefs-master op monitor interval=60s #创建服务
pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=ext4 op monitor interval=60s #创建文件系统
这样的话vip是和mfsmaster绑定在一起,因此所有的解析都要修改下,不然chunserver无法连接master
vim /etc/hosts
172.25.2.100 mfsmaster
pcs resource group add mfsgroup ClusterIP mfsdata mfsmaster #创建资源组
交由集群管理
由于moosefs-master正常关闭时,metadata.mfs.back会变成metadata.mfs,而启动时再次去找这个metadata.mfs;但是在非正常关闭时,不会生成metadata.mfs,因此moosefs-master服务也不会启动
server1 5
systemctl status moosefs-master.service
vim /usr/lib/systemd/system/moosefs-master.service
8 ExecStart=/usr/sbin/mfsmaster -a #非正常关闭时,直接恢复
systemctl daemon-reload
当vip moosefs-master mfsdata出现问题时,自动在本地重启或恢复;但是当主机网卡down或内核崩溃,就需要fence设备,防止形成脑裂
三.fence设备
真机
yum install fence-virtd fence-virtd-multicast fence-virtd-libvirt -y
fence_virtd -c #注意网卡选桥接网卡
mkdir /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
systemctl start fence_virtd.service #先生成key,再启动服务
scp /etc/cluster/fence_xvm.key server1:/etc/cluster/fence_xvm.key #和5
server1 5
yum install fence-virt -y
mkdir /etc/cluster
pcs stonith create vmfence fence_xvm pcmk_host_map="server1:test1;server5:server5" op monitor interval=60s #创建stonith资源
pcs property set stonith-enabled=true #再将之前禁掉的开启
[root@server5 ~]# ip link set down eth0 #模拟网卡down
[root@server1 pcsd]# echo c > /proc/sysrq-trigger #也可以模拟内核崩溃
总结下:
还是开头提的,moosefs-master上存有后台数据的元数据,在做成两个master时,首先应该保证moosefs-master元数据的同步,先做了一个iscsi磁盘共享;
部署pacemaker,资源组运行时,测试moosefs节点down时,非正常关闭,导致服务不能重启,还要做好启动的恢复;
最后在fence设备部署好时,别忘了开启stonith