介绍
本教程将演示如何使用Corosync和Pacemaker与浮动IP在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),这是可以用来验证您DigitalOcean帐户API的道理,与读取和遵循写入权限如何生成个人访问令牌 API的部分教程。 您的PAT将用于将添加到集群中两个服务器的脚本,因此请务必将其保存在安全的位置,因为它允许完全访问您的DigitalOcean帐户,以供参考。
除了API之外,本教程还使用了以下DigitalOcean特性:
如果您想了解更多关于它们的信息,请阅读链接的教程。
创建Droplet
第一步是在同一个数据中心中创建两个启用了专用网络的Ubuntu Droplet,它将充当上述主要和辅助服务器。 在我们的示例设置中,我们将它们命名为“primary”和“secondary”以方便参考。 我们将在两个Droplets上安装Nginx,并用其唯一标识它们的信息替换它们的索引页面。 这将允许我们一个简单的方法来演示HA设置是否正常工作。 对于真正的设置,您的服务器应运行您选择的Web服务器或负载均衡器,例如Nginx或HAProxy。
创建两个Ubuntu的14.04Droplet, 小学和中学 。 如果要按照示例设置,请使用此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地址 。
指派浮动IP到您的主Droplet,然后单击分配浮动IP按钮。
分配浮动IP后,记下其IP地址。 通过在Web浏览器中访问浮动IP地址,检查是否可以访问分配给它的Droplet。
http://your_floating_ip
您应该看到主Droplet的索引页。
配置DNS(可选)
如果你希望能够通过域名访问你的HA设置,继续创建您的DNS指向您的域名到您的浮动IP地址的A记录 。 如果您的域名使用DigitalOcean的域名服务器,请按照第三步的如何建立与DigitalOcean教程主机名。 一旦传播,您可以通过域名访问您的活动服务器。
我们将使用的示例域名为example.com
。 如果您现在没有要使用的域名,您将使用浮动IP地址访问您的设置。
配置时间同步
每当有多个服务器彼此通信时,尤其是与群集软件进行通信时,重要的是确保其时钟同步。 我们将使用NTP(网络时间协议)来同步我们的服务器。
在两台服务器上,使用此命令可以打开一个时区选择:
sudo dpkg-reconfigure tzdata
选择所需的时区。 例如,我们会选择America/New_York
。
接下来,更新apt-get:
sudo apt-get update
然后安装ntp
包用这个命令;
sudo apt-get -y install ntp
您的服务器时钟现在应该使用NTP同步。 要了解更多关于NTP,看看这个教程: 配置时区和网络时间协议同步 。
配置防火墙
Corosync使用端口的UDP传输5404
和5406
。 如果运行防火墙,请确保在服务器之间允许在这些端口上进行通信。
例如,如果你使用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
在两台服务器上,安装Corosync和Pacemaker使用apt-get的:
sudo apt-get install pacemaker
注意,Corosync作为Pacemaker软件包的依赖关系安装。
Corosync和Pacemaker现在已经安装,但他们需要配置之前,他们会做任何有用的。
配置Corosync
必须配置Corosync,以便我们的服务器可以作为群集进行通信。
创建集群授权密钥
为了允许节点加入集群,Corosync要求每个节点拥有相同的集群授权密钥。
在主服务器上,安装haveged
包:
sudo apt-get install haveged
该软件包可以让我们轻松地增加我们的服务器,这是必需的熵量corosync-keygen
脚本。
在主服务器上,运行corosync-keygen
脚本:
sudo corosync-keygen
这将产生一个128字节簇授权密钥,并将其写入/etc/corosync/authkey
。
现在,我们不再需要haveged
包,让我们从主服务器中删除:
sudo apt-get remove --purge haveged
sudo apt-get clean
在主服务器上,复制authkey
到辅助服务器:
sudo scp /etc/corosync/authkey username@secondary_ip:/tmp
在辅助服务器,移动authkey
文件到正确的位置,并限制其权限根:
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 vi /etc/corosync/corosync.conf
这里是一个Corosync配置文件,将允许您的服务器作为群集进行通信。 请务必使用适当的值来替换突出显示的部分。 bindnetaddr
应设置为你目前正在使用的服务器的私有IP地址。 另外两个突出显示的项目应设置为指示的服务器的私有IP地址。 随着外bindnetaddr
,该文件应该是在两台服务器上完全相同。
更换的内容corosync.conf
这种配置,特定于您的环境的变化:
totem {
version: 2
cluster_name: lbcluster
transport: udpu
interface {
ringnumber: 0
bindnetaddr: server_private_IP_address
broadcast: yes
mcastport: 5405
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
nodelist {
node {
ring0_addr: primary_private_IP_address
name: primary
nodeid: 1
}
node {
ring0_addr: secondary_private_IP_address
name: secondary
nodeid: 2
}
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
图腾部分(1-11行),这指的是Corosync使用群集成员图腾协议,规定了集群成员应如何互相沟通。 在我们的设置,最重要的设置包括transport: udpu
(指定单播模式)和bindnetaddr
(其中网络地址Corosync应绑定到指定)。
法定人数部分(13-16行)指定这是一个双节点群集,所以只有一个节点所需的法定人数( two_node: 1
)。 这是一种解决方法,即实现仲裁需要集群中至少有三个节点。 此设置将允许我们的双节点集群选择协调器(DC),该协调器是在任何给定时间控制集群的节点。
该节点列表部分(18-29行)指定集群中的每个节点,每个节点如何到达。 这里,我们配置主节点和辅助节点,并指定它们可以通过各自的私有IP地址访问。
日志记录部分(31-36行)指定Corosync日志应写入/var/log/corosync/corosync.log
。 如果您在本教程的其余部分遇到任何问题,请务必在解决疑难时查看此处。
保存并退出。
接下来,我们需要配置Corosync以允许Pacemaker服务。
在两台服务器上,创建pcmk
在编辑器中Corosync服务目录中的文件。 我们将使用vi
:
sudo vi /etc/corosync/service.d/pcmk
然后添加Pacemaker服务:
service {
name: pacemaker
ver: 1
}
保存并退出。 这将包括在Corosync配置中,并允许Pacemaker使用Corosync与我们的服务器通信。
默认情况下,禁用Corosync服务。 在两台服务器上,改变,通过编辑/etc/default/corosync
:
sudo vi /etc/default/corosync
变化值START
至yes
:
START=yes
保存并退出。 现在我们可以启动Corosync服务。
在两台服务器上,使用此命令启动Corosync:
sudo service corosync start
一旦Corosync在两台服务器上运行,它们应该聚集在一起。 我们可以通过运行以下命令来验证:
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
Pacemaker服务要求Corosync正在运行,因此默认情况下禁用它。
在两台服务器上,启用Pacemaker开始在系统启动时使用这个命令:
sudo update-rc.d pacemaker defaults 20 01
与现有的命令,我们设置Pacemaker的启动优先20
。 指定开始优先级高于它是重要Corosync的(这是19
由默认值),Corosync后使得Pacemaker启动。
现在让我们开始Pacemaker:
sudo service pacemaker start
要使用Pacemaker互动,我们将使用crm
工具。
检查Pacemaker与crm
:
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监视器。 这将为您提供每个节点的状态的实时更新,以及每个资源正在运行的位置:
sudo crm_mon
此命令的输出看起来相同的输出crm status
,除了它连续运行。 如果你想退出,按Ctrl-C
。
配置集群属性
现在我们准备配置Pacemaker的基本属性。 请注意,所有Pacemaker( crm
)命令可以从任一节点服务器上运行,因为它会自动同步跨所有成员节点所有群集相关的变化。
对于所需的设置,我们要禁用STONITH - 许多集群用于删除故障节点的模式 - 因为我们设置了一个双节点集群。 为此,请在任一服务器上运行此命令:
sudo crm configure property stonith-enabled=false
我们还希望在日志中禁用与Quorum相关的消息:
sudo crm configure property no-quorum-policy=ignore
同样,此设置仅适用于双节点集群。
如果要验证Pacemaker配置,请运行以下命令:
sudo crm configure show
这将显示所有活动的Pacemaker设置。 目前,这将只包括两个节点,以及您刚刚设置的STONITH和仲裁属性。
创建浮动IP重分配资源代理
现在Pacemaker正在运行和配置,我们需要添加资源来管理。 如介绍中所述,资源是群集负责提供高可用性的服务。 在Pacemaker,加入资源需要使用资源代理 ,它作为接口将被管理的服务的。 Pacemaker附带了用于公共服务的多个资源代理,并允许添加自定义资源代理。
在我们的设置,我们要确保我们的网络服务器, 小学和中学提供的服务,是主动/被动设置高度可用的,这意味着我们需要一种方法来确保我们的浮动IP总是指向服务器可用。 为了实现这一目标,我们需要设置每个节点可运行以确定其是否拥有浮动IP,如果有必要,运行一个脚本,以指向浮动IP对自身的资源代理 。 我们将把资源代理为“FloatIP OCF”,而浮动IP再分配脚本assign-ip
。 一旦我们安装了FloatIP OCF资源代理,我们可以定义资源本身,我们将称之为FloatIP
。
下载assign-ip脚本
正如我们刚才提到的,我们需要一个脚本,可以重新分配其Droplet我们的浮动IP指向,万一FloatIP
资源需要移动到不同的节点。 为此,我们将下载一个基本的Python脚本,该脚本使用DigitalOcean API为给定的Droplet ID分配浮动IP。
在两台服务器上,下载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正被分配
- DropletID:第二个参数为脚本,Droplet的ID浮动IP应该被分配到
- DigitalOcean PAT(API令牌):通过在作为环境变量
DO_TOKEN
,你的读/写DigitalOcean PAT
在继续之前,请自由地查看脚本的内容。
所以,如果你想手动运行该脚本重新分配浮动IP,你可以像这样运行: DO_TOKEN= your_digitalocean_pat /usr/local/bin/assign-ip your_floating_ip droplet_id
。 然而,该脚本将从在该事件的FloatIP OCF资源代理被调用FloatIP
资源需要被移动到不同的节点。
让我们接下来安装浮动IP资源代理。
下载FloatIP OCF资源代理
Pacemaker允许通过将OCF资源代理放置在特定目录中来添加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
命令,将查找DropletID调用它(通过元数据)的节点,并分配浮动IPDroplet的ID。 此外,它响应status
,并monitor
通过返回调用Droplet是否浮动IP分配给它的命令。
它需要以下OCF参数:
- do_token:该DigitalOcean API令牌用于浮动IP再分配,即你的个人DigitalOcean访问令牌
- floating_ip::你的浮动IP(地址),在情况下,它需要被重新分配
现在,我们可以使用FloatIP OCF资源代理来定义我们的FloatIP
资源。
添加FloatIP资源
安装了我们的FloatIP OCF资源代理,我们现在可以配置我们FloatIP
资源。
在任一服务器,创建FloatIP
使用此命令(一定要指定两个突出使用自己的信息参数)资源:
sudo crm configure primitive FloatIP ocf:digitalocean:floatip \
params do_token=your_digitalocean_personal_access_token \
floating_ip=your_floating_ip
这将创建一个原始资源,这是一个泛型类型群集资源,被称为“FloatIP”,利用我们先前创建的FloatIP OCF资源代理( ocf:digitalocean:floatip
)。 注意,它需要do_token
和floating_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设置! 因为它代表,浮动IP将得到重新分配到在线服务器,如果该节点FloatIP
开始在脱机或进入standby
模式。 眼下,如果活动主要于节点,在我们的例子输出变得不可用,集群将指示辅助节点启动FloatIP
资源,并声称浮动IP地址本身。 一旦发生重新分配,浮动IP将用户引导至新激活的备用服务器。
目前,仅当活动主机脱机或无法与群集通信时,才会触发故障转移(浮动IP重新分配)。 此设置的更好的版本将指定应由Pacemaker管理的其他资源。 这将允许集群检测特定服务(如负载平衡器或Web服务器软件)的故障。 在设置之前,虽然,我们应该确保基本的故障转移工作。
测试高可用性
重要的是要测试我们的高可用性设置是否正常工作,所以让我们现在就做。
目前,浮动IP分配给您的节点之一(假设主 )。 现在访问浮动IP,通过IP地址或由指向它的域名,只会显示主服务器的索引页。 如果你使用示例用户数据脚本,它将看起来像这样:
Floating IP is pointing to primary server:Droplet: primary, IP Address: primary_ip_address
这表示浮动IP实际上已分配给主要Droplet。
现在,让我们打开一个新的本地终端,并使用curl
访问浮动IP上1秒的循环。 使用此命令执行此操作,但请确保将网址替换为您的域或浮动IP地址:
while true; do curl floating_IP_address; sleep 1; done
目前,这将输出主服务器的相同Droplet名称和IP地址。 如果我们导致主服务器出现故障,将其关闭电源或更改主节点的群集状态standby
,我们会看到,如果浮动IP被重新分配到辅助服务器。
现在,让我们重新启动主服务器。 通过DigitalOcean控制面板或在主服务器上运行此命令执行此操作:
sudo reboot
稍后,主服务器应该变得不可用。 要注意的输出curl
是在终端运行循环。 您应该注意到这样的输出:
curl loop output:Droplet: primary, IP Address: primary_IP_address
...
curl: (7) Failed to connect to floating_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
工具可以浏览您的节点和资源的实时状态非常有帮助:
sudo crm_mon
此外,您可以使用此命令查看集群配置:
sudo crm configure show
如果crm
命令不会在所有的工作,你应该看看Corosync日志线索:
sudo tail -f /var/log/corosync/corosync.log
其他CRM命令
在配置集群时,这些命令很有用。
可以设置到一个节点standby
模式下,它可以用于模拟一个节点变得不可用,与此命令:
sudo crm node standby NodeName
你可以改变从一个节点的状态standby
到online
用这个命令:
sudo crm node online NodeName
您可以使用此命令编辑资源,允许您重新配置资源:
sudo crm configure edit ResourceName
您可以使用以下命令删除必须在删除资源之前停止的资源:
sudo crm resource stop ResourceName
sudo crm configure delete ResourceName
最后, crm
命令可以单独运行,以访问交互式crm
提示:
crm
我们将不包括交互式的使用crm
提示,但它可以被用来做所有的crm
配置,我们已经做了这一点。
添加Nginx资源(可选)
现在,您确定您的浮动IP故障转移工作,让我们看看添加一个新的资源到您的集群。 在我们的示例设置中,Nginx是我们提供高可用性的主要服务,所以让我们开始将它添加为我们的集群将管理的资源。
Pacemaker自带了一个Nginx资源代理,所以我们可以很容易地添加Nginx作为一个集群资源。
使用此命令创建名为“Nginx”的新的原始集群资源:
sudo crm configure primitive Nginx ocf:heartbeat:nginx \
params httpd="/usr/sbin/nginx" \
op start timeout="40s" interval="0" \
op monitor timeout="30s" interval="10s" on-fail="restart" \
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
所谓“Nginx的克隆”使用此命令的资源:
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”的共置约束,请使用以下命令:
sudo crm configure colocation FloatIP-Nginx inf: FloatIP Nginx-clone
你不会看到任何区别crm status
输出,但是你可以看到,该托管资源被该命令创建:
sudo crm configure show
现在,无论你的服务器应该有Nginx的运行,而只是其中之一,有FloatIP
资源的运行。 现在是一个好时机,停止你的Nginx的服务,并通过重新启动或主动关闭服务器电源,以测试你的HA设置。
结论
恭喜! 您现在有使用Corosync,Pacemaker和DigitalOcean浮动IP的基本HA服务器设置。
下一步是用反向代理负载均衡器替换示例Nginx设置。 你可以使用Nginx或HAProxy来达到这个目的。 请记住,你会想你的负载平衡器绑定到锚的IP地址 ,这样用户只能通过浮动IP地址访问您的服务器(而不是通过每个服务器的公网IP地址)。 这个过程中的详细如何创建与Corosync,Pacemaker和浮动IP地址在Ubuntu 14.04高可用性HAProxy的安装教程。