如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置

介绍

本教程将演示如何使用带有保留 IP 的 Corosync 和 Pacemaker 在 DigitalOcean 上创建高可用性 (HA) 服务器基础架构。

Corosync 是一个开源程序,它向客户端服务器提供集群成员资格和消息传递功能,通常称为消息传递层。 Pacemaker 是一个开源集群资源管理器 (CRM),它是一个协调资源和服务的系统,这些资源和服务由集群管理并使其高度可用。从本质上讲,Corosync 使服务器能够作为集群进行通信,而 Pacemaker 则提供了控制集群行为方式的能力。

目标

完成后,HA 设置将包含两个主动/被动配置的 Ubuntu 14.04 服务器。这将通过将保留 IP(您的用户将如何访问您的 Web 服务)指向主(活动)服务器来完成,除非检测到故障。如果 Pacemaker 检测到主服务器不可用,辅助(被动)服务器将自动运行一个脚本,该脚本将通过 DigitalOcean API 将保留 IP 重新分配给自己。因此,到保留 IP 的后续网络流量将被定向到您的辅助服务器,该服务器将充当活动服务器并处理传入流量。

此图演示了所描述设置的概念:

注意:本教程仅涵盖在网关级别设置主动/被动高可用性。也就是说,它包括保留 IP 和负载平衡器 服务器——主要和次要服务器。此外,出于演示目的,我们不会在每台服务器上配置反向代理负载平衡器,而是简单地将它们配置为使用各自的主机名和公共 IP 地址进行响应。

为实现这一目标,我们将遵循以下步骤:

  • 创建 2 个将接收流量的 Droplet
  • 创建保留 IP 并将其分配给其中一个 Droplet
  • 安装和配置 Corosync
  • 安装和配置 Pacemaker
  • 配置保留 IP 重新分配集群资源
  • 测试故障转移
  • 配置Nginx集群资源

先决条件

为了自动重新分配保留 IP,我们必须使用 DigitalOcean API。这意味着您需要生成一个个人访问令牌 (PAT),这是一个 API 令牌,可用于对您的 DigitalOcean 帐户进行身份验证,具有读取和写入权限按照 API 教程的如何生成个人访问令牌部分进行操作。您的 PAT 将在脚本中使用,该脚本将添加到集群中的两个服务器,因此请务必将其保存在安全的地方——因为它允许对您的 DigitalOcean 帐户进行完全访问——以供参考。

除了 API 之外,本教程还利用了以下 DigitalOcean 功能:

  • 预留 IP
  • 元数据
  • 用户数据(云配置脚本)

如果您想了解更多信息,请阅读链接的教程。

创建液滴

第一步是在同一个数据中心创建两个启用专用网络的 Ubuntu Droplet,它们将充当上述的主服务器和辅助服务器。在我们的示例设置中,我们将它们命名为“primary”和“secondary”以便于参考。我们将在两个 Droplets 上安装 Nginx,并用唯一标识它们的信息替换它们的索引页面。这将使我们能够通过一种简单的方式来证明 HA 设置正在运行。对于真正的设置,您的服务器应该运行您选择的 Web 服务器或负载均衡器,例如 Nginx 或 HAProxy。

创建两个 Ubuntu 14.04 Droplet,主要的和次要的。如果您想遵循示例设置,请使用此 bash 脚本作为用户数据:

#!/bin/bash

