当集群中的所有节点node都活跃的时候,每个节点都有一个vote(我们称之为票)。
临界值(quorum):集群能正常运行所需的最少的票数
当集群中的总票数为奇数时:quorum=(总票数+1)/2
当集群中的总票数为偶数时:quorum=总票数/2+1
注:对于只有两个节点的集群,不适用上面的公式,两节点集群比较特殊
查看集群节点持有的票数(vote值):
在node1上运行: #corosync-quorumtool -l 显示每个vote为1,结果如下图:
接下来我们测试以上公式的正确性:
首先我们需要搭建一个环境:
在集群中添加一个资源,我们以vip为例,在宿主机上运行
#firefox https://node1:2224&
输入用户名和密码进入集群配置界面,会发现第一天配置的集群,如下图:
此时点cluster properties,这里面的stonith enable一定得关闭,如下图:
因为我们还没有配置fence,可以点resources添加资源了,点add,然后弹出界面, Class/Provider:ocf:heatbeat Type:IPaddr2 ResourceID:vip ip:192.168.100.100(此ip一定是没被使用的) 点开Option Arguments,填写cidr_netmask:24
其他的都默认,然后提交,如下图:
此时资源(vip)已经添加成功,如下图:
此时可以在node1上执行 #crm_mon -1 查看vip运行在哪个节点上,如下图:
到此,vip资源已经添加成功,我们可以测试节点中出现故障,vip资源怎么转移的了。
集群中只有两个节点的情况,当其中一个节点出问题了,vip如何转移的
刚刚上图发现vip资源运行在node1上,在node1上运行 #ip -4 a 可以发现多了一个ip地址,如下图:
此时在物理机上ping 192.168.100.100是正常通信的。
将node1关机,vip自动转移到node2,vip的地址依然能ping通,证明两个节点只要有一个正常,集群 就能正常,如下图:
首先我们需要添加一个节点,在物理机上新建一个kvm虚拟机node3,在node3上运行如下:
#yum install pcs -y
#systemctl enable pcs
#systemctl start pcs
#echo redhat | passwd --stdin hacluster
在node1上运行 #pcs cluster stop --all 关闭集群,如下图所示:
在node1,node2,node3上运行如下:
#pcs cluster auth node1 node2 node3
在node1中添加node3节点,运行 #pcs cluster node add node3
在node1中启动集群,运行 #pcs cluster start --all
设置集群开机自启动,运行 #pcs cluster enable --all
此时集群中已经成功加入了node3节点,如下图所示:
如何测试,和两个节点的集群一样,经测试正常情况下符合最上面的公式。
在集群中删除节点:#pcs cluster node remove node3
刚刚测试了每个节点有一张票(vote)的情况,可以配置成一个节点有多于
一张票(vote)的情况:
1.先关闭集群:#pcs cluster stop --all
2.修改节点的vote值,在node1上编辑:#vim /etc/corosync/corosync.conf ,在需要添加vote值得节点的node{ }中加入q uorum_vote:3 ,如下图所示:
在node1上执行:#pcs cluster sync 将刚刚修改的配置文件同步到其他的节点。
然后查看一下每个节点的vote值:#corosync-quorumtool -l 此时发现node3的vote值已经更改为3了,如下图所示:
注:为了方便测试,我们有时候需要将资源(例如vip)从一个节点转移到另一个节点,使用命令:# pcs resource move vip node1 ,如下图所示,原来vip在node1上,我将vip移动到node2上运行:
如何测试,和两个节点的集群一样,经测试正常情况下符合最上面的公式。
如果不想让集群遵守上面的公式,不想收到quorum的影响,执行如下操作:
#pcs property list --all|grep quorum 查看quorum的状态
#pcs property set no-quorum-polity=ignore 忽略quorum
如下图所示:
此时集群不受quorum的限制
模拟脑裂现象:
我们只使用2个节点的集群,包括node1和node2,发现vip运行在node1,如下图:
使用 #ifconfig eth0 dwon 暂停node1中的网卡,此时node1认为网卡是正常工作的
此时node1和node2都认为自己没有问题,认为对方出现问题,查看集群状态出现如下图所示:
这时脑裂现象就出现了,这是我们不想看到的,所以就要使用fence来控制。
1.在宿主机,node1,node2安装fence
#yum install fence* -y
#systemctl enable fence_virtd
#systemctl start fence_virtd
2.在宿主机做如下操作
#mkdir /etc/cluster
#dd if=/dev/zero of=/etc/cluster/fence_xvm.key bs=4k count=1 创建一个key,一会配置fence时候用
#fence_virtd -c 开始配置fence,所有的都默认,就接口改为宿主机对应的接口virbr1
至此,宿主机成功配置为fence
3.将宿主机中的key复制到node1和node2中
#scp node:/etc/cluster/fence_xvm.key node1:/etc/cluster
#scp node:/etc/cluster/fence_xvm.key node2:/etc/cluster
手动尝试给fence发命令,让node1重启
#fence_xvm -o reboot -H node1
3.手动测试成功,在集群中添加一个fence
添加fence,需要将stonith打开,#pcs property set stonith-enabled=true
宿主机中,#firefox https://node1:2224&
点击fence devices,TYPE:fence_xvm Name:fence_test1 Advance中pcmk_host_list:node1,node2 ,如下图所示:
至此,fence配置成功,在任何一台节点上运行:#ifconfig eth0 down 暂停网卡,不会出现脑裂,直接会将有问题的节点重启。
至此Day 2的课程总结完毕。