介绍
高可用性是当今的一个重要主题,因为服务中断可能非常昂贵。 谨慎地采取措施,保持您的网站或Web应用程序运行,以防中断。 使用Pacemaker,您可以配置高可用性集群。
Pacemaker是一个群集资源管理器 。 它管理所有群集服务( 资源 ),并使用底层集群引擎的消息和成员的能力。 我们将使用Corosync作为我们的集群引擎。 资源有一个资源代理 ,它是一个外部程序,抽象的服务。
在主动 - 被动群集中,所有服务在主系统上运行。 如果主系统发生故障,则所有服务都将移动到备份系统。 主动 - 被动群集使得可以不中断地进行维护工作。
在本教程中,您将了解如何构建高可用性Apache主动 - 被动群集。 Web集群将通过其虚拟IP地址进行寻址,并且如果节点发生故障,将自动故障转移。
您的用户将通过由Pacemaker管理的虚拟IP地址访问您的Web应用程序。 Apache服务和虚拟IP始终位于同一主机上。 当此主机失败时,它们将迁移到第二个主机,您的用户将不会注意到中断。
先决条件
开始使用本教程之前,您需要具备以下条件:
两个CentOS 7 Droplets,这将是集群节点。 我们将把这些为webnode01(IP地址:
your_first_server_ip
)和webnode02(IP地址:your_second_server_ip
)。两个服务器上的用户都具有root权限。 您可以通过以下这个设置这在CentOS 7初始服务器设置教程。
您必须在两个服务器上运行一些命令,并且只有一个命令。
第1步 - 配置名称解析
首先,我们需要确保两个主机都可以解析两个群集节点的主机名。 为了实现这个目标,我们将条目添加到/etc/hosts
的文件。 在webnode01和webnode02上执行此步骤。
打开/etc/hosts
使用nano
或你喜欢的文本编辑器。
sudo nano /etc/hosts
将以下条目添加到文件的末尾。
your_first_server_ip webnode01.example.com webnode01
your_second_server_ip webnode02.example.com webnode02
保存并关闭文件。
第2步 - 安装Apache
在本节中,我们将安装Apache Web服务器。 您必须在两台主机上完成此步骤。
首先,安装Apache。
sudo yum install httpd
Apache资源代理使用Apache服务器状态页面来检查Apache服务的运行状况。 你必须创建文件激活状态页/etc/httpd/conf.d/status.conf
。
sudo nano /etc/httpd/conf.d/status.conf
将以下指令粘贴到此文件中。 这些指令允许从localhost访问状态页,但不允许从任何其他主机访问。
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>
保存并关闭文件。
第3步 - 安装Pacemaker
现在我们将安装Pacemaker。 您必须在两台主机上完成此步骤。
安装Pacemaker和pcs群集外壳。 我们稍后将使用后者配置集群。
sudo yum install pacemaker pcs
现在我们必须启动pcs守护程序,它用于在节点之间同步Corosync配置。
sudo systemctl start pcsd.service
为了让守护进程在每次重新启动后启动,我们也将启用服务。
sudo systemctl enable pcsd.service
您已经安装了这些程序包后,会出现系统上的新用户名为hacluster。 安装后,将禁用此用户的远程登录。 对于同步配置或在其他节点上启动服务等任务,我们必须为此用户设置相同的密码。
sudo passwd hacluster
第4步 - 配置Pacemaker
接下来,我们将允许FirewallD中的群集流量允许我们的主机通信。
首先,检查FirewallD是否正在运行。
sudo firewall-cmd --state
如果没有运行,请启动它。
sudo systemctl start firewalld.service
你需要在两台主机上都这样做。 一旦它的运行,加上high-availability
的服务FirewallD。
sudo firewall-cmd --permanent --add-service=high-availability
此更改后,您需要重新加载FirewallD。
sudo firewall-cmd --reload
如果您想了解更多关于FirewallD,你可以阅读本指南,了解有关如何在CentOS 7配置FirewallD 。
现在,我们的两台主机可以互相沟通,我们可以通过一台主机(在本例中,webnode01)上运行此命令建立两个节点之间的认证。
sudo pcs cluster auth webnode01 webnode02
Username: hacluster
您应该看到以下输出:
webnode01: Authorized
webnode02: Authorized
接下来,我们将在同一主机上生成和同步Corosync配置。 在这里,我们将其命名集群集群网站 ,但你可以叫它任何你喜欢的。
sudo pcs cluster setup --name webcluster webnode01 webnode02
您将看到以下输出:
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
webnode01: Succeeded
webnode02: Succeeded
corosync配置现在已创建并分布在所有节点上。 所述配置存储在该文件/etc/corosync/corosync.conf
。
第5步 - 启动集群
可以通过在webnode01上运行以下命令来启动集群。
sudo pcs cluster start --all
为了确保Pacemaker和corosync在启动时启动,我们必须在两个主机上启用服务。
sudo systemctl enable corosync.service
sudo systemctl enable pacemaker.service
我们现在可以通过在任一主机上运行以下命令来检查群集的状态。
sudo pcs status
检查两个主机在输出中是否标记为联机。
. . .
Online: [ webnode01 webnode02 ]
Full list of resources:
PCSD Status:
webnode01: Online
webnode02: Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
注意:第一个设置完成后,它可以采取节点被标记为联机之前一些时间。
第6步 - 禁用STONITH和忽略Quorum
什么是STONITH?
你会看到在输出的警告pcs status
,没有STONITH设备配置和STONITH没有被禁用:
. . .
WARNING: no stonith devices and stonith-enabled is not false
. . .
这是什么意思,你为什么要关心?
当集群资源管理器不能确定一个节点或一个节点上的资源的状态, 围栏用于使群集到一个已知的状态一次。
资源级别屏障主要是确保有通过配置资源在停电的情况下,不会有数据损坏。 您可以使用资源级别防护(例如,使用DRBD(分布式复制块设备))在通信链路断开时将节点上的磁盘标记为过时。
节点级别屏障确保节点不会运行任何资源。 这是通过重置节点来完成的,它的Pacemaker实现被称为STONITH(其代表“拍摄头中的其他节点”)。 Pacemaker支持各种各样的防护设备,例如不间断电源或服务器的管理接口卡。
因为节点级防护配置严重依赖于您的环境,所以我们将在本教程中禁用它。
sudo pcs property set stonith-enabled=false
注意:如果您计划在生产环境中使用Pacemaker,你应该计划实施STONITH根据您的环境,并保持它启用。
什么是Quorum?
一个集群中有仲裁时多节点的一半是在网上。 如果集群没有仲裁,Pacemaker的默认行为是停止所有资源。 然而,这在双节点集群中没有意义; 如果一个节点发生故障,集群将丢失仲裁。
在本教程中,我们会告诉Pacemaker通过设置忽略法定人数no-quorum-policy
:
sudo pcs property set no-quorum-policy=ignore
第7步 - 配置虚拟IP地址
从现在开始,我们将通过集群交互pcs
外壳,让所有命令只需要一台主机上执行; 无论哪一个。
Pacemaker群集现在已启动并正在运行,我们可以向其添加第一个资源,即虚拟IP地址。 要做到这一点,我们将配置ocf:heartbeat:IPaddr2
资源代理,但首先,让我们了解一些术语。
每个资源代理名称都有三个或两个字段,用冒号分隔:
第一个字段是资源类,它是资源代理遵循的标准。 它还告诉Pacemaker在哪里可以找到脚本。 该
IPaddr2
资源代理符合OCF(开放式集群架构)标准。第二个字段取决于标准。 OCF资源使用OCF命名空间的第二个字段。
第三个字段是资源代理的名称。
资源可以有元属性和实例属性 。 元属性不依赖于资源类型; 实例属性是资源代理特定的。 该资源代理的唯一必需的实例属性是ip
(虚拟IP地址),但明确性起见,我们还将设置cidr_netmask
(CIDR表示法的子网掩码)。
资源操作动作集群可以对资源执行(如启动,停止,监视)。 它们由关键字指示op
。 我们将添加monitor
,使集群检查每20秒如果资源仍然是健康的20秒的间隔操作。 什么是健康取决于资源代理。
首先,我们将创建虚拟IP地址资源。 在这里,我们将使用127.0.0.2
作为我们的虚拟IP和Cluster_VIP的资源的名称。
sudo pcs resource create Cluster_VIP ocf:heartbeat:IPaddr2 ip=127.0.0.2 cidr_netmask=24 op monitor interval=20s
然后,检查资源的状态。
sudo pcs status
在输出中查找以下行:
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
...
虚拟IP地址在主机webnode01上处于活动状态。
第8步 - 添加Apache资源
现在我们可以将第二个资源添加到集群,这将是Apache服务。 该服务的资源代理ocf:heartbeat:apache
。
我们将命名资源WebServer
,并设置实例属性configfile
(Apache的配置文件的位置),并statusurl
(Apache服务器状态页的URL)。 我们将再次选择20秒的监视间隔。
sudo 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
我们可以像以前一样查询资源的状态。
sudo pcs status
您应该看到在webnode02运行输出网络服务器 。
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
WebServer (ocf::heartbeat:apache): Started webnode02
...
如您所见,资源在不同的主机上运行。 我们还没有告诉Pacemaker这些资源必须在同一台主机上运行,因此它们均匀分布在节点上。
注意:您可以通过运行重新启动Apache资源sudo pcs resource restart WebServer
(如果你改变了Apache的配置如)。 请务必不要使用systemctl
管理Apache服务。
第9步 - 配置共置约束
Pacemaker集群中的几乎每个决策,比如选择资源应该在哪里运行,都是通过比较分数完成的。 每个资源计算得分,集群资源管理器选择具有特定资源的最高分数的节点。 (如果节点对资源具有负得分,则该资源不能在该节点上运行。)
我们可以用约束来操纵集群的决定。 约束有一个分数。 如果约束的分数低于INFINITY,它只是一个建议。 INFINITY的分数意味着它是必须的。
我们希望确保两个资源在同一主机上运行,因此我们将定义一个具有INFINITY分数的共置约束。
sudo pcs constraint colocation add WebServer Cluster_VIP INFINITY
约束定义中资源的顺序很重要。 在这里,我们指定了Apache资源( WebServer
)必须在同一主机上的虚拟IP(运行Cluster_VIP
)是活动的。 这也意味着, WebSite
是不允许在任何地方运行,如果Cluster_VIP
不活跃。
还可以通过创建排序约束来定义资源应以哪种顺序运行,或者通过创建位置约束来定义某些资源的某些主机。
验证两个资源是否在同一主机上运行。
sudo pcs status
...
Full list of resources:
Cluster_VIP (ocf::heartbeat:IPaddr2): Started webnode01
WebServer (ocf::heartbeat:apache): Started webnode01
...
这两个资源现在都在webnode01上。
结论
您已设置可通过虚拟IP地址访问的Apache双节点主动 - 被动群集。 您现在可以进一步配置Apache,但确保在主机之间同步配置。 你可以写这个自定义脚本(如使用rsync
),也可以使用类似csync2 。
如果你想在主机中的Web应用程序的文件分发,您可以设置DRBD体积, 其与Pacemaker整合 。