使用两个节点:
- 节点1:192.168.0.1
- 节点2:192.168.0.2
在两台服务器上安装 HA 工具:
yum install pacemaker pcs
(它将包括安装 corosync)
在两台服务器上:
passwd hacluster
为集群设置相同的密码。
在两台服务器上:
systemctl enable pcsd.service
systemctl start pcsd.service
验证集群节点:
node1# pcs cluster auth 192.168.0.1 192.168.0.2
全部已成功验证。
生成corosync配置:
node1# pcs cluster setup --name mycluster 192.168.0.1 192.168.0.2
启动集群:
node1# pcs cluster start --all
成功。
确认状态:
pcs status corosync
Output
Membership information
----------------------
Nodeid Votes Name
2 1 192.168.0.2
1 1 192.168.0.1 (local)
获取有关集群当前状态的更多信息:
pcs cluster status
Output
Cluster Status:
...
Stack: corosync
...
2 nodes and 0 resources configured
Online: [ node1 node2 ]
PCSD Status:
node1 (192.168.0.1): Online
node2 (192.168.0.2): Online
在两台服务器上启用 corosync 和 pacemaker 服务:
systemctl enable corosync.service
systemctl enable pacemaker.service
禁用 STONITH
node1# pcs property set stonith-enabled=false
创建浮动IP并将其添加到pcs资源后,测试故障转移。
在节点 1 上:
reboot
然后就出问题了。重启后,pcs cluster status
再次运行,显示:
Cluster Status:
Stack: corosync
Current DC: centos7lb1 (version 1.1.15-11.el7_3.5-e174ec8) - partition WITHOUT quorum
Last updated: Sun Jul 23 23:47:53 2017 Last change: Fri Jul 21 05:56:32 2017 by hacluster via crmd on node1
1 node and 0 resources configured
PCSD Status:
node1 (192.168.0.1): Online
*Unknown* (192.168.0.2): Online
在节点1上运行pcs status
:
Cluster name: mycluster
WARNING: corosync and pacemaker node names do not match (IPs used in setup?)
Stack: corosync
Current DC: node1 (version 1.1.15-11.el7_3.5-e174ec8) - partition WITHOUT quorum
Last updated: Sun Jul 23 23:58:22 2017 Last change: Fri Jul 21 05:56:32 2017 by hacluster via crmd on node1
1 node and 0 resources configured
Online: [ node1 ]
No resources
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
在集群中找不到node2
。同时检查节点 2 上的状态,node2
也只有一个节点 ( )。与节点 1 相同,在集群中找不到其他节点。
我尝试删除 pacemaker、corosync 和 pcs,然后重新执行。但之后出现如下错误:
yum remove pacemaker pcs
然后对其进行验证:
pcs cluster auth node1 node2
表明他们Already authorized
。
这时候如何才能把这两个节点重新正确的加入到集群中呢?我明确想移除他们,那怎么办呢?
答案1
原因就是防火墙。
由于 Corosync 在端口 5404 和 5405 上使用 UDP 传输,因此我添加了:
iptables -I INPUT -m state --state NEW -p udp -m multiport --dports 5404,5405 -j ACCEPT
iptables -I OUTPUT -m state --state NEW -p udp -m multiport --sports 5404,5405 -j ACCEPT
service iptables save
并停止/启动所有集群:
pcs cluster stop --all
pcs cluster start --all
同时跑了:
service corosync restart
集群正常运行。可以看到所有节点,并且所有节点均在线。