apt-get -y update
apt-get -y install nginx
export HOSTNAME=$(curl -s http://169.254.169.254/metadata/v1/hostname)
export PUBLIC_IPV4=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet: $HOSTNAME, IP Address: $PUBLIC_IPV4 > /usr/share/nginx/html/index.html

此用户数据将安装 Nginx 并将 index.html 的内容替换为 droplet 的主机名和 IP 地址(通过引用元数据服务)。通过其公共 IP 地址访问任一 Droplet 将显示一个包含 Droplet 主机名和 IP 地址的基本网页,这将有助于测试保留 IP 在任何给定时刻指向哪个 Droplet。

创建保留 IP

在 DigitalOcean 控制面板中,单击顶部菜单中的网络,然后单击侧面菜单中的保留 IP。

为您的主要 Droplet 分配一个保留 IP,然后单击“分配保留 IP”按钮。

分配保留 IP 后,记下其 IP 地址。通过在 Web 浏览器中访问保留 IP 地址,检查您是否可以访问分配给它的 Droplet。

http://your_reserved_ip

您应该会看到主 Droplet 的索引页。

配置 DNS(可选)

如果您希望能够通过域名访问您的 HA 设置,请继续在您的 DNS 中创建一条 A 记录,将您的域指向您的保留 IP 地址。如果您的域正在使用 DigitalOcean 的名称服务器,请按照如何使用 DigitalOcean 教程设置主机名的第三步进行操作。传播后,您可以通过域名访问您的活动服务器。

我们将使用的示例域名是 example.com。如果您现在没有可使用的域名,您将使用保留的 IP 地址来访问您的设置。

配置时间同步

每当您有多个服务器相互通信时,尤其是使用集群软件时,确保它们的时钟同步是很重要的。我们将使用 NTP(网络时间协议)来同步我们的服务器。

在两台服务器上,使用此命令打开时区选择器:

  1. sudo dpkg-reconfigure tzdata

选择您想要的时区。例如,我们将选择 America/New_York。

接下来,更新 apt-get:

  1. sudo apt-get update

然后使用此命令安装 ntp 包;

  1. sudo apt-get -y install ntp

您的服务器时钟现在应该使用 NTP 同步。要了解有关 NTP 的更多信息,请查看本教程:配置时区和网络时间协议同步。

配置防火墙

Corosync 在端口 5404 和 5406 之间使用 UDP 传输。如果您正在运行防火墙,请确保服务器之间允许这些端口上的通信。

例如,如果您使用的是 iptables,则可以使用以下命令允许这些端口和 eth1(专用网络接口)上的流量:

  1. sudo iptables -A INPUT -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -o eth1 -p udp -m multiport --sports 5404,5405,5406 -m conntrack --ctstate ESTABLISHED -j ACCEPT

建议使用比提供的示例更严格的防火墙规则。

安装 Corosync 和 Pacemaker

在两台服务器上,使用 apt-get 安装 Corosync 和 Pacemaker:

  1. sudo apt-get install pacemaker

请注意,Corosync 是作为 Pacemaker 软件包的依赖项安装的。

Corosync 和 Pacemaker 现已安装,但需要先对其进行配置,然后才能执行任何有用的操作。

配置Corosync

必须配置 Corosync,以便我们的服务器可以作为集群进行通信。

创建集群授权密钥

为了允许节点加入集群,Corosync 要求每个节点都拥有相同的集群授权密钥。

在主服务器上,安装 haveged 包:

  1. sudo apt-get install haveged

该软件包使我们能够轻松增加服务器上的熵量,这是 corosync-keygen 脚本所需要的。

在主服务器上,运行 corosync-keygen 脚本:

  1. sudo corosync-keygen

这将生成一个 128 字节的集群授权密钥,并将其写入 /etc/corosync/authkey。

现在我们不再需要 haveged 包,让我们从主服务器中删除它:

  1. sudo apt-get remove --purge haveged
  2. sudo apt-get clean

在主服务器上,将 authkey 复制到辅助服务器:

  1. sudo scp /etc/corosync/authkey username@secondary_ip:/tmp

在辅助服务器上,将 authkey 文件移动到适当的位置,并将其权限限制为 root:

  1. sudo mv /tmp/authkey /etc/corosync
  2. sudo chown root: /etc/corosync/authkey
  3. sudo chmod 400 /etc/corosync/authkey

现在,两台服务器在 /etc/corosync/authkey 文件中应该有相同的授权密钥。

配置 Corosync 集群

为了让我们想要的集群启动并运行,我们必须设置这些

在两台服务器上,打开 corosync.conf 文件以在您喜欢的编辑器中进行编辑(我们将使用 vi):

  1. sudo vi /etc/corosync/corosync.conf

这是一个 Corosync 配置文件,它允许您的服务器作为集群进行通信。请务必将突出显示的部分替换为适当的值。 bindnetaddr 应设置为您当前正在使用的服务器的私有 IP 地址。另外两个突出显示的项目应设置为指定服务器的私有 IP 地址。除了 bindnetaddr 之外,两台服务器上的文件应该相同。

使用此配置替换 corosync.conf 的内容,并根据您的环境进行特定更改:

  1. totem {
  2. version: 2
  3. cluster_name: lbcluster
  4. transport: udpu
  5. interface {
  6. ringnumber: 0
  7. bindnetaddr: server_private_IP_address
  8. broadcast: yes
  9. mcastport: 5405
  10. }
  11. }
  12. quorum {
  13. provider: corosync_votequorum
  14. two_node: 1
  15. }
  16. nodelist {
  17. node {
  18. ring0_addr: primary_private_IP_address
  19. name: primary
  20. nodeid: 1
  21. }
  22. node {
  23. ring0_addr: secondary_private_IP_address
  24. name: secondary
  25. nodeid: 2
  26. }
  27. }
  28. logging {
  29. to_logfile: yes
  30. logfile: /var/log/corosync/corosync.log
  31. to_syslog: yes
  32. timestamp: on
  33. }

图腾部分(第 1-11 行)指的是 Corosync 用于集群成员身份的 Totem 协议,指定集群成员应如何相互通信。在我们的设置中,重要的设置包括 transport:udpu(指定单播模式)和 bindnetaddr(指定 Corosync 应该绑定到哪个网络地址)。

仲裁部分(第 13-16 行)指定这是一个双节点集群,因此仲裁只需要一个节点 (two_node: 1)。这是实现法定人数需要集群中至少三个节点这一事实的解决方法。此设置将允许我们的双节点集群选择一个协调器 (DC),它是在任何给定时间控制集群的节点。

节点列表部分(第 18-29 行)指定集群中的每个节点,以及如何到达每个节点。在这里,我们配置了主节点和辅助节点,并指定可以通过各自的私有 IP 地址访问它们。

日志记录部分(第 31-36 行)指定 Corosync 日志应写入 /var/log/corosync/corosync.log。如果您在本教程的其余部分遇到任何问题,请务必在进行故障排除时查看此处。

保存并退出。

接下来,我们需要配置 Corosync 以允许 Pacemaker 服务。

在两台服务器上,使用编辑器在 Corosync 服务目录中创建 pcmk 文件。我们将使用 vi:

  1. sudo vi /etc/corosync/service.d/pcmk

然后添加 Pacemaker 服务:

service {
  name: pacemaker
  ver: 1
}

保存并退出。这将包含在 Corosync 配置中,并允许 Pacemaker 使用 Corosync 与我们的服务器通信。

默认情况下,Corosync 服务处于禁用状态。在两台服务器上,通过编辑 /etc/default/corosync 来更改它:

  1. sudo vi /etc/default/corosync

将 START 的值更改为 yes:

START=yes

保存并退出。现在我们可以启动 Corosync 服务了。

在两台服务器上,使用以下命令启动 Corosync:

  1. sudo service corosync start

一旦 Corosync 在两台服务器上运行,它们应该集群在一起。我们可以通过运行以下命令来验证这一点:

  1. sudo corosync-cmapctl | grep members

输出应该看起来像这样,这表明主节点(节点 1)和辅助节点(节点 2)已加入集群:

corosync-cmapctl output:
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(primary_private_IP_address) runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.1.status (str) = joined runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(secondary_private_IP_address) runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.2.status (str) = joined

现在您已经正确设置了 Corosync,让我们继续配置 Pacemaker。

启动和配置 Pacemaker

Pacemaker 依赖于 Corosync 的消息传递功能,现在可以启动并配置其基本属性。

启用并启动起搏器

Pacemaker 服务需要运行 Corosync,因此默认情况下它是禁用的。

在两台服务器上,使用以下命令启用 Pacemaker 在系统启动时启动:

  1. sudo update-rc.d pacemaker defaults 20 01

通过前面的命令,我们将 Pacemaker 的启动优先级设置为 20。重要的是指定一个高于 Corosync 的启动优先级(默认情况下为 19),以便 Pacemaker 在 Corosync 之后启动。

现在让我们启动 Pacemaker:

  1. sudo service pacemaker start

要与 Pacemaker 交互,我们将使用 crm 实用程序。

使用 crm 检查 Pacemaker:

  1. sudo crm status

这应该输出如下内容(如果没有,请等待 30 秒,然后再次运行命令):

crm status:
Last updated: Fri Oct 16 14:38:36 2015 Last change: Fri Oct 16 14:36:01 2015 via crmd on primary Stack: corosync Current DC: primary (1) - partition with quorum Version: 1.1.10-42f2063 2 Nodes configured 0 Resources configured Online: [ primary secondary ]

关于此输出,有几点需要注意。首先,当前 DC(指定协调器)应设置为 primary (1) 或 secondary (2)。其次,应该配置 2 个节点和 0 个资源。第三,两个节点都应标记为在线。如果它们被标记为离线,请尝试等待 30 秒并再次检查状态以查看它是否自行更正。

从现在开始,您可能希望在另一个 SSH 窗口(连接到任一集群节点)中运行交互式 CRM 监视器。这将为您提供每个节点状态的实时更新,以及每个资源的运行位置:

  1. sudo crm_mon

此命令的输出看起来与 crm status 的输出相同,只是它连续运行。如果要退出,请按 Ctrl-C。

配置集群属性

现在我们准备配置 Pacemaker 的基本属性。请注意,所有 Pacemaker (crm) 命令都可以从任一节点服务器运行,因为它会自动同步所有成员节点中所有与集群相关的更改。

对于我们想要的设置,我们要禁用 STONITH——许多集群用来移除故障节点的一种模式——因为我们正在设置一个双节点集群。为此,请在任一服务器上运行此命令:

  1. sudo crm configure property stonith-enabled=false

我们还想在日志中禁用与仲裁相关的消息:

  1. sudo crm configure property no-quorum-policy=ignore

同样,此设置仅适用于 2 节点集群。

如果您想验证您的 Pacemaker 配置,请运行以下命令:

  1. sudo crm configure show

这将显示所有活动的起搏器设置。目前,这将仅包括两个节点,以及您刚刚设置的 STONITH 和 quorum 属性。

创建保留 IP 重新分配资源代理

现在 Pacemaker 正在运行和配置,我们需要添加资源以供其管理。正如介绍中提到的,资源是集群负责提供高可用性的服务。在 Pacemaker 中,添加资源需要使用资源代理,它充当将要管理的服务的接口。 Pacemaker 附带了几个用于公共服务的资源代理,并允许添加自定义资源代理。

在我们的设置中,我们希望确保我们的 Web 服务器(主要和辅助)提供的服务在主动/被动设置中高度可用,这意味着我们需要一种方法来确保我们的保留 IP 始终指向一个可用的服务器。为此,我们需要设置一个资源代理,每个节点都可以运行该资源代理来确定它是否拥有保留 IP,并在必要时运行脚本将保留 IP 指向自身。保留 IP 有时称为浮动 IP。在以下示例中,我们将资源代理称为“FloatIP OCF”,将保留 IP 重新分配脚本称为 assign-ip。安装 FloatIP OCF 资源代理后,我们可以定义资源本身,我们将其称为 FloatIP。

下载 assign-ip 脚本

正如我们刚才提到的,我们需要一个脚本来重新分配我们的保留 IP 指向哪个 Droplet,以防 FloatIP 资源需要移动到不同的节点。为此,我们将下载一个基本的 Python 脚本,该脚本使用 DigitalOcean API 将保留 IP 分配给给定的 Droplet ID。

在两台服务器上,下载 assign-ip Python 脚本:

  1. sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip

在两台服务器上,使其可执行:

  1. sudo chmod +x /usr/local/bin/assign-ip

使用 assign-ip 脚本需要以下详细信息:

  • 保留 IP:脚本的第一个参数,分配的保留 IP
  • Droplet ID:脚本的第二个参数,保留 IP 应分配给的 Droplet ID
  • DigitalOcean PAT(API 令牌):作为环境变量 DO_TOKEN 传入,您的读/写 DigitalOcean PAT

在继续之前,请随意查看脚本的内容。

所以,如果你想手动运行这个脚本来重新分配一个保留 IP,你可以这样运行它:DO_TOKEN=your_digitalocean_pat /usr/local/bin/assign-ip your_reserved_ip droplet_id。但是,如果需要将 FloatIP 资源移动到其他节点,将从 FloatIP OCF 资源代理调用此脚本。

接下来让我们安装 Float IP Resource Agent。

下载 FloatIP OCF 资源代理

Pacemaker 允许通过将 OCF 资源代理放置在特定目录中来添加它们。

在两台服务器上,使用以下命令创建 digitalocean 资源代理提供程序目录:

  1. sudo mkdir /usr/lib/ocf/resource.d/digitalocean

在两台服务器上,下载 FloatIP OCF 资源代理:

  1. sudo curl -o /usr/lib/ocf/resource.d/digitalocean/floatip https://gist.githubusercontent.com/thisismitch/b4c91438e56bfe6b7bfb/raw/2dffe2ae52ba2df575baae46338c155adbaef678/floatip-ocf

在两台服务器上,使其可执行:

  1. sudo chmod +x /usr/lib/ocf/resource.d/digitalocean/floatip

在继续之前,请随意查看资源代理的内容。这是一个 bash 脚本,如果使用 start 命令调用,它将查找调用它的节点的 Droplet ID(通过元数据),并将保留 IP 分配给 Droplet ID。此外,它通过返回调用 Droplet 是否分配了保留 IP 来响应 status 和 monitor 命令。

它需要以下 OCF 参数:

  • do_token:: 用于保留 IP 重新分配的 DigitalOcean API 令牌,即您的 DigitalOcean 个人访问令牌
  • reserved_ip:: 您的保留 IP(地址),以防需要重新分配

现在我们可以使用 FloatIP OCF 资源代理来定义我们的 FloatIP 资源。

添加 FloatIP 资源

安装 FloatIP OCF 资源代理后,我们现在可以配置我们的 FloatIP 资源。

在任一服务器上,使用此命令创建 FloatIP 资源(请务必使用您自己的信息指定两个突出显示的参数):

  1. sudo crm configure primitive FloatIP ocf:digitalocean:floatip \
  2. params do_token=your_digitalocean_personal_access_token \
  3. reserved_ip=your_reserved_ip

这将使用我们之前创建的 FloatIP OCF 资源代理 (ocf:digitalocean:floatip) 创建一个原始资源,它是一种通用类型的集群资源,称为“FloatIP”。请注意,它需要do_token 和 reserved_ip 作为参数传递。如果保留 IP 需要重新分配,将使用这些。

如果您检查集群的状态(sudo crm status 或 sudo crm_mon),您应该会看到 FloatIP 资源已定义并启动您的节点之一:

crm_mon:
... 2 Nodes configured 1 Resource configured Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary

假设一切设置正确,您现在应该有一个主动/被动 HA 设置!就目前而言,如果启动 FloatIP 的节点离线或进入 standby 模式,保留 IP 将被重新分配给在线服务器。现在,如果活动节点(在我们的示例输出中为主要节点)变得不可用,集群将指示辅助节点启动 FloatIP 资源并为自己申请保留 IP 地址。重新分配发生后,保留 IP 会将用户定向到新激活的辅助服务器。

目前,仅当活动主机脱机或无法与集群通信时才会触发故障转移(保留 IP 重新分配)。此设置的更好版本将指定应由 Pacemaker 管理的其他资源。这将允许集群检测特定服务的故障,例如负载平衡器或网络服务器软件。不过,在设置之前,我们应该确保基本的故障转移工作正常。

测试高可用性

测试我们的高可用性设置是否有效很重要,所以让我们现在开始吧。

目前,保留 IP 已分配给您的其中一个节点(假设是主节点)。现在通过 IP 地址或指向它的域名访问保留 IP,将只显示主服务器的索引页面。如果您使用示例用户数据脚本,它将如下所示:

Reserved IP is pointing to primary server:
Droplet: primary, IP Address: primary_ip_address

这表明保留 IP 实际上已分配给主要 Droplet。

现在,让我们打开一个新的本地终端并使用 curl 在 1 秒循环中访问保留 IP。使用此命令执行此操作,但请务必将 URL 替换为您的域或保留的 IP 地址:

  1. while true; do curl reserved_IP_address; sleep 1; done

目前,这将输出与主服务器相同的 Droplet 名称和 IP 地址。如果我们通过关闭主服务器电源或将主节点的集群状态更改为 standby 导致主服务器发生故障,我们将查看保留 IP 是否被重新分配给辅助服务器。

现在让我们重新启动主服务器。通过 DigitalOcean 控制面板或在主服务器上运行此命令来执行此操作:

  1. sudo reboot

片刻之后,主服务器应该变得不可用。注意终端中运行的 curl 循环的输出。您应该注意到如下所示的输出:

curl loop output:
Droplet: primary, IP Address: primary_IP_address ... curl: (7) Failed to connect to reserved_IP_address port 80: Connection refused Droplet: secondary, IP Address: secondary_IP_address ...

也就是说,应重新分配保留 IP 地址以指向辅助服务器的 IP 地址。这意味着您的 HA 设置正在运行,因为已成功进行自动故障转移。

您可能会看到也可能不会看到 Connection refused 错误,如果您在主服务器故障和保留 IP 重新分配完成之间尝试访问保留 IP,就会发生这种情况。

如果检查 Pacemaker 的状态,您应该会看到 FloatIP 资源已在辅助服务器上启动。此外,主服务器应暂时标记为 OFFLINE,但会在完成重启并重新加入集群后立即加入 Online 列表。

故障转移故障排除(可选)

如果您的 HA 设置按预期工作,请跳过此部分。如果故障转移没有按预期发生,您应该在继续之前检查您的设置。特别是,请确保对您自己的设置的任何引用,例如节点 IP 地址、您的保留 IP 和您的 API 令牌。

用于故障排除的有用命令

以下是一些可以帮助您对设置进行故障排除的命令。

如前所述,crm_mon 工具对于查看节点和资源的实时状态非常有帮助:

  1. sudo crm_mon

此外,您可以使用以下命令查看集群配置:

  1. sudo crm configure show

如果 crm 命令根本不起作用,您应该查看 Corosync 日志以获取线索:

  1. sudo tail -f /var/log/corosync/corosync.log

杂项 CRM 命令

这些命令在配置集群时很有用。

您可以使用以下命令将节点设置为 standby 模式,该模式可用于模拟节点变得不可用:

  1. sudo crm node standby NodeName

您可以使用以下命令将节点的状态从 standby 更改为 online:

  1. sudo crm node online NodeName

您可以使用以下命令编辑资源,从而允许您重新配置它:

sudo crm configure edit ResourceName

您可以使用以下命令删除必须在删除之前停止的资源:

  1. sudo crm resource stop ResourceName
  2. sudo crm configure delete ResourceName

最后,crm 命令可以单独运行以访问交互式 crm 提示:

  1. crm

我们不会介绍交互式 crm 提示符的用法,但它可用于执行到目前为止我们已完成的所有 crm 配置。

添加 Nginx 资源(可选)

现在您确定您的保留 IP 故障转移有效,让我们看看向您的集群添加新资源。在我们的示例设置中,Nginx 是我们提供高可用性的主要服务,因此让我们将其添加为集群将管理的资源。

Pacemaker自带Nginx资源代理,所以我们可以很方便的将Nginx添加为集群资源。

使用此命令创建一个名为“Nginx”的新原始集群资源:

  1. sudo crm configure primitive Nginx ocf:heartbeat:nginx \
  2. params httpd="/usr/sbin/nginx" \
  3. op start timeout="40s" interval="0" \
  4. op monitor timeout="30s" interval="10s" on-fail="restart" \
  5. op stop timeout="60s" interval="0"

指定的资源告诉集群每 10 秒监视一次 Nginx,并在它变得不可用时重新启动它。

使用 sudo crm_mon 或 sudo crm status 检查集群资源的状态:

crm_mon:
... Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary Nginx (ocf::heartbeat:nginx): Started secondary

不幸的是,Pacemaker 将决定在单独的节点上启动 Nginx 和 FloatIP 资源,因为我们没有定义任何资源限制。这是一个问题,因为这意味着保留 IP 将指向一个 Droplet,而 Nginx 服务将仅在另一个 Droplet 上运行。访问保留 IP 会将您指向未运行本应具有高可用性的服务的服务器。

为了解决这个问题,我们将创建一个克隆资源,它指定一个现有的原始资源应该在多个节点上启动。

使用以下命令创建名为 \Nginx-clone 的 Nginx 资源的克隆资源:

  1. sudo crm configure clone Nginx-clone Nginx

集群状态现在应该如下所示:

crm_mon:
Online: [ primary secondary ] FloatIP (ocf::digitalocean:floatip): Started primary Clone Set: Nginx-clone [Nginx] Started: [ primary secondary ]

如您所见,克隆资源 Nginx-clone 现在已在我们的两个节点上启动。

最后一步是配置托管限制,以指定 FloatIP 资源应在具有活动 Nginx-clone 资源的节点上运行。要创建名为“FloatIP-Nginx”的托管限制,请使用以下命令:

  1. sudo crm configure colocation FloatIP-Nginx inf: FloatIP Nginx-clone

您不会在 crm status 输出中看到任何差异,但您可以看到托管资源是使用以下命令创建的:

  1. sudo crm configure show

现在,您的两台服务器都应该运行 Nginx,而只有其中一台运行 FloatIP 资源。现在是通过停止 Nginx 服务并重新启动或关闭活动服务器来测试 HA 设置的好时机。

结论

恭喜!您现在已经使用 Corosync、Pacemaker 和 DigitalOcean 保留 IP 设置了基本的 HA 服务器设置。

下一步是用反向代理负载平衡器替换示例 Nginx 设置。为此,您可以使用 Nginx 或 HAProxy。请记住,您需要将负载均衡器绑定到锚定 IP 地址,以便您的用户只能通过保留 IP 地址(而不是通过每个服务器的公共 IP 地址)访问您的服务器。如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性 HAProxy 设置教程中详细介绍了此过程。

©2015-2025 艾丽卡 support@alaica.com