目录
一、fence作用
HA01理解集群那篇文章中讲过,当集群中某个node出现故障,各个node争抢集群资源将出现脑裂。fence将node关机或重启,避免脑裂。前面的实验中,我们关闭了fence,为了验证fence的功能,我们需要打开fence。https://node1:2224中配置Stonith Enable勾选,或者参考下面的命令。
[root@node1 ~]# pcs property set stonith-enabled=true
二、在集群里添加fence
实验环境中,server上有node1、2、3,我们使用server作为fence。
2.1、fence和node之间的通信
fence要控制node1、2、3,那么就要让fence和三个node信任,因此fence和各个node之间用key去做信任。在server上:创建目录/etc/cluster/。并在该目录下创建fence用的key,注意这个文件大小必须是4k(blocksize*count),小于4k是不行的。再把这个key搞到三个node的/etc/cluster/目录里面。
[root@server:~]# mkdir -p /etc/cluster
[root@server:~]# dd if=/dev/zero of=/etc/cluster/fence_xvm.key bs=4096 count=1
[root@server:~]# scp -r /etc/cluster/ node1:/etc/cluster/
[root@server:~]# scp -r /etc/cluster/ node2:/etc/cluster/
[root@server:~]# scp -r /etc/cluster/ node3:/etc/cluster/
2.2、配置fence
如果没有fence_virtd命令,那么需要先装包。
[root@server:~]# yum install fence-virt*
在server上:相应的fence配置。将server配置成fence的引擎。设置fence_virtd服务开机启动,启动fence_virtd服务。
[root@server:~]# fence_virtd -c
Module search path [/usr/lib64/fence-virt]:回车默认
Listener module [multicast]:回车默认,多路广播模式
Multicast IP Address [225.0.0.12]:回车默认,广播的IP
Multicast IP Port [1229]:回车默认,广播的端口
Interface [virbr0]:回车默认,用virbr0做node与fence的通信
Key File [/etc/cluster/fence_xvm.key]:回车默认,这个就是key的路径
Backend module [libvirt]:回车默认
=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y 回复y完成
[root@server:~]# systemctl enable fence_virtd.service
[root@server:~]# systemctl start fence_virtd.service
验证fence配置正确,查看server模拟的这个fence可以发现几个node。注意!因为通过virbr0网络通信,所以发现4个node(node1-4)。但是只能管理node1-3,因为node4没有key。
[root@server:~]# fence_xvm -o list
node1 85131e1d-13c0-4bac-889a-cdfce5864337 on
node2 0b539cb2-79fb-49ab-94c8-fa4cd9e0f550 on
node3 c770c3e8-237f-46d9-8fe4-1d103740e583 on
node4 fd42d1d6-775c-4243-babc-97d4df6f3d6f on
2.3、node上安装fence代理
现实生产中,fence会由不同的fence设备实现,比如cisco、apc等。node通过脚本来与fence进行通信,对于不同的fence设备,node上需要安装不同的fence代理。yum list可以列出诸多fence代理。
[root@node1 ~]# yum list fence*
如果使用电源交换机作为fence设备,那么要安装fence-agents-apc.x86_64
如果使用思科的设备作为fence设备,那么要安装fence-agents-cisco-mds.x86_64、fence-agents-cisco-ucs.x86_64等。
…………
server是虚拟机模拟出来的fence设备,因此安装虚拟设备代理,把fence-virt*包全安装。
[root@node1 ~]# yum install fence-virt -y
[root@node2 ~]# yum install fence-virt -y
[root@node3 ~]# yum install fence-virt -y
2.4、在集群中添加fence
最后,在集群中添加fence。浏览器访问https://node1:2224 登录hacluster/redhat--->cluster1--->FENCE DEVICE--->Add
--->弹出框,类型选择fence_xvm,起名fence_xvm1,高级选项pcmk_host_list里面填写node1,node2,node3--->点击create fence device
等待一会儿fence_xvm1变蓝running就说明fence启动了。
用crm_mon -1可以看到fence资源。
命令行方式添加fence
[root@node1 ~]# pcs stonith create fence_xvm1 fence_xvm pcmk_host_list=node1,node2,node3
[root@node1 ~]# pcs stonith show
fence_xvm1 (stonith:fence_xvm): Started
[root@node1 ~]# pcs stonith show fence_xvm1
Resource: fence_xvm1 (class=stonith type=fence_xvm)
Attributes: pcmk_host_list=node1,node2,node3
Operations: monitor interval=60s (fence_xvm1-monitor-interval-60s)
检测一下fence是否成功,可以手动fence一个node
[root@node1 ~]# fence_xvm -o reboot -H node3
或者
[root@node1 ~]# pcs stonith fence node3
Node: node3 fenced
2.5、fence动作
因为之前在https://node1:2224里面配置的fence动作是重启,因此断掉node3的网络以后,fence会重启node3。
[root@node3 ~]# pcs resource move vip node3
[root@node3 ~]# ifdown eth0
那么node3就会被fence重启。