如何在Linux(CentOS/RHEL 7)中安装和配置两个节点群集
在开始之前,希望我们熟悉不同的集群类型及其架构。
在本文中,我将解释在CentOS/RHEL 7 Linux节点上配置两个节点集群的步骤。
两节点群集与具有3个或者更高节点的群集有何不同?
法定人数是执行集群操作所需的最小集群成员投票数。
没有仲裁,群集将无法运行。
当大多数集群成员投票执行特定的集群操作时,即可达到法定人数。
如果大多数群集成员不投票,则将不会执行群集操作。
在两节点群集配置中,预期投票的最大数目为2,而每个群集节点都有一票。
在任何节点出现故障的故障情况下,只有一个节点处于活动状态,并且只有一票。
在这种配置中,由于无法交付多数票,因此无法达到法定人数。
单个群集节点被卡在50%的位置,将永远不会超过它。
因此,群集将永远不会以这种方式正常运行。
2节点集群挑战
仲裁问题:
2节点集群发生故障后不可能超过一半脑裂可能发生。
启用防护后,两个节点都将尝试相互隔离。在所有节点可用之前,群集将不会启动。
这可以使用" wait_for_all"参数轻松禁用
注意:建议使用" wait_for_all = 0"创建一个两节点集群,如下例所示。
当创建一个2节点的集群时,two_node
模式将在corosync.conf
中启用,如果我们向集群中添加更多的节点,它将自动消失。
pcs cluster setup --start --enable --name cluster_name --wait_for_all=0 node1.example.com node2.example.com
现在,对我而言,我已经分享了"逐步的文章,以配置三个节点的HA群集",在相同的设置下,我删除了" node3.example.com,以便我可以使用相同的设置来演示本文
[root@node1 ~]# corosync-quorumtool Quorum information ----------------- Date: Wed Dec 26 16:14:02 2016 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1/368 Quorate: Yes Votequorum information --------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 2 Flags: Quorate Membership information --------------------- Nodeid Votes Name 1 1 node1.example.com (local) 2 1 node2.example.com
其中我至少需要两票,才能使我的集群正常运行。
"如果我的集群节点之一出现故障怎么办?"
让我们手动尝试停止我的集群节点之一
[root@node2 ~]# pcs cluster stop node2.example.com Error: Stopping the node(s) will cause a loss of the quorum, use --force to override
现在,由于群集中只有两个节点,因此该服务将使我无法轻松关闭群集节点。
因此,我需要使用--force
[root@node2 ~]# pcs cluster stop node2.example.com --force node2.example.com: Stopping Cluster (pacemaker)... node2.example.com: Stopping Cluster (corosync)...
现在让我们检查集群的状态
[root@node1 ~]# corosync-quorumtool Quorum information ----------------- Date: Wed Dec 26 16:15:54 2016 Quorum provider: corosync_votequorum Nodes: 1 Node ID: 1 Ring ID: 1/372 Quorate: No Votequorum information --------------------- Expected votes: 2 Highest expected: 2 Total votes: 1 Quorum: 2 Activity blocked Flags: Membership information --------------------- Nodeid Votes Name 1 1 node1.example.com (local)
因此,正如预期的那样,我们的集群不再处于Quorate状态。
由于预期票数高于总票数。
因此,我们必须进行一些其他配置才能拥有两个节点的集群。
现在使用CentOS 6,可以使用仲裁磁盘来实现。
为什么CentOS 7上的Cluster无法使用仲裁磁盘?
CentOS 7群集堆栈中的仲裁提供程序是
corosync
。与CentOS 6集群堆栈相反,CentOS 7集群堆栈仅提供一种解决法定问题的方法,即两个节点特定的集群配置。
CentOS 7群集堆栈缺少Quorum磁盘解决方法选项,主要是由于Corosync版本2提供了其他Quorum配置选项。
实际上,这些添加的Corosync版本2选项使Quorum磁盘在两节点或者多节点群集配置中不必要。
绝对欢迎Corosync版本2的新Quorum功能,这些功能经过深思熟虑,并且可以以各种方式取代对Quorum磁盘的需求。
如前所述,CentOS 7群集堆栈中的仲裁提供者是" Corosync版本2"。
因此,在corosync.conf
配置文件中提供了群集仲裁配置。
在以前的Corosync版本(版本1)中,法定功能是由CMAN提供的。
借助CentOS 7集群堆栈中包含的Corosync版本2,仲裁功能由Corosync本身提供,特别是由votequorum
进程提供。
如何使用CentOS/RHEL 7 Linux配置两节点集群?
如果要在CentOS 7集群堆栈上配置两节点集群,则应启用" two_node"集群选项。
在进行配置更改之前,停止集群服务
[root@node1 ~]# pcs cluster stop --all node1.example.com: Stopping Cluster (pacemaker)... node2.example.com: Stopping Cluster (pacemaker)... node1.example.com: Stopping Cluster (corosync)... node2.example.com: Stopping Cluster (corosync)...
接下来,将以下参数添加到"仲裁"部分下的" corosync.conf"中:
# vim /etc/corosync/corosync.conf quorum { provider: corosync_votequorum two_node: 1 wait_for_all: 0 }
通过启用" two_node"集群选项,仲裁将被人为地设置为" 1",这意味着即使一个集群节点发生故障,集群也将达到法定数量并继续运行。
注意:通过启用" two_node"集群选项,将自动启用添加的" wait_for_all"选项。
让我们检查集群状态,如我们所见,我们为两个节点集群启用了其他标志
[root@node1 ~]# corosync-quorumtool Quorum information ----------------- Date: Wed Dec 26 16:08:19 2016 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1/356 Quorate: Yes Votequorum information --------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 1 Flags: 2Node Quorate Membership information --------------------- Nodeid Votes Name 1 1 node1.example.com (local) 2 1 node2.example.com
现在让我们尝试停止集群节点之一
[root@node1 ~]# pcs cluster stop node2.example.com node2.example.com: Stopping Cluster (pacemaker)... node2.example.com: Stopping Cluster (corosync)...
正如我们这次观察到的那样,该工具并未像以前那样阻止我们停止集群节点。
让我们检查仲裁状态
[root@node1 ~]# corosync-quorumtool Quorum information ----------------- Date: Wed Dec 26 16:09:30 2016 Quorum provider: corosync_votequorum Nodes: 1 Node ID: 1 Ring ID: 1/360 Quorate: Yes Votequorum information --------------------- Expected votes: 2 Highest expected: 2 Total votes: 1 Quorum: 1 Flags: 2Node Quorate Membership information --------------------- Nodeid Votes Name 1 1 node1.example.com (local)
"因此,即使只有一个节点处于活动状态,我们的集群也能正常运行。
"
让我们还了解与corosync配置相关的其他一些"基本术语"
wait_for_all(默认:0):``votequorum
进程的一般行为是尽快从inquoate切换到quoate。
一旦大多数节点对彼此可见,群集便会变为群集。
使用" wait_for_all"选项或者" WFA",我们可以将集群配置为首次成为集群,但前提是在所有节点都可见之后。
如果启用了" two_node"选项,则也会自动启用" wait_for_all"选项。last_man_standing(默认值:0)/last_man_standing_window(默认值:10)
:votequorum
进程的一般行为是在启动时设置expected_votes
参数和定额。
启用" last_man_standing"选项或者" LMS",可使集群在特定情况下动态地重新计算" expected_votes"参数和仲裁。
在高可用性集群中使用" LMS"选项时,启用" WFA"选项很重要。auto_tie_breaker(默认值:0):启用auto_tie_breaker选项或者ATB时,由于多达50%的节点同时发生故障,群集可能会遭受损失。
群集分区或者仍与具有最低" nodeid"参数的节点保持联系的节点集将保持原来的状态。
其他节点将是隔离的。
注意:在没有Quorum磁盘的情况下,必须始终在两节点群集配置中禁用防护,以避免在两个群集节点相互杀死的篱笆竞争情况下。