介绍
高可用性是当今的一个重要话题,因为服务中断可能非常昂贵。 采取措施是明智的,以保持您的网站或Web应用程序在中断的情况下运行。
Pacemaker 是一个 _cluster 资源管理器,它管理所有集群服务(resources)并使用底层 _cluster 引擎的消息和会员能力。我们将使用 Corosync 作为我们的集群引擎。
在一个活跃被动集群中,所有服务都运行在一个主系统上.如果主系统失败,所有服务都被移动到备份系统中。
在本教程中,您将学习如何构建一个高可用性Apache活跃被动集群. 该网页集群将被其虚拟IP地址收集,如果节点失败,它将自动失败。
您的用户将通过虚拟 IP 地址访问您的 Web 应用程序,该地址由 Pacemaker 管理。Apache 服务和虚拟 IP 始终位于同一个主机上。
前提条件
在您开始使用本教程之前,您将需要以下内容:
- 两个 CentOS 7 Droplets,这将是群集节点. 我们将称之为 webnode01 (IP 地址:
your_first_server_ip
) 和 webnode02 (IP 地址:your_second_server_ip
)。 - 两个服务器上的用户具有根特权。 您可以通过遵循本教程来设置此设置。
您必须在两个服务器上运行一些命令,而某些命令只在一个。
步骤 1 - 配置名称分辨率
首先,我们需要确保两个主机都能解决两个集群节点的主机名称。 为了做到这一点,我们会将条目添加到 /etc/hosts
文件中。
使用nano
或您最喜欢的文本编辑器打开/etc/hosts
。
1sudo nano /etc/hosts
将下列内容添加到文件的末尾。
1[label /etc/hosts]
2your_first_server_ip webnode01.example.com webnode01
3your_second_server_ip webnode02.example.com webnode02
保存并关闭文件。
第2步:安装Apache
在本节中,我们将安装Apache网页服务器,您必须在两个主机上完成此步骤。
首先,安装Apache。
1sudo yum install httpd
Apache 资源代理使用 Apache 服务器状态页面来检查 Apache 服务的状态,您必须通过创建 /etc/httpd/conf.d/status.conf
文件来激活该状态页面。
1sudo nano /etc/httpd/conf.d/status.conf
这些指令允许从 localhost 访问状态页面,但不允许从任何其他主机访问。
1[label /etc/httpd/conf.d/status.conf]
2<Location /server-status>
3 SetHandler server-status
4 Order Deny,Allow
5 Deny from all
6 Allow from 127.0.0.1
7</Location>
保存并关闭文件。
步骤 3 – 安装 Pacemaker
现在我们将安装 Pacemaker 堆栈. 您必须在两个主机上完成此步骤。
安装 Pacemaker 堆栈和 pcs 集群壳,我们将使用后者来配置集群。
1sudo yum install pacemaker pcs
现在我们必须启动pcs daemon,它用于在节点之间同步Corosync配置。
1sudo systemctl start pcsd.service
为了在每次重新启动后启动 DAEMON,我们也将启用该服务。
1sudo systemctl enable pcsd.service
安装这些包后,系统上会出现一个名为 hacluster的新用户。安装后,该用户的远程登录将被禁用。对于配置同步或在其他节点上启动服务等任务,我们必须为该用户设置相同的密码。
1sudo passwd hacluster
步骤 4 – 配置 Pacemaker
接下来,我们将允许FirewallD中的集群流量,以便我们的主机进行通信。
首先,检查FirewallD是否正在运行。
1sudo firewall-cmd --state
如果它没有运行,开始它。
1sudo systemctl start firewalld.service
您需要在两个主机上执行此操作,一旦运行,请将高可用性
服务添加到 FirewallD。
1sudo firewall-cmd --permanent --add-service=high-availability
此更改后,您需要重新加载 FirewallD。
1sudo firewall-cmd --reload
如果您想了解更多关于FirewallD的信息,您可以阅读此 如何在CentOS 7上配置FirewallD的指南。
现在,我们的两个主机可以彼此交谈,我们可以通过在一个主机上运行这个命令来设置两个节点之间的身份验证(在我们的情况下,webnode01**)。
1sudo pcs cluster auth webnode01 webnode02
2Username: hacluster
你应该看到以下结果:
1[label Output]
2webnode01: Authorized
3webnode02: Authorized
接下来,我们将在同一个主机上生成并同步 Corosync 配置,在这里,我们将命名群集 webcluster,但您可以将其称为任何您想要的。
1sudo pcs cluster setup --name webcluster webnode01 webnode02
您将看到以下输出:
1[label Output]
2Shutting down pacemaker/corosync services...
3Redirecting to /bin/systemctl stop pacemaker.service
4Redirecting to /bin/systemctl stop corosync.service
5Killing any remaining services...
6Removing all cluster configuration files...
7webnode01: Succeeded
8webnode02: Succeeded
corosync 配置现在创建并分布在所有节点上. 配置存储在 /etc/corosync/corosync.conf
文件中。
步骤5 - 启动集群
集群可以通过在 webnode01 上运行以下命令来启动。
1sudo pcs cluster start --all
为了确保 Pacemaker 和 corosync 在启动时启动,我们必须在两个主机上启用服务。
1sudo systemctl enable corosync.service
2sudo systemctl enable pacemaker.service
现在我们可以通过在每个主机上运行以下命令来检查群集的状态。
1sudo pcs status
检查两个主机是否在输出中标记为在线。
1[label Output]
2. . .
3
4Online: [ webnode01 webnode02 ]
5
6Full list of resources:
7
8PCSD Status:
9 webnode01: Online
10 webnode02: Online
11
12Daemon Status:
13 corosync: active/enabled
14 pacemaker: active/enabled
15 pcsd: active/enabled
<$>[注] 注: 第一次安装后,可能需要一段时间才能将节点标记为在线。
步骤6 – 禁用 STONITH 和忽略定数
什么是Stonith?
您将在PC 状态
输出中看到一个警告,即没有配置 STONITH 设备,并且 STONITH 未禁用:
1[label Warning]
2. . .
3WARNING: no stonith devices and stonith-enabled is not false
4. . .
这意味着什么,为什么你应该关心?
当集群资源管理器无法确定节点或节点上的资源的状态时,使用 _fencing 将集群重新带到已知状态。
Resource level fencing 主要确保通过配置资源时不会发生数据损坏,例如,您可以使用资源级围栏(DRBD)在通信链接中断时将节点上的磁盘标记为过时。
节点级隔离确保节点不运行任何资源. 这样做是通过重置节点,其Pacemaker实现被称为STONITH(即在头部射击另一个节点
). Pacemaker支持各种隔离设备,例如无中断的电源供电或服务器管理界面卡。
由于节点级的围栏配置很大程度上取决于您的环境,我们将为本教程禁用。
1sudo pcs property set stonith-enabled=false
<$>[注] 注: 如果您打算在生产环境中使用 Pacemaker,则应根据您的环境规划一个STONITH实现,并保持其启用。
什么是量子?
当超过一半的节点在线时,集群具有 _quorum。 Pacemaker 的默认行为是停止所有资源,如果集群没有定数,但这在两个节点集群中没有意义;如果一个节点失败,集群将失去定数。
对于本教程,我们会告诉Pacemaker通过设置无定数政策
来忽略定数:
1sudo pcs property set no-quorum-policy=ignore
第7步:配置虚拟IP地址
从现在开始,我们将通过pcs
壳与群集进行交互,所以所有命令只需要在一个主机上执行;不管哪个命令。
Pacemaker 集群现在正在运行,我们可以添加第一个资源,即虚拟 IP 地址. 要做到这一点,我们将配置 ocf:heartbeat:IPaddr2
资源代理,但首先,让我们涵盖一些术语。
每个资源代理名称有三个或两个字段,这些字段由一个列分开:
*第一个字段是资源类,这是资源代理遵守的标准,它还告诉Pacemaker在哪里找到脚本。 IPaddr2
资源代理符合OCF(开放集群框架)标准。
*第二个字段取决于标准。
资源可以有 meta-attributes 和 instance attributes. Meta-attributes 不取决于资源类型; instance 属性是资源代理特定的. 该资源代理所需的唯一实例属性是 ip
(虚拟 IP 地址),但为了明确性,我们还会设置 cidr_netmask
(CIDR 标注中的子网)。
资源操作是集群可以在资源上执行的操作(例如启动、停止、监视)。它们以关键词op
表示。我们将以20秒的间隔添加监视
操作,以便集群每20秒检查资源是否仍然健康。
首先,我们将创建虚拟IP地址资源. 在这里,我们将使用‘127.0.0.2’作为我们的虚拟IP和 Cluster_VIP为资源的名称。
1sudo pcs resource create Cluster_VIP ocf:heartbeat:IPaddr2 ip=127.0.0.2 cidr_netmask=24 op monitor interval=20s
接下来,检查资源的状态。
1sudo pcs status
在输出中寻找以下行:
1[label Output]
2...
3Full list of resources:
4
5 Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
6...
虚拟 IP 地址在 webnode01 主机上是活跃的。
步骤 8 – 添加 Apache 资源
现在我们可以将第二个资源添加到集群中,这将是Apache服务,该服务的资源代理是ocf💓apache。
我们将命名资源WebServer
,并设置实例属性configfile
(Apache配置文件的位置)和statusurl
(Apache服务器状态页面的URL)。
1sudo pcs resource create WebServer ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://127.0.0.1/server-status" op monitor interval=20s
我们可以像以前一样查询资源的状态。
1sudo pcs status
您应该在 Webnode02 上运行的输出中看到 WebServer。
1[label Output]
2...
3Full list of resources:
4
5 Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
6 WebServer (ocf::heartbeat:apache): Started webnode02
7...
正如你所看到的,资源在不同的主机上运行,我们还没有告诉Pacemaker这些资源必须在同一个主机上运行,因此它们在各节点上均匀分布。
<$>[注]
注: 您可以通过运行sudo pcs 资源重新启动 WebServer
来重新启动 Apache 资源(例如,如果您更改了 Apache 配置)。
步骤 9 – 配置定位限制
在 Pacemaker 集群中,几乎所有的决定,例如选择一个资源应该运行的地方,都是通过比较分数来完成的。
我们可以用限制来操纵集群的决策,限制有分数,如果限制的分数低于无限,它只是一种建议,无限的分数意味着它是必须的。
我们希望确保两种资源都运行在同一个主机上,因此我们将定义具有无限分数的对接限制。
1sudo pcs constraint colocation add WebServer Cluster_VIP INFINITY
在这里,我们指定了Apache资源(WebServer
)必须在与虚拟IP(Cluster_VIP
)活跃相同的主机上运行,这也意味着如果Cluster_VIP
不活跃,则不允许在任何地方运行WebSite
。
也可以通过创建排序限制来定义资源应该运行的顺序,或者通过创建位置限制来优先选择某些资源的某些主机。
检查两个资源在同一个主机上运行。
1sudo pcs status
1[label Output]
2...
3Full list of resources:
4
5 Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
6 WebServer (ocf::heartbeat:apache): Started webnode01
7...
现在这两个资源都在webnode01上。
结论
您已设置了由虚拟 IP 地址访问的 Apache 两个节点活跃被动集群。您现在可以进一步配置 Apache,但请确保在所有主机之间同步配置。
如果你想在主机之间分发你的Web应用程序的文件,你可以设置一个DRBD卷,并与Pacemaker集成(https://drbd.linbit.com/users-guide/ch-pacemaker.html)。