如何建立一个Apache主动 - 被动集群中使用Pacemaker在CentOS 7

介绍

高可用性是当今的一个重要主题,因为服务中断可能非常昂贵。 谨慎地采取措施,保​​持您的网站或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

将以下条目添加到文件的末尾。

/ 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访问状态页,但不允许从任何其他主机访问。

/etc/httpd/conf.d/status.conf
<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整合

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