fence的工作原理:
当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资 源进行了释放,保证了资源和服务始终运行在一个节点上,并且有效的阻止了脑裂(高可用节点分裂为两个独立节点,这个时候会开始争抢共享资源)的发生。
前提:将上一篇博客关闭的server1打开
在上一篇的博客基础上添加物理机作为fence
第一步:配置物理机(做这个实验记得将物理机的防火墙关掉喔~或者配置相应的策略)
fence服务端:
[root@foundation27 ~]# yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
进行初始化设置(其中要将接口设备改为br0,其他默认回车,最后一项输入y确定即可)
注:这里br0是因为虚拟服务器受主机控制的网卡是br0
[root@foundation27 ~]# fence_virtd -c
生成fence_xvm.key
[root@foundation83 ~]# mkdir /etc/cluster #建立目录
[root@foundation83 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 #dd截取,生成128位的fence_xvm.key,可以file查看这个key类型是数据(data),所以只能利用下面的命令来查看该文件
[root@foundation83 ~]# hexdump -C /etc/cluster/fence_xvm.key #查看key
启动fence_virtd服务,并查看1229端口(fence_virtd服务对应的端口)是否存在
[root@foundation83 cluster]# systemctl start fence_virtd.service
[root@foundation83 cluster]# netstat -antulpe | grep 1229
第二步:配置server1和server4
fence客户端:
server4端的操作同server1
安装fence客户端需要安装的软件:fence-virt
[root@server1 ~]# yum install fence-virt -y
从fence服务端那里拷贝fence_xvm.key
[root@server1 ~]# mkdir /etc/cluster
[root@server1 ~]# cd /etc/cluster
[root@server1 ~]# scp @172.25.27.1:/etc/cluster/fence_xvm.key . #给HA节点发送key
[root@server1 ~]# ll /etc/cluster/
第三步:添加fence设备,启用STONITH
[root@server1 ~]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:server1;server4:server4" op monitor interval=1min #添加名为vmfence的fence设备(其中第一个server1表示虚拟机的名字,第二个server1表示主机名。server4同理)。其中vmfence这个名字随意给
[root@server1 ~]# crm_mon #查看监控,其中fence设备运行的主机和其他资源运行的主机正好是相反的
启用STONITH
[root@server1 ~]# pcs property set stonith-enabled=true #启用STONUTH
[root@server1 ~]# crm_verify -L -V #检测配置是否正确(假若没有输出任何则配置正确)
第四步:进行测试:
方法一:利用echo命令直接让系统崩溃
[root@server1 ~]# echo c > /proc/sysrq-trigger
此时,我们会发现server1自动重启
因为上篇博文设置了pcs集群开机自启,所以不用在server1端手动启动集群节点server1,vmfence就会运行在server1端。(否则需要等到server1端开启之后输入命令"pcs cluster start server1"来启动pcs集群中的server1端,vmfence才能运行在server1端)
在server4端查看监控(crm_mon):vip,mfsdata,mfsd这三个资源运行在server4端,vmfence运行在server1端
方法一:利用fence命令
[root@server1 ~]# fence_xvm -H server4
在server1端查看监控(crm_mon):vip,mfsdata,mfsd这三个资源运行在server1端,vmfence运行在server4端