注:此博文在博文“套件实现高可用负载均衡集群(一)”的基础上完成
环境:
- 物理机:172.25.54.250,作为fence
- server1:172.25.54.1 , server1作为主节点
- server2:172.25.54.2 , server2作为副节点
- server3:172.25.54.3 , 暂时用作RS进行负载均衡测试 , 后面作iscci共享存储
- server4:172.25.54.4 , 作为RS , 负载均衡测试
向集群中添加 fence
为什么使用 fence 设备?
- 如果集群中一个节点通信失效,那么集群中的其他节点必须能够保证将已经失效的节点与其正在访问的共享资源(比如共享存储)隔离开,出问题的集群节点 本身无法做到这一点,因为该集群节点在此时可能已经失去响应(例如发生hung机),因此需要通过外部机制来实现这一点。这种方法被称为带有fence代 理的隔离。
- 不配置隔离设备,我们没有办法知道之前断开连接的集群节点使用的资源是否已经被释放掉。如果我们没有配置隔离代理(或者设备),系统可能错误的认为集群节点已经释放了它的资源,这将会造成数据损坏和丢失。 没有配置隔离设备,数据的完整性就不能够被保证,集群配置将不被支持。
- 当隔离动作正在进行中时,不允许执行其他集群操作。这包括故障转移服务和获取GFS文件系统或GFS2文件系统的新锁。 在隔离动作完成之前或在该集群节点已经重启并且重新加入集群之前,集群不能恢复正常运行。
fence设备的实现
利用 libvitr , 构建模拟 fence , libvirt 可以管理虚拟机的开关
此处是物理机:172.25.54.250,作为fence
- 安装 1.
fence-virtd-multicast
2.fence-virtd
3.fence-virtd-libvirt
[root@foundation54 ~]# yum install fence-virtd-multicast fence-virtd fence-virtd-libvirt -y
[root@foundation54 ~]# fence_virtd -c //编写新的fence 信息
Module search path [/usr/lib64/fence-virt]: /usr/lib64/fence-virt
Listener module [multicast]: multicast
Multicast IP Address [225.0.0.12]: 225.0.0.12
Using ipv4 as family. //默认的
Multicast IP Port [1229]: 1229
Interface [virbr0]: br0
##这里br0是因为虚拟服务器受主机控制的网卡是br0
Key File [/etc/cluster/fence_xvm.key]: /etc/cluster/fence_xvm.key
Backend module [libvirt]: libvirt
[root@foundation54 ~]# cat /etc/fence_virt.conf //此时查看配置文件
backends {
libvirt {
uri = "qemu:///system";
}
}
listeners {
multicast {
port = "1229";
family = "ipv4";
interface = "br0";
address = "225.0.0.12";
key_file = "/etc/cluster/fence_xvm.key";
}
}
fence_virtd {
module_path = "/usr/lib64/fence-virt";
backend = "libvirt";
listener = "multicast";
}
[root@foundation54 ~]# mkdir /etc/cluster
[root@foundation54 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000145763 s, 878 kB/s
[root@foundation54 ~]# file /etc/cluster/fence_xvm.key ##查看文件类型
/etc/cluster/fence_xvm.key: data
[root@foundation54 ~]# systemctl start fence_virtd
[root@foundation54 ~]# systemctl enable fence_virtd
[root@foundation54 ~]# netstat -anulp | grep fence_virtd
udp 0 0 0.0.0.0:1229 0.0.0.0:* 8657/fence_virtd
[root@foundation54 ~]# scp /etc/cluster/fence_xvm.key root@172.25.54.1:/etc/cluster/
[root@foundation54 ~]# scp /etc/cluster/fence_xvm.key root@172.25.54.2:/etc/cluster/
[root@foundation54 ~]#
此时使用图形界面添加 fence
然后选择Nodes
然后选择Add Fence Method
然后选择Add Fence Instance
注:server2也需完成上述server1操作
[root@server1 ~]# cat /etc/cluster/cluster.conf ##查看配置信息
<?xml version="1.0"?>
<cluster config_version="9" name="tutu1">
<clusternodes>
<clusternode name="server1" nodeid="1">
<fence>
<method name="fence1">
<device domain="eef564be-075e-42b6-880e-ea4c1faf0e11" name="vmfence"/>
</method>
</fence>
</clusternode>
<clusternode name="server2" nodeid="2">
<fence>
<method name="fence2">
<device domain="eef564be-075e-42b6-880e-ea4c1faf0e11" name="vmfence"/>
</method>
</fence>
</clusternode>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices>
<fencedevice agent="fence_xvm" name="vmfence"/>
</fencedevices>
</cluster>
[root@server1 ~]#
测试