如何在Ubuntu 14.04创建Corosync,Pacemaker和浮动IP的高可用性设置

本教程将演示如何使用Corosync和Pacemaker与浮动IP上创建一个DigitalOcean高可用性(HA)服务器基础设施。 Corosync是一个开源项目,提供群集成员和消息传递功能,通常被称为...

介绍

本教程将演示如何使用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

指派浮动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传输54045406 如果运行防火墙,请确保在服务器之间允许在这些端口上进行通信。

例如,如果你使用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这种配置,特定于您的环境的变化:

/etc/corosync/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

变化值STARTyes

/ etc / default / corosync
START=yes

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

两台服务器上,使用此命令启动Corosync:

sudo service corosync start

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

sudo corosync-cmapctl | grep members

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

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秒,然后再次运行命令):

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_tokenfloating_ip作为参数传递。 如果浮动IP需要重新分配,这些将被使用。

如果您检查您的群集(状态sudo crm statussudo crm_mon ),你应该看到FloatIP资源定义,并开始在你的节点之一:

...
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地址或由指向它的域名,只会显示服务器的索引页。 如果你使用示例用户数据脚本,它将看起来像这样:

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是在终端运行循环。 您应该注意到这样的输出:

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

你可以改变从一个节点的状态standbyonline用这个命令:

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_monsudo crm status

...
Online: [ primary secondary ]

 FloatIP    (ocf::digitalocean:floatip):    Started primary
 Nginx  (ocf::heartbeat:nginx): Started secondary

不幸的是,Pacemaker会决定启动NginxFloatIP因为我们还没有定义的任何资源限制在单独的节点资源。 这是一个问题,因为这意味着浮动IP将指向一个Droplet,而Nginx服务将只在另一个Droplet上运行。 访问浮动IP将指向没有运行应该高度可用的服务的服务器。

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

创建的克隆资源Nginx所谓“Nginx的克隆”使用此命令的资源:

sudo crm configure clone Nginx-clone Nginx

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

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的安装教程。