1. 简介
生产环境中可能会出现集群中某台节点由于网络闪断等原因导致某台节点处于假死状态,此时集群内部为了维持正常运作可能会出现资源的自动迁移,但是像mfs这种分布式存储系统,我们结合iscsi实现了存储共享,它是本地文件系统,因此不支持同时写入。这时候两个节点上都有资源,同时写入存储则会造成脑裂现象,这时候我们就需要一种防御机制,当出现这种情况时自动使假死状态的节点断电重启从而来防止脑裂现象的产生,维持集群的正常运作,一般fence是外界的物理设备,但是因为我们用的是虚拟机,所以我们可以使用libvirtd虚拟机管理工具来实现一个类似于fence的功能
2. 服务端配置
[root@foundation ~]# rpm -qa | grep fence
fence-virtd-multicast-0.4.0-4.el8.x86_64
fence-virtd-0.4.0-4.el8.x86_64
libxshmfence-1.3-2.el8.x86_64
libxshmfence-devel-1.3-2.el8.x86_64
fence-virtd-serial-0.4.0-4.el8.x86_64
fence-virtd-tcp-0.4.0-4.el8.x86_64
fence-virtd-libvirt-0.4.0-4.el8.x86_64
[root@foundation ~]# fence_virtd -c ##fence连接libvirtd配置
Module search path [/usr/lib64/fence-virt]:
Listener module [multicast]:
Multicast IP Address [225.0.0.12]:
Multicast IP Port [1229]:
Interface [br0]: ##第一次配置这里需要填none
Key File [/etc/cluster/fence_xvm.key]:
Backend module [libvirt]:
Libvirt URI [qemu:///system]:
=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y
[root@foundation ~]# cd /etc/cluster/
[root@foundation cluster]# ls
fence_xvm.key
[root@foundation cluster]# ll
total 4
-rw-r--r--. 1 root root 128 Jan 17 01:31 fence_xvm.key
[root@foundation cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 ##生成Key,只有拥有key的主机才能对libvirtd发送命令对虚拟机进行操作
1+0 records in
1+0 records out
128 bytes copied, 8.2072e-05 s, 1.6 MB/s
[root@foundation cluster]# ll
total 4
-rw-r--r--. 1 root root 128 Apr 23 21:08 fence_xvm.key
[root@foundation cluster]# systemctl start fence_virtd.service ##先生成key再启动服务
[root@foundation cluster]# netstat -anulp | grep :1229 ##端口开启
udp 0 0 0.0.0.0:1229 0.0.0.0:* 6748/fence_virtd
安装相关资源包
3. 客户端配置
[root@server1 ~]# yum install -y fence-virt ##安装相关资源包
[root@server4 mfs]# yum install -y fence-virt
[root@server1 ~]# stonith_admin -I
fence_xvm
fence_virt
2 devices found
[root@server1 ~]# ssh server4 stonith_admin -I
fence_xvm
fence_virt
2 devices found
[root@server1 ~]# mkdir /etc/cluster/
[root@server4 mfs]# mkdir /etc/cluster/
复制key到集群两个节点上:
[root@foundation cluster]# scp fence_xvm.key root@192.168.0.1:/etc/cluster/
[root@foundation cluster]# scp fence_xvm.key root@192.168.0.4:/etc/cluster/
将fence加入到集群中:
[root@server1 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:demo1;server4:demo4" op monitor interval=60s
[root@server1 cluster]# pcs property set stonith-enabled=true ##启用fence
[root@server1 cluster]# pcs status
[root@server4 cluster]# echo c > /proc/sysrq-trigger
4. fence机制解决硬件问题
内核崩溃,网卡丢失等硬件问题能够得以解决,fence机制的存在将会使故障主机自动断电而不会造成脑裂.
[root@server4 cluster]# echo c > /proc/sysrq-trigger
[root@server1 cluster]# ip link set down eth0