如何在Linux(CentOS/RHEL 7)中安装和配置两个节点群集

时间:2020-01-09 10:39:19  来源:igfitidea点击:

在开始之前,希望我们熟悉不同的集群类型及其架构。

在本文中,我将解释在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磁盘的情况下,必须始终在两节点群集配置中禁用防护,以避免在两个群集节点相互杀死的篱笆竞争情况下。