续我的上篇博文:https://mp.youkuaiyun.com/postedit/89107881。即mfsmaster的高可用已经搭建部署好
一、fence的工作原理
fence的工作原理:
当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资 源进行了释放,保证了资源和服务始终运行在一个节点上。
二、基于fence的mfsmaster高可用的实现
1、fence的安装及配置
配置物理机(fence服务端):
<1>fenc的安装
[root@foundation83 ~]# yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
<2>进行初始化设置(其中要将接口设备改为br0,其他默认回车,最后一项输入y确定即可)
- 注:这里br0是因为虚拟服务器受主机控制的网卡是br0
[root@foundation83 ~]# fence_virtd -c
- 查看初始化过程中的参数(IP和Port)
- 其中IP和Port这个参数信息,是有fence的配置文件决定的
<3>生成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
<4>启动fence_virtd服务,并查看1229端口(fence_virtd服务对应的端口)是否存在
[root@foundation83 cluster]# systemctl start fence_virtd.service
[root@foundation83 cluster]# netstat -antulpe | grep 1229
udp 0 0 0.0.0.0:1229 0.0.0.0:* 0 258918 27591/fence_virtd
配置server1和server4(fence客户端):
<1>安装fence客户端需要安装的软件:fence-virt
[root@server1 ~]# yum install fence-virt -y
#server4端的操作i同server1
<2>从fence服务端那里拷贝fence_xvm.key
[root@server1 ~]# mkdir /etc/cluster
[root@foundation83 ~]# scp /etc/cluster/fence_xvm.key root@172.25.83.1:/etc/cluster/ #给HA节点发送key
[root@server1 ~]# ll /etc/cluster/
total 4
-rw-r--r-- 1 root root 128 Apr 9 17:33 fence_xvm.key
#server4端的操作i同server1
2、添加fence设备,启用STONITH并进行测试
pcs stonith相关命令:
pcs stonith list ##查看支持Fence列表
pcs stonith describe agent_name ## 查看Fence资源使用参数。如:"pcs stonith describe fence_xvm":查看有关fence_xvm有关的资源使用参数
<1>添加fence设备
[root@server1 ~]# pcs cluster start server4 #上篇博文关闭了pcs集群中的server4端,为了不影响后续实验的进行,开启server4端
[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这个名字随意给
- 其中fence设备运行的主机和其他资源运行的主机正好是相反的。查看server4端的监控(命令为"crm_mon"),监控界面如下:
从上图中我们可以看到:vip,mfsdata,mfsd这三个资源运行在server1端,而vmfence运行在server4端。
<2>启用STONITH
[root@server1 ~]# pcs property set stonith-enabled=true #启用STONUTH
[root@server1 ~]# crm_verify -L -V #检测配置是否正确(假若没有输出任何则配置正确)
<3>进行测试:
方法一:利用fence命令
[root@server1 ~]# fence_xvm server1
因为上篇博文设置了pcs集群开机自启,所以不用在server1端手动启动集群节点server1,vmfence就会运行在server1端。(否则需要等到server1端开启之后输入命令"pcs cluster start server1"来启动pcs集群中的server1端,vmfence才能运行在server1端)
- 此时,我们会发现server1自动重启
- 在server4端查看监控(crm_mon):vip,mfsdata,mfsd这三个资源运行在server4端,vmfence运行在server1端
- 客户端的访问并没有受到任何影响
方法二:利用echo命令直接让系统崩溃
[root@server4 ~]# echo c > /proc/sysrq-trigger
因为上篇博文设置了pcs集群开机自启,所以不用在server1端手动启动集群节点server1,vmfence就会运行在server4端。(否则需要等到server4端开启之后输入命令"pcs cluster start server4"来启动pcs集群中的server4端,vmfence才能运行在server4端)
- 此时,我们会发现server4自动重启
- 在server1端查看监控(crm_mon):vip,mfsdata,mfsd这三个资源运行在server1端,vmfence运行在server4端
- 客户端的访问并没有受到任何影响