如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性设置
介绍 本教程将演示如何使用带有保留 IP 的 Corosync 和 Pacemaker 在 DigitalOcean 上创建高可用性 (HA) 服务器基础架构。 Corosync 是一个开源程序,它向客户端服务器提供集群成员资格和消息传递功能,通常称为 messaging 层。 Pacemaker 是一个开源集群资源管理器 (CRM),它是一个协调由集群管理并高度可用的资源和服务的系统。本质上,C
介绍
本教程将演示如何使用带有保留 IP 的 Corosync 和 Pacemaker 在 DigitalOcean 上创建高可用性 (HA) 服务器基础架构。
Corosync 是一个开源程序,它向客户端服务器提供集群成员资格和消息传递功能,通常称为 messaging 层。 Pacemaker 是一个开源集群资源管理器 (CRM),它是一个协调由集群管理并高度可用的资源和服务的系统。本质上,Corosync 使服务器能够作为集群进行通信,而 Pacemaker 提供了控制集群行为方式的能力。
目标
完成后,HA 设置将由两台 Ubuntu 14.04 服务器组成,采用主动/被动配置。这将通过指向保留 IP 来完成,这是您的用户将如何访问您的 Web 服务的方式,以指向主(活动)服务器,除非检测到故障。如果 Pacemaker 检测到主服务器不可用,辅助(被动)服务器将自动运行脚本,该脚本将通过 DigitalOcean API 将保留 IP 重新分配给自身。因此,到保留 IP 的后续网络流量将被定向到您的辅助服务器,该服务器将充当活动服务器并处理传入流量。
此图演示了所描述设置的概念:
注意: 本教程仅介绍在网关级别设置主动/被动高可用性。也就是说,它包括保留 IP 和 load balancer 服务器 - 主要和次要。此外,出于演示目的,我们不会在每台服务器上配置反向代理负载均衡器,而是将它们简单地配置为使用各自的主机名和公共 IP 地址进行响应。
为了实现这一目标,我们将遵循以下步骤:
-
创建 2 个将接收流量的 Droplet
-
创建保留 IP 并将其分配给其中一个液滴
-
安装和配置 Corosync
-
安装和配置 Pacemaker
-
配置保留 IP 重新分配集群资源
-
测试故障转移
-
配置 Nginx 集群资源
先决条件
为了自动重新分配预留 IP,我们必须使用 DigitalOcean API。这意味着您需要生成一个个人访问令牌 (PAT),这是一个 API 令牌,可用于对您的 DigitalOcean 帐户进行身份验证,并按照 如何生成个人访问令牌 进行_read_ 和_write_ 访问://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2#how-to-generate-a-personal-access-token)部分的 API 教程。您的 PAT 将在脚本中使用,该脚本将添加到集群中的两台服务器,因此请务必将其保存在安全的地方——因为它允许完全访问您的 DigitalOcean 帐户——以供参考。
除了 API,本教程还利用了以下 DigitalOcean 功能:
-
保留 IP
-
元数据
-
用户数据(云配置脚本)
如果您想了解更多关于它们的信息,请阅读链接的教程。
创建液滴
第一步是在同一个数据中心创建两个启用了专用网络的 Ubuntu Droplet,它们将充当上述的主服务器和辅助服务器。在我们的示例设置中,我们将它们命名为“主要”和“次要”以方便参考。我们将在两个 Droplet 上安装 Nginx,并用唯一标识它们的信息替换它们的索引页面。这将使我们能够以一种简单的方式来证明 HA 设置正在运行。对于实际设置,您的服务器应该运行您选择的 Web 服务器或负载均衡器,例如 Nginx 或 HAProxy。
创建两个 Ubuntu 14.04 Droplet,primary 和 secondary。如果您想遵循示例设置,请使用此 bash 脚本作为用户数据:
示例用户数据
#!/bin/bash
apt-get -y 更新
apt-get -y 安装 nginx
导出主机名u003d$(curl -s http://169.254.169.254/metadata/v1/hostname)
出口 PUBLIC_IPV4u003d$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address)
echo Droplet:$HOSTNAME,IP 地址:$PUBLIC_IPV4 > /usr/share/nginx/html/index.html
此用户数据将安装 Nginx 并将 index.html
的内容替换为 droplet 的主机名和 IP 地址(通过引用元数据服务)。通过其公共 IP 地址访问任一 Droplet 将显示一个带有 Droplet 主机名和 IP 地址的基本网页,这对于在任何给定时刻测试保留 IP 指向哪个 Droplet 很有用。
创建保留 IP
在 DigitalOcean 控制面板中,单击顶部菜单中的 Networking,然后单击侧面菜单中的 Reserved IPs。
为您的 primary Droplet 分配保留 IP,然后单击 Assign Reserved IP 按钮。
分配保留 IP 后,记下其 IP 地址。通过访问 Web 浏览器中的保留 IP 地址,检查您是否可以访问分配给它的 Droplet。
http://your_reserved_ip
你应该看到你的主要 Droplet 的索引页。
配置DNS(可选)
如果您希望能够通过域名访问您的 HA 设置,请继续在您的 DNS 中创建一个 A 记录,将您的域指向您的预留 IP 地址。如果您的域使用 DigitalOcean 的域名服务器,请按照 [步骤三](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean#step-three% E2%80%94configure-your-domain) 如何使用 DigitalOcean 设置主机名教程。一旦传播,您就可以通过域名访问您的活动服务器。
我们将使用的示例域名是“example.com”。如果您现在没有要使用的域名,您将使用保留的 IP 地址来访问您的设置。
配置时间同步
每当您有多个服务器相互通信时,尤其是使用集群软件时,确保它们的时钟同步很重要。我们将使用 NTP(网络时间协议)来同步我们的服务器。
在两台服务器上,使用此命令打开时区选择器:
sudo dpkg-重新配置 tzdata
选择您想要的时区。例如,我们将选择“America/New_York”。
接下来,更新 apt-get:
sudo apt-get 更新
然后使用此命令安装 ntp
包;
sudo apt-get -y 安装 ntp
您的服务器时钟现在应该使用 NTP 同步。要了解有关 NTP 的更多信息,请查看本教程:[配置时区和网络时间协议同步](https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04 -servers#configure-timezones-and-network-time-protocol-synchronization)。
配置防火墙
Corosync 在端口“5404”和“5406”之间使用 UDP 传输。如果您正在运行防火墙,请确保服务器之间允许在这些端口上进行通信。
例如,如果您使用 iptables
,则可以使用以下命令允许这些端口和 eth1
(专用网络接口)上的流量:
sudo iptables -A INPUT -i eth1 -p udp -m multiport --dports 5404,5405,5406 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
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:
sudo apt-get 安装起搏器
请注意,Corosync 是作为 Pacemaker 包的依赖项安装的。
Corosync 和 Pacemaker 现在已安装,但需要对其进行配置,然后才能执行任何有用的操作。
配置 Corosync
必须配置 Corosync,以便我们的服务器可以作为集群进行通信。
创建集群授权密钥
为了允许节点加入集群,Corosync 要求每个节点拥有相同的集群授权密钥。
在 primary 服务器上,安装 haveged
包:
sudo apt-get install haveged
这个软件包允许我们轻松地增加我们服务器上的熵,这是 corosync-keygen
脚本所需要的。
在 primary 服务器上,运行 corosync-keygen
脚本:
sudo corosync-keygen
这将生成一个 128 字节的集群授权密钥,并将其写入/etc/corosync/authkey
。
现在我们不再需要 haveged
包,让我们从 primary 服务器中删除它:
sudo apt-get remove --purge haveged
sudo apt-get clean
在 primary 服务器上,将 authkey
复制到辅助服务器:
sudo scp /etc/corosync/authkey 用户名@secondary_ip:/tmp
在 secondary 服务器上,将 authkey
文件移动到适当的位置,并将其权限限制为 root:
sudo mv /tmp/authkey /etc/corosync
sudo chown root: /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey
现在两台服务器在 /etc/corosync/authkey
文件中应该有相同的授权密钥。
配置 Corosync 集群
为了让我们想要的集群启动并运行,我们必须设置这些
在两台服务器上,打开 corosync.conf
文件以在您喜欢的编辑器中进行编辑(我们将使用 vi
):
sudo 你 /etc/corosync/corosync.conf
这是一个 Corosync 配置文件,它将允许您的服务器作为集群进行通信。请务必使用适当的值替换突出显示的部分。 bindnetaddr
应该设置为您当前正在使用的服务器的私有 IP 地址。另外两个突出显示的项目应设置为指定服务器的私有 IP 地址。除了 bindnetaddr
之外,两个服务器上的文件应该相同。
使用此配置替换 corosync.conf
的内容,并使用特定于您的环境的更改:
/etc/corosync/corosync.conf
图腾{
版本:2
集群名称:lbcluster
交通:udpu
界面 {
响铃号码:0
bindnetaddr:server_private_IP_address
广播:是
麦卡斯特港:5405
}
}
法定人数{
提供者:corosync_votequorum
两个节点:1
}
节点列表 {
节点{
ring0_addr:primary_private_IP_address
名称:初级
计数器:1
}
节点{
ring0_addr:secondary_private_IP_address
名称:二级
计数器:一个
}
}
记录{
to_logfile:是的
日志文件:/var/log/corosync/corosync.log
to_syslog:是的
时间戳:开
}
totem 部分(第 1-11 行)引用 Corosync 用于集群成员资格的 Totem 协议,指定集群成员应如何相互通信。在我们的设置中,重要的设置包括 transport: udpu
(指定单播模式)和 bindnetaddr
(指定 Corosync 应该绑定到的网络地址)。
quorum 部分(第 13-16 行)指定这是一个双节点集群,因此仲裁只需要一个节点(two_node: 1
)。这是实现仲裁需要集群中至少三个节点这一事实的解决方法。此设置将允许我们的两节点集群选择一个协调器 (DC),它是在任何给定时间控制集群的节点。
nodelist 部分(第 18-29 行)指定集群中的每个节点,以及如何访问每个节点。在这里,我们配置我们的主节点和辅助节点,并指定可以通过各自的私有 IP 地址访问它们。
logging 部分(第 31-36 行)指定 Corosync 日志应写入 /var/log/corosync/corosync.log
。如果您在本教程的其余部分遇到任何问题,请务必在进行故障排除时查看此处。
保存并退出。
接下来,我们需要配置 Corosync 以允许 Pacemaker 服务。
在两台服务器上,使用编辑器在 Corosync 服务目录中创建 pcmk
文件。我们将使用vi
:
sudo 你 /etc/corosync/service.d/pcmk
然后添加 Pacemaker 服务:
服务 {
名称:起搏器
版本:1
}
保存并退出。这将包含在 Corosync 配置中,并允许 Pacemaker 使用 Corosync 与我们的服务器通信。
默认情况下,Corosync 服务处于禁用状态。在两台服务器上,通过编辑 /etc/default/corosync
进行更改:
sudo vi /etc/default/corosync
将 START
的值更改为 yes
:
/etc/default/corosync
开始u003d是
保存并退出。现在我们可以启动 Corosync 服务了。
在两个服务器上,使用以下命令启动 Corosync:
sudo 服务 corosync 启动
一旦 Corosync 在两台服务器上运行,它们就应该集群在一起。我们可以通过运行以下命令来验证这一点:
sudo corosync-cmapctl | grep 成员
输出应如下所示,这表明主节点(节点 1)和辅助节点(节点 2)已加入集群:
corosync-cmapctl 输出:runtime.totem.pg.mrp.srp.members.1.config_version (u64) u003d 0
runtime.totem.pg.mrp.srp.members.1.ip (str) u003d r(0) ip(primary_private_IP_address)
runtime.totem.pg.mrp.srp.members.1.join_count (u32) u003d 1
runtime.totem.pg.mrp.srp.members.1.status (str) u003d 加入
runtime.totem.pg.mrp.srp.members.2.config_version (u64) u003d 0
runtime.totem.pg.mrp.srp.members.2.ip (str) u003d r(0) ip(secondary_private_IP_address)
runtime.totem.pg.mrp.srp.members.2.join_count (u32) u003d 1
runtime.totem.pg.mrp.srp.members.2.status (str) u003d 加入
现在您已经正确设置了 Corosync,让我们继续配置 Pacemaker。
启动和配置 Pacemaker
Pacemaker 依赖于 Corosync 的消息传递功能,现在可以启动并配置其基本属性。
启用和启动起搏器
Pacemaker 服务需要 Corosync 运行,因此默认禁用。
在两台服务器上,使用以下命令启用 Pacemaker 在系统引导时启动:
sudo update-rc.d 起搏器默认值 20 01
使用之前的命令,我们将 Pacemaker 的启动优先级设置为“20”。指定高于 Corosync 的启动优先级(默认为“19”)非常重要,这样 Pacemaker 在 Corosync 之后启动。
现在让我们启动 Pacemaker:
sudo 服务起搏器启动
要与 Pacemaker 交互,我们将使用“crm”实用程序。
使用 crm
检查 Pacemaker:
须藤CRM状态
这应该输出类似这样的内容(如果没有,请等待 30 秒,然后再次运行该命令):
crm 状态:最后更新时间:2015 年 10 月 16 日星期五 14:38:36
最后更改:2015 年 10 月 16 日星期五 14:36:01,通过 crmd on primary
堆栈:corosync
当前 DC:主要 (1) - 具有仲裁的分区
版本:1.1.10-42f2063
2 个节点配置
0 资源配置
在线:[小学中学]
关于这个输出有几点需要注意。首先,当前 DC(指定协调员)应设置为“主要 (1)”或“次要 (2)”。其次,应该配置2个节点和0个资源配置。第三,两个节点都应标记为在线。如果它们被标记为 offline,请尝试等待 30 秒并再次检查状态以查看它是否自行更正。
从此时起,您可能希望在另一个 SSH 窗口(连接到任一集群节点)中运行交互式 CRM 监视器。这将为您提供每个节点状态的实时更新,以及每个资源的运行位置:
须藤 crm_mon
此命令的输出看起来与 crm status
的输出相同,只是它连续运行。如果要退出,请按“Ctrl-C”。
配置集群属性
现在我们准备好配置 Pacemaker 的基本属性。请注意,所有 Pacemaker (crm
) 命令都可以从任一节点服务器运行,因为它会自动同步所有成员节点之间的所有集群相关更改。
对于我们想要的设置,我们想要禁用 STONITH(许多集群用来移除故障节点的模式),因为我们正在设置一个双节点集群。为此,请在任一服务器上运行此命令:
sudo crm 配置属性 stonith-enabledu003dfalse
我们还希望在日志中禁用与仲裁相关的消息:
sudo crm 配置属性 no-quorum-policyu003dignore
同样,此设置仅适用于 2 节点集群。
如果要验证 Pacemaker 配置,请运行以下命令:
sudo crm 配置显示
这将显示所有活动的 Pacemaker 设置。目前,这将只包括两个节点,以及您刚刚设置的 STONITH 和 quorum 属性。
创建保留的 IP 重新分配资源代理
现在 Pacemaker 正在运行和配置,我们需要添加资源以对其进行管理。正如介绍中提到的,资源是集群负责提供高可用性的服务。在 Pacemaker 中,添加资源需要使用资源代理,它充当将要管理的服务的接口。 Pacemaker 附带了几个用于公共服务的资源代理,并允许添加自定义资源代理。
在我们的设置中,我们希望确保我们的网络服务器 primary 和 secondary 提供的服务在主动/被动设置中具有高可用性,这意味着我们需要一种方法来确保我们的保留 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 脚本:
sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip
在两台服务器上,使其可执行:
sudo chmod +x /usr/local/bin/assign-ip
使用 assign-ip
脚本需要以下详细信息:
-
保留 IP: 脚本的第一个参数,即分配的保留 IP
-
**Droplet ID:**脚本的第二个参数,保留 IP 应分配给的 Droplet ID
-
DigitalOcean PAT (API token): 作为环境变量
DO_TOKEN
传入,你的读/写 DigitalOcean PAT
在继续之前,请随意查看脚本的内容。
因此,如果您想手动运行此脚本以重新分配保留 IP,您可以像这样运行它:DO_TOKENu003dyour_digitalocean_pat /usr/local/bin/assign-ip your_reserved_ip droplet_id
。但是,如果需要将“FloatIP”资源移动到不同的节点,则将从 FloatIP OCF 资源代理调用此脚本。
接下来让我们安装 Float IP 资源代理。
下载 FloatIP OCF 资源代理
Pacemaker 允许通过将 OCF 资源代理放置在特定目录中来添加它们。
在两台服务器上,使用以下命令创建 digitalocean
资源代理提供程序目录:
sudo mkdir /usr/lib/ocf/resource.d/digitalocean
在两台服务器上,下载 FloatIP OCF 资源代理:
sudo curl -o /usr/lib/ocf/resource.d/digitalocean/floatip https://gist.githubusercontent.com/thisismitch/b4c91438e56bfe6b7bfb/raw/2dffe2ae52ba2df575baae46338c155adbaef678/floatip-ocf
在两台服务器上,使其可执行:
sudo chmod +x /usr/lib/ocf/resource.d/digitalocean/floatip
在继续之前,请随意查看资源代理的内容。这是一个 bash 脚本,如果使用 start
命令调用,它将查找调用它的节点的 Droplet ID(通过元数据),并将保留 IP 分配给 Droplet ID。此外,它通过返回调用 Droplet 是否有分配给它的保留 IP 来响应“状态”和“监控”命令。
它需要以下 OCF 参数:
-
do_token::用于保留 IP 重新分配的 DigitalOcean API 令牌,即您的 DigitalOcean 个人访问令牌
-
reserved_ip::您的保留 IP(地址),以防需要重新分配
现在我们可以使用 FloatIP OCF 资源代理来定义我们的“FloatIP”资源。
添加 FloatIP 资源
安装 FloatIP OCF 资源代理后,我们现在可以配置我们的“FloatIP”资源。
在任一服务器上,使用此命令创建“FloatIP”资源(确保使用您自己的信息指定两个突出显示的参数):
sudo crm 配置原语 FloatIP ocf:digitalocean:floatip \
参数 do_tokenu003dyour_digitalocean_personal_access_token \
reserved_ipu003dyour_reserved_ip
这将使用我们之前创建的 FloatIP OCF 资源代理 (ocf:digitalocean:floatip
) 创建一个原始资源,它是一种通用类型的集群资源,称为“FloatIP”。请注意,它需要将 do_token
和 reserved_ip
作为参数传递。如果需要重新分配保留 IP,将使用这些。
如果您检查集群的状态(sudo crm status
或 sudo crm_mon
),您应该会看到 FloatIP
资源已定义并在您的一个节点上启动:
crm_my:...
2 个节点配置
1 资源配置
在线:[小学中学]
FloatIP (ocf::digitalocean:floatip): 启动主
假设一切设置正确,您现在应该有一个主动/被动 HA 设置!就目前而言,如果启动“FloatIP”的节点脱机或进入“待机”模式,保留 IP 将被重新分配给在线服务器。现在,如果活动节点——primary,在我们的示例输出中——变得不可用,集群将指示 secondary 节点启动 FloatIP
资源并为自己声明保留的 IP 地址。一旦发生重新分配,保留 IP 将引导用户到新活动的辅助服务器。
目前,只有在活动主机离线或无法与集群通信时才会触发故障转移(保留 IP 重新分配)。此设置的更好版本将指定应由 Pacemaker 管理的其他资源。这将允许集群检测特定服务的故障,例如负载平衡器或 Web 服务器软件。不过,在设置之前,我们应该确保基本的故障转移工作正常。
测试高可用性
测试我们的高可用性设置是否有效很重要,所以现在就开始吧。
目前,预留 IP 已分配给您的其中一个节点(假设 primary)。现在通过 IP 地址或指向它的域名访问保留 IP,将只显示 primary 服务器的索引页面。如果您使用示例用户数据脚本,它将如下所示:
保留IP指向主服务器:Droplet:primary,IP地址:primary_ip_address
这表明保留 IP 实际上已分配给主 Droplet。
现在,让我们打开一个新的本地终端并使用 curl
在 1 秒循环中访问保留 IP。使用此命令执行此操作,但请务必将 URL 替换为您的域或保留 IP 地址:
虽然是真的;卷曲 reserved_IP_address;睡觉1;完毕
目前,这将输出与主服务器相同的 Droplet 名称和 IP 地址。如果我们导致主服务器发生故障,通过关闭它或将主节点的集群状态更改为“备用”,我们将查看保留 IP 是否被重新分配给辅助服务器。
现在让我们重新启动 primary 服务器。通过 DigitalOcean 控制面板或在主服务器上运行以下命令来执行此操作:
须藤重启
片刻之后,主服务器应该变得不可用。注意终端中运行的“curl”循环的输出。您应该注意到如下所示的输出:
curl循环输出:Droplet:primary,IP地址:primary_IP_address
...
curl: (7) 无法连接到 reserved_IP_address 端口 80:连接被拒绝
液滴:次要,IP地址:secondary_IP_address
...
也就是说,应重新分配预留 IP 地址以指向 辅助 服务器的 IP 地址。这意味着您的 HA 设置正在运行,因为已经发生了成功的自动故障转移。
如果您尝试在主服务器故障和保留 IP 重新分配完成之间访问保留 IP,您可能会看到也可能不会看到“连接被拒绝”错误。
如果您检查 Pacemaker 的状态,您应该会看到 FloatIP
资源已在 secondary 服务器上启动。此外,primary 服务器应暂时标记为 OFFLINE
,但在完成重新启动并重新加入集群后将立即加入 Online
列表。
故障转移故障排除(可选)
如果您的 HA 设置按预期工作,请跳过此部分。如果故障转移没有按预期发生,您应该在继续之前检查您的设置。特别是,请确保对您自己的设置的任何引用,例如节点 IP 地址、您的保留 IP 和您的 API 令牌。
有用的故障排除命令
以下是一些可以帮助您排除设置故障的命令。
如前所述,crm_mon
工具对于查看节点和资源的实时状态非常有帮助:
须藤 crm_mon
此外,您可以使用以下命令查看集群配置:
sudo crm 配置显示
如果 crm
命令根本不起作用,您应该查看 Corosync 日志以获取线索:
sudo tail -f /var/log/corosync/corosync.log
其他 CRM 命令
这些命令在配置集群时很有用。
您可以使用以下命令将节点设置为“待机”模式,该模式可用于模拟节点变得不可用:
sudo crm 节点备用节点名称
您可以使用以下命令将节点的状态从 standby
更改为 online
:
sudo crm 节点在线节点名
您可以使用以下命令编辑资源,以便重新配置它:
sudo crm 配置编辑资源名称
您可以使用以下命令删除必须在删除之前停止的资源:
sudo crm 资源停止资源名称
sudo crm 配置删除资源名称
最后,可以单独运行“crm”命令以访问交互式“crm”提示:
客户关系管理
我们不会介绍交互式 crm
提示的用法,但它可以用来完成我们到目前为止所做的所有 crm
配置。
添加 Nginx 资源(可选)
现在您确定您的预留 IP 故障转移工作正常,让我们考虑向您的集群添加一个新资源。在我们的示例设置中,Nginx 是我们提供高可用性的主要服务,因此让我们将其添加为集群将管理的资源。
Pacemaker 自带了一个 Nginx 资源代理,所以我们可以很方便的将 Nginx 添加为集群资源。
使用此命令创建一个名为“Nginx”的新原始集群资源:
sudo crm 配置原始 Nginx ocf:heartbeat:nginx \
参数 httpdu003d"/usr/sbin/nginx" \
操作开始超时u003d“40s”间隔u003d“0”\
op monitor timeoutu003d"30s" intervalu003d"10s" on-failu003d"restart" \
操作停止超时u003d“60s”间隔u003d“0”
指定的资源告诉集群每隔 10 秒监控一次 Nginx,如果不可用则重新启动它。
使用 sudo crm_mon
或 sudo crm status
检查集群资源的状态:
crm_my:...
在线:[小学中学]
FloatIP (ocf::digitalocean:floatip): 启动主
Nginx (ocf::heartbeat:nginx):已启动辅助
不幸的是,Pacemaker 将决定在不同的节点上启动 Nginx
和 FloatIP
资源,因为我们没有定义任何资源限制。这是一个问题,因为这意味着保留 IP 将指向一个 Droplet,而 Nginx 服务将仅在另一个 Droplet 上运行。访问保留 IP 会将您指向未运行应具有高可用性的服务的服务器。
为了解决这个问题,我们将创建一个 clone 资源,它指定一个现有的原始资源应该在多个节点上启动。
使用以下命令创建名为“Nginx-clone”的“Nginx”资源的克隆资源:
sudo crm 配置克隆 Nginx-克隆 Nginx
集群状态现在应该如下所示:
crm_mon:在线:[主要次要]
FloatIP (ocf::digitalocean:floatip): 启动主
克隆集:Nginx-clone [Nginx]
开始:[主要次要]
如您所见,克隆资源“Nginx-clone”现在已在我们的两个节点上启动。
最后一步是配置 colocation 约束,以指定 FloatIP
资源应在具有活动 Nginx-clone
资源的节点上运行。要创建一个名为“FloatIP-Nginx”的托管约束,请使用以下命令:
sudo crm 配置托管 FloatIP-Nginx inf: FloatIP Nginx-clone
您不会在 crm status
输出中看到任何差异,但可以看到托管资源是使用以下命令创建的:
sudo crm 配置显示
现在,您的两台服务器都应该运行 Nginx,而其中只有一个运行“FloatIP”资源。现在是测试 HA 设置的好时机,方法是停止 Nginx 服务并重新启动或关闭 active 服务器。
结论
恭喜!您现在已经使用 Corosync、Pacemaker 和 DigitalOcean 保留 IP 进行了基本的 HA 服务器设置。
下一步是用反向代理负载均衡器替换示例 Nginx 设置。为此,您可以使用 Nginx 或 HAProxy。请记住,您需要将负载均衡器绑定到锚 IP 地址,以便您的用户只能通过保留 IP 地址访问您的服务器(而不是通过每个服务器的公共 IP 地址)。此过程在 [如何在 Ubuntu 14.04 上使用 Corosync、Pacemaker 和保留 IP 创建高可用性 HAProxy 设置](https://www.digitalocean.com/community/tutorials/how-to-create-a- high-availability-haproxy-setup-with-corosync-pacemaker-and-floating-ips-on-ubuntu-14-04)教程。
更多推荐
所有评论(0)