内容


在 IBM 云中设置高度可用的防火墙和负载平衡器

在虚拟基础架构中实现安全性、负载平衡、高可用性和 Anti-collocation 规则

Comments

何时需要在云中使用高可用性和负载平衡

在本文中,我们查看设置一个具有高可用性 (HA) 和负载平衡的环境的最常见用例:

  • 负载平衡使您能够将工作负载分散在多个实例上,从而提高吞吐量和实现冗余。

    用例:跨两个运行 Apache HTTP Server 或 IBM HTTP Server 的 Web 服务器的负载平衡。您可以使用自己的 Web 服务器对来自应用服务器的数据执行负载平衡和缓存。注意:不仅可以对 HTTP 执行负载平衡,也可以对其他服务执行负载平衡。

  • 高可用性技术可确保您的基础架构保持正常运行,即使某个元素变得不可用。

    用例:在防火墙实例上配置虚拟路由器冗余协议 (VRRP)。如果其中一个实例发生故障,您的基础架构仍将继续运行。

  • Anti-collocation 是一个 IBM SmartCloud Enterprise 特性,允许您在两个不同的物理主机上配置两个实例。

    用例:确保 HA 组中的每个成员配置在不同的虚拟机管理程序(物理主机)上。

设置

让我们稍停一下,先看看本文中使用的符号和约定,以及一些设置环境的考虑因素。

  • 在系统上以 root 用户身份执行的命令使用 root@host# 作为前缀。
  • 在系统上以 root 用户身份使用 sudo 执行的命令使用 user@host# sudo 作为前缀。
  • 在系统上以一般用户身份执行的命令使用 user@host $ 作为前缀。
  • 命令输出使用换行符与命令分开,向右缩进一个制表符(如下面的示例所示):

    注意:我们特意设置了本文中的代码块,以禁止粘贴完整的代码节。这些代码只能用作指导,您需要针对您的环境、ID、范围等因素进行相应调整。

root@host# 1st command - to be run as root
root@host# 2nd command - to be run as root (previous command has no output)

output from 2nd command

user@host$ 3rd command - to be run as user

output from 3rd command

使用 sudo 运行需要升级的特权的命令(或者使用 sudo -s)。不要使用 sudo bash,因为此命令会保留 idcuser 环境设置,比如 sudo yum install rpmdevtools rpm-devel rpm-build

场景和架构

图 1 显示了本文中的基础架构。

图 1. 基础架构图
该图显示了基础架构图
该图显示了基础架构图

主要和备份防火墙/负载平衡器实例

配置细节如下所示:

  • 已从 IBM 防火墙镜像进行配给
  • 已分别使用两个私有 IP 地址和两个公共 IP 地址进行配置
  • 每个 IP 组拥有相同的子网(例如使用 21 位表示公共 IP 地址),以确保数据中心网络上具有有效的配置
  • 运行 iptables 和 Linux Keepalived 服务,它使用 VRRP 实现高可用性,并使用 Linux 虚拟服务器 (LVS) 实现负载平衡

实例列表如下所示:

  • LB1,IBM 防火墙实例 (MASTER):用作主要防火墙、路由器和负载平衡器。VRRP 在这个实例上配置虚拟 IP (VIP) 地址并将它们指定为 Master。
  • LB2,IBM 防火墙实例 (BACKUP):用作备份服务器、路由器和负载平衡器。VRRP 仅在主要服务器发生故障时才在此实例上配置 虚拟 IP(VIP)地址。

负载平衡的实例

对于负载平衡,配置细节如下所示:

  • 从 Red Hat Enterprise Linux (RHEL) v6 进行配给
  • 分别使用一个私有 IP 地址进行配置
  • 在端口 80 上运行 Apache HTTP Server

实例列表如下所示:

  • WEB1,一个运行 Apache HTTP Server 的 RHEL 实例:用作第一个负载平衡的 Web 服务器。
  • WEB2,一个运行 Apache HTTP Server 的 RHEL 实例:用作第二个负载平衡的 Web 服务器。

工具和技术

对于本文中的配置,我们使用以下工具和技术:

SmartCloud Enterprise VIP 功能
允许您为多个实例配给一个或多个浮动 IP 地址(VIP 地址)。这种类型的 IP 地址可在同一个数据中心内运行的实例之间迁移,是高可用性配置所必需的。
SmartCloud Enterprise Representational State Transfer (REST) 应用编程接口 (API)
允许用户从应用程序或命令行验证 SmartCloud Enterprise 的所有方面、与它们交互、编写它们的脚本、自动化和集成它们。在本文中,我们使用 Linux 上的 curl 工具配置 SmartCloud Enterprise 实例。
SmartCloud Enterprise Anti-collocation 功能
允许您将两个 SmartCloud Enterprise 实例配置到不同的物理主机上。您可以通过 REST API 使用此功能,使用 base_URL/instances 上的 POST 并在消息正文中指定 antiCollocationInstanceantiCollocationInstance 是您希望在物理上与新创建的实例分开(高可用性的必备要求)的实例的 ID。
IBM 防火墙镜像用作负载平衡器实例
使您能够使用 Webmin(一个基于 Web 的服务器配置工具)轻松地配置网络和防火墙。Webmin 是一个第三方包,安装在最低配置为 RHEL 6 基础操作系统镜像上。
Keepalived 路由软件
允许您使用 VRRP 和 LVS 功能实现负载平衡和高可用性。
  • VRRP 是一项计算机网络协议,允许您将主要和备份路由器分组为默认网关,将虚拟默认网关分配给参与的主机。如果主要物理路由器发生故障,备份路由器会自动接管。
  • LVS 是一项计算机网络协议,它提供了集群、高可用性和负载平衡功能。集群和负载平衡功能是对最终用户透明的,可用于多种协议,比如 HTTP 和 FTP。

使用 SmartCloud Enterprise API 进行配给

首先,您必须在同一个数据中心中保留 3 个公共 IP 地址和 5 个私有 IP 地址。可从 Web 界面中的 Account 选项卡完成此操作。

当保留一个 IP 地址时,它会从一个由多个 IP 子网组成的池中分配。您必须确保保留的公共 IP 地址具有相同的子网掩码中。您必须配给一个负载平衡器来查找分配的公共 IP 的子网掩码。

要在 Account 选项卡中保留一个公共 IP,请执行以下步骤:

  1. 单击 Add IP
  2. 选择数据中心。
  3. 单击 Public Internet
  4. 单击 Submit

要从 Account 选项卡保留一个私有 IP 地址:

  1. 单击 Add IP
  2. 选择数据中心。
  3. 单击 Private VLAN
  4. 单击 Submit

保留所有 IP 地址后,使用来自另一个 Linux 实例(它甚至可能位于 SmartCloud Enterprise 外部)的 SmartCloud API 来配置实例。配置一个启用了 Anti-collocation 功能的负载平衡器,防止环境发生节点故障。此功能能够请求一个不会分配在相同的物理服务器上的虚拟机 (VM)。

API 配置命令

要定义特定的 SmartCloud Enterprise 凭据和基础 URL,可以使用以下代码:

user@host$ export USER=sce_user_name:sce_password
user@host$ BASE_URL=https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331

要获得每个保留的 IP 地址的 ID,可使用以下命令:

user@host$ curl -s -u $USER $BASE_URL/addresses \
| xmllint --c14n - | XMLLINT_INDENT=$'\t' xmllint --encode UTF-8 --format -

注意:使用 xmllint 格式化输出。tidy 命令也可用于相同用途。

要定义第一个负载平衡器的配给变量,可使用清单 1 中的代码。

清单 1. 第一个负载平衡器的配置变量
user@host$ IMAGE_ID=20036702
user@host$ INSTANCE_NAME=LB1-IBM-Firewall-image PUBLIC_KEY=mihai_key
user@host$ INSTANCE_TYPE=COP32.1/2048/60
user@host$ DATACENTER=82
user@host$ DATA="name=$INSTANCE_NAME&imageID=$IMAGE_ID&instanceType=$INSTANCE_TYPE\
&location=$DATACENTER&publicKey=$PUBLIC_KEY&ip=321446&secondary.ip.0=321445\
&secondary.ip.1=321447&secondary.ip.2=321448&root_user_password=MyPassword-1234"

注意:BLD 数据中心中的 IBM 防火墙镜像 ID 为 20036702。对于 RHEL 6(32 位;BLD),镜像 ID 为 20025202,需要使用 root_user_password 参数才能访问 Webmin 管理页面。

当完成某个实例的 DATA 变量时,配给命令如下所示:

user@host$ curl -s -u $USER -d $DATA $BASE_URL/instances

第二个负载平衡器的配给变量(请注意添加的 antiCollocation 参数)如清单 2 所示。

清单 2. 第二个负载平衡器的配置变量
user@host$ INSTANCE_NAME=LB2-IBM-Firewall-image 
user@host$ DATA="name=$INSTANCE_NAME&imageID=$IMAGE_ID&instanceType=$INSTANCE_TYPE\
&location=$DATACENTER&publicKey=$PUBLIC_KEY&antiCollocationInstance=304442&ip=321546\
&secondary.ip.0=321445&secondary.ip.1=321547&\
secondary.ip.2=321448&root_user_password=MyPassword-1234"

注意:ID 对 secondary.ip.0 和 secondary.ip.2 应在两个负载平衡器上相同。配置之后,secondary.ip.0 将对应于 eth1 接口配置文件 (/etc/sysconfig/network-scripts/ifconfig-eth1),secondary.ip.1 将对应于 eth2 (ifconfig-eth2),依此类推。

一个 Web 服务器 (RHEL) 的配置变量如下所示:

user@host$ IMAGE_ID=20025202
user@host$ INSTANCE_NAME=WEB1-RedHat6-Instance
user@host$ DATA="name=$INSTANCE_NAME&imageID=$IMAGE_ID&instanceType=$INSTANCE_TYPE\
&location=$DATACENTER&publicKey=$PUBLIC_KEY&ip=321455"

网络描述

对于每个负载平衡器实例,您必须配置以下网络接口:

  • eth0。公共 IP 地址(用于管理用途)
  • eth0:1。浮动的公共 IP 地址(用于负载平衡和 VRRP)
  • eth2。用于虚拟 LAN (VLAN) 间通信(VRRP 需要这类通信)的私有 IP 地址
  • eth2:1。VLAN 内的浮动私有 IP 地址(需要浮动才能执行内部网络地址转换 [NAT])

在这个配置的场景中,对于 LB2,我们使用以下 IP 地址:

  • eth0:170.225.101.138
  • eth0:1:170.225.101.133
  • eth2:10.10.10.27
  • eth2:1:10.10.10.25

注意:配置了浮动 IP 地址的公共和私有接口可在负载平衡器之间共享,由 VRRP 动态地分配。

对于每个 Web 服务器实例,您都拥有 eth0,这是 VLAN 内的一个私有 IP 地址。

网络和防火墙配置

以下各节介绍本文环境中使用的网络和防火墙配置。

配置 LB1 和 LB2 上的网络接口

现在您已有两个负载平衡器,它们分别有 4 个接口,您需要标识每个接口。仅配置两个接口(eth0 和 eth2),因为浮动 IP 地址由 VRRP 自动配置。

您必须使用静态私有 IP 地址(在本例中为 eth2)手动配置该网络接口。

配置 LB1 和 LB2 上的私有网络

要配置 LBI 和 LB2 上的私有网络:

  1. 编辑 LB1 和 LB2 上的 /etc/sysconfig/network-scripts/ifcfg-eth2,确保 ONBOOT 的值为 yes
  2. 从路由文件 /etc/sysconfig/network-scripts/route-eth2 中删除以 default table 开头的行。这可确保路由配置生效。
  3. 使用用户名 root 和密码登录到负载平衡器上的 Webmin 接口:https://INSTANCE_IP:10000/

激活用于 VLAN 间通信的私有接口 (eth2)

要激活用于 VLAN 间通信的 eth2:

  1. 转到 Networking > Network Configuration > Network Interfaces
  2. 在 Activated at Boot 选项卡上,单击接口名称 (eth2)。
  3. 选择 Activate at boot - yes 选项。
  4. 单击 Save and Apply 激活接口。

该接口现在应在 Network Interfaces 列表中显示为 Active,如图 2 所示。

图 2. Network Interfaces 列表
该图显示了 Network Interfaces 列表
该图显示了 Network Interfaces 列表

将 PUBLIC IP 网关地址配置为系统默认路由

要配置 PUBLIC IP 网关地址:

  1. 转到 Networking > Network Configuration > Routing and Gateways
  2. 单击 Boot time configuration 选项卡(它默认应该会显示)。
  3. 复制与 PUBLIC 网络接口 (eth0) 关联的网关 IP 地址。
  4. 在相同选项卡的 “Create active route” 部分中设置以下参数:
    • Route destination:选择 Default route 选项。
    • Netmask for destination:选择 Default 选项。
    • Route via:选择 Gateway 选项,粘贴上一步中复制的 PUBLIC 网关 IP 地址。
  5. 单击 Create

    现在您应在 Active Configuration 选项卡上的 Default Route 下看到与 eth0 关联的 PUBLIC 网关 IP 地址(参见图 3)。

    图 3. 默认路由
    该图显示了默认路由
    该图显示了默认路由
  6. 单击 Boot time configuration 选项卡,清除与两个私有接口相关的 Interface 和 Gateway 字段(参见图 4)。
    图 4. 默认的路由引导时间配置
    该图显示了默认的路由引导时间配置
    该图显示了默认的路由引导时间配置
  7. 单击 Save 保存网关配置。

在 LB1 和 LB2 上配置防火墙

要配置源 NAT (SNAT) 以在私有网络内授予 Internet 访问权限(Web 节点):

  1. 在左侧的 Options 选项卡中,单击 Networking > Linux Firewall
  2. 从窗口顶部的列表中选择 network address translation
  3. 在 POSTROUTING 标题(窗口底部)下,单击右侧的 Add Rule
  4. 在 “Chain and action details” 部分,选择 Source NAT 选项,然后选择 IP Range 选项,并在字段中填入公共浮动 IP(在本例中为 170.225.101.133)。
  5. 在 “Condition details” 部分中,对于 Source address or network,从列表中选择 Equals 并输入您的 Web 节点的掩码(在本例中为 10.10.10.0/24)。对于 Outgoing interface,从第一个列表中选择 Equals 并从第二个列表中选择 eth0,然后在字段中输入您的 PUBLIC 接口。
  6. 单击窗口底部的 Create 以保存此规则,然后单击 Apply Configuration

该规则应类似于图 5。

图 5. SNAT 配置
该图显示了 SNAT 配置
该图显示了 SNAT 配置

图 6 显示了 SNAT 规则清单。

图 6. SNAT 规则清单
该图显示了SNAT 规则清单
该图显示了SNAT 规则清单

接下来,添加一条规则,接受端口 80 上传入的流量,添加另一条规则来接受转发的包:

  1. 从窗口顶部的列表中选择 Packet filtering (filter)(图 7)。
    图 7. 防火墙传入过滤器规则
    该图显示了防火墙传入过滤器规则
    该图显示了防火墙传入过滤器规则
  2. 单击 “Incoming packets (INPUT)” 部分中的 Add Rule
  3. 在 “Chain and action details” 部分中,选择 Accept 选项。
  4. 单击底部的 Create rule
  5. 单击 “Forwarded packets (FORWARD)” 部分中的 Add Rule
  6. 在 “Chain and action details” 部分中,选择 Accept 选项(图 8)。
    图 8. 防火墙转发过滤器规则
    该图显示了防火墙转发过滤器规则
    该图显示了防火墙转发过滤器规则
  7. 在 “Condition details” 部分中,对于 Destination TCP or UDP port,从列表中选择 Equals,然后在字段中输入 Port 80
  8. 单击底部的 Create rule
  9. 单击 Apply Configuration

执行这些更改后,LB2 上的网络配置应类似于清单 3。

清单 3. LB2 上最终的网络配置
root@host# ip addr |egrep "inet | eth"

    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
 qdisc pfifo_fast state UP qlen 1000
 inet 170.225.101.138/21 brd 170.225.103.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 inet 10.10.10.27/28 brd 10.10.10.31 scope global eth2
5: eth3:<BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

使用命令行执行网络配置

也可以从命令行配置 LB1 和 LB2 上的网络和防火墙。

对于负载平衡器上的网络配置:

  1. 为网络接口配置静态私有 IP 地址,在本场景中为 eth2 /etc/sysconfig/network-scripts/ifcfg-eth2。确保 ONBOOT 的值为 yes
    DEVICE=eth2
    TYPE=Ethernet
    BOOTPROTO=static
    HWADDR=DE:AD:BE:A9:32:20
    IPADDR=10.10.10.27
    NETMASK=255.255.255.0
    ONBOOT=yes
  2. 从路由文件 /etc/sysconfig/network-scripts/route-eth2 中删除以 default table 开头的一行。
  3. 调出接口:
    root@host# ifup eth2
  4. 重新启动网络服务让更改生效:
    root@host# service network restart

要配置负载平衡器上的防火墙规则:

  1. 接受来自私有网络的所有设置:
    root@host# iptables -I INPUT -s 10.216.1.0/24 -j ACCEPT
  2. 将来自私有网络的所有流量转发到 Internet:
    root@host# iptables -P FORWARD ACCEPT
  3. 使用 SNAT 在私有网络内部授予 Internet 访问权限(用于 Web 节点):
    root@host# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 170.225.101.133

    注意:Web 服务器必须通过公共浮动 IP 地址来路由。

  4. 保存防火墙配置:
    root@host# service iptables save

将所需的包安装在负载平衡器上

安装 Keepalived,它需要使用浮动 IP 地址。首先,您需要 Keepalived 的 Extra Packages for Enterprise Linux (EPEL) 存储库:

root@host# rpm -Uvh
http://ftp-stud.hs-esslingen.de/pub/epel/6/i386/epel-release-6-7.noarch.rpm

在这之后,就可以开始安装 Keepalived:

root@host# yum -y install keepalived

注意:在安装此存储库中的第一个包时必须接受 EPEL 密钥。请参见清单 4。

清单 4. 接受 EPEL 密钥
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
Userid : EPEL (6) <epel@fedoraproject.org>
Package: epel-release-6-7.noarch (installed)
From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded

Keepalived 配置

将一个负载平衡器实例配置为 MASTER,将另一个配置为 BACKUP。在本场景中,我们使用 LB1 作为主要实例,为它配置一个更高的优先级。

编辑文件 /etc/keepalived/keepalived.conf 来配置 Keepalived。

在 LB1 上,配置文件仅包含 清单 5 中所示的代码。公共浮动 IP 地址在活动的公共接口上配置。在本场景中,它为 eth0。此接口的状态为 MASTER,因为这是活动的负载平衡器。这个负载平衡器是根据优先级值选择的主要实例,越高越好。

清单 5. 配置 Keepalived
vrrp_instance VI_1 {
  interface eth2
  state MASTER
  virtual_router_id 1
  priority 100
  authentication {
    auth_type PASS
    auth_pass MyLBP4$$
  }
  virtual_ipaddress {
    170.225.101.133/21 dev eth0
  }
}

注意:Eth2 是接收 VRRP 包的接口:不要将它与这个浮动 IP 地址所分配到的节点。请注意,对于公共 IP 地址,使用掩码 /21,如 eth0 的 ip addr 命令中所示。应对私有接口执行相同的操作(使用掩码 /28)。

第二个虚拟接口用于私有浮动 IP 地址。这用于内部 NAT 和路由。参见清单 6。

清单 6. 配置第二个虚拟接口
vrrp_instance VI_2 {
  interface eth2
  state MASTER
  virtual_router_id 2
  priority 100
  authentication {
    auth_type PASS
    auth_pass MyLBP4$$
  }
  virtual_ipaddress {
    10.10.10.25/28 dev eth2
  }
}

现在配置虚拟服务器,它们实际上是在其上平衡流量的 Web 服务器:

  • virtual_server:使用公共浮动 IP 地址,因为这是访问者可以访问的 IP 地址。
  • lb_algo:负载平衡算法为 round robin。
  • lb_kind:路由类型,在本例中为 NAT。

参见清单 7。

清单 7. 配置虚拟服务器
virtual_server 170.225.101.133 80 {
  delay_loop 15
  lb_algo rr
  lb_kind NAT
  nat_mask 255.255.255.0
  protocol TCP

Web 服务器声明如下所示:

  • real_server:Web 服务器的私有 IP 地址。
  • TCP_CHECK:使用 TCP 检查服务器是否是活动的。
  • connect_timeout:超时时间,以秒为单位。

清单 8 给出了代码。

清单 8. 声明 Web 服务器
real_server 10.10.10.28 80 {
  weight 1
  TCP_CHECK {
    connect_timeout 3
  }
}
real_server 10.10.10.29 80 {
  weight 1
  TCP_CHECK {
    connect_timeout 3
  }
}
}

对于您的 Web 服务器,可使用 HTTP_GET 代替 TCP_CHECK。清单 9 给出了这种检查类型的一个示例配置块。

清单 9. 使用 HTTP_GET 的 Web 服务器示例配置
HTTP_GET {
    url {
        path /
        status_code 200
    }
    connect_port 80
    connect_timeout 10
    nb_get_retry 3
    delay_before_retry 10
}

注意:有关更多检查和文档,请参阅 keepalived.conf 手册(参阅 参考资料 获取相关链接)。

LB2 的完整配置文件 (/etc/keepalived/keepalived.conf) 如清单 10 所示。

清单 10. Keepalived.conf
vrrp_instance VI_1 {
  interface eth2 
  state BACKUP  
  virtual_router_id 1
  priority 50
  authentication {
    auth_type PASS
    auth_pass MyLBP4$$
  }
  virtual_ipaddress {
    170.225.101.133/21 dev eth0
  }
}
    
vrrp_instance VI_2 {
  interface eth2
  state BACKUP
  virtual_router_id 2
  priority 50
  authentication {
    auth_type PASS
    auth_pass MyLBP4$$
  }
  virtual_ipaddress {
    10.10.10.25/28 dev eth2 
  }
}
    
virtual_server 170.225.101.133 80 {
  delay_loop 15
  lb_algo rr
  lb_kind NAT
  nat_mask 255.255.255.0
  protocol TCP
    
  real_server 10.10.10.28 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
    }
  }
  real_server 10.10.10.29 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 3
    }
  }
}

在 LB1 和 LB2 上,重新启动 Keepalived 服务让更改生效。另外确保它会在下一次重新引导时启动:

root@host# service keepalived restart
root@host# chkconfig keepalived on

当 Keepalived 启动时,浮动 IP 地址已生效。在 LB1 上,它类似于清单 11。

清单 11. LB1 上的浮动 IP 地址
root@host# ip addr | egrep "inet | eth" inet

127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 170.225.101.138/21 brd 170.225.103.255
    scope global eth0 inet 170.225.101.133/21 scope global secondary eth0
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.10.10.27/28 brd 10.10.10.31 scope global eth2
    inet 10.10.10.25/28 scope global secondary eth2
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

请注意,虚拟 IP 地址 170.225.101.133 绑定到网络接口 eth0,10.10.10.25 绑定到 eth2。

Web 服务器配置

要配置 Web 服务器,必须配置网络和防火墙,然后将 Apache HTTP Server 安装在服务器上。

配置网络

两个 Web 服务器实例上的默认网关都应是负载平衡器的私有浮动 IP 地址。将该私有浮动 IP 地址作为网关添加到 /etc/sysconfig/network-scripts/route-eth0 中:

default table route_eth0 via 10.10.10.25

更新接口配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 并设置 GATEWAY=10.10.10.25。重新启动网络服务让更改生效:

root@host# service network restart

配置防火墙

在防火墙配置中允许访问端口 80。使用 iptables 添加一条规则允许此访问,然后将该规则保存到 /etc/sysconfig/iptables:

root@host# /sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
root@host# /sbin/service iptables save

重新启动 iptables 服务让更改生效:

root@host# service iptables restart

将 Apache HTTP Server 安装在 web1 和 web2上

要将 Apache HTTP Server 安装在 Web 服务器上,使用以下命令:

yum install httpd

现在,在每个 Web 服务器上创建一个 index.html 文件来测试负载平衡功能。对于 web1,使用:

root@host# echo "web1" > /var/www/html/index.html

对于 web2,使用:

root@host# echo "web2" > /var/www/html/index.html

重新启动两个服务器上的 httpd 服务:

root@host# service httpd restart

测试和排除故障

最后,测试您的负载平衡和防火墙。

负载平衡测试

在您最喜欢的 Web 浏览器中访问公共浮动 IP 地址。在此场景中,链接为 http://170.225.101.133/。要检查负载平衡操作,需要多次重新加载该页面并跳过浏览器缓存。在 Mozilla Firefox 或 Windows® Internet Explorer® 中,您可按 Ctrl-F5 键。您可以看到随机显示了 web1 和 web2。

防火墙/负载平衡实例故障测试

重新启动主要负载平衡器 (LB1) 并再次运行负载平衡测试,验证第二个负载平衡器是否在另一个负载平衡器不可用期间持续提供服务。Keepalived 服务默认记录到 syslog。日志条目包括从显示 Keepalived 启动时间的条目到显示状态过渡的条目。清单 12 提供了一些示例条目,它们显示 Keepalived 已启动且该节点将 VRRP 实例过渡到 LB1 上的 MASTER 状态。

清单 12. Keepalived 示例日志条目
root@host# grep -i keepalived /var/log/messages

...
Keepalived_vrrp[23421]: VRRP_Instance(VI_1) Entering BACKUP STATE
Keepalived_vrrp[23421]: VRRP_Instance(VI_2) Entering BACKUP STATE
Keepalived_vrrp[23421]: VRRP sockpool: [ifindex(4), proto(112), fd(10,11)]
Keepalived_vrrp[23421]: VRRP_Instance(VI_1) Transition to MASTER STATE
Keepalived_vrrp[23421]: VRRP_Instance(VI_2) Transition to MASTER STATE
Keepalived_vrrp[23421]: VRRP_Instance(VI_1) Entering MASTER STATE
Keepalived_vrrp[23421]: VRRP_Instance(VI_1) setting protocol VIPs.
Keepalived_vrrp[23421]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 
    170.225.101.133
Keepalived_vrrp[23421]: VRRP_Instance(VI_2) Entering MASTER STATE
Keepalived_vrrp[23421]: VRRP_Instance(VI_2) setting protocol VIPs.
Keepalived_vrrp[23421]: VRRP_Instance(VI_2) Sending gratuitous ARPs on eth2 for 
    10.10.10.25
Keepalived_healthcheckers[23420]: Netlink reflector reports IP 170.225.101.133 added
Keepalived_healthcheckers[23420]: Netlink reflector reports IP 10.10.10.25 added

相关主题

  • 阅读 SmartCloud Enterprise 文档库中的创建和定制镜像和软件包,“导入和复制镜像”,查找导入和复制镜像的相关信息。
  • 了解如何 配置 Linux Logical Volume Manager (LVM) 和 ext3 文件系统,以适应 SmartCloud Enterprise 上更大的物理卷产品。
  • 阅读 “IBM Cloud 中的高可用性应用程序”(Dima Rekesh 和 Alan Robertson,developerWorks,2011 年 1 月),了解如何防御一个启用了云的生产级应用程序在任何节点上发生故障。
  • 了解如何 “使用 QEMU 恢复无法访问的实例”(Claudiu Popescu 和 Mihai Criveti,developerWorks,2012 年 10 月)。
  • 在 developerWorks 云开发人员资源 中,查找和分享为云部署而构建项目的应用程序和服务开发人员的知识和经验。
  • developerWorks 演示中心:观看演示,从为初学者准备的产品安装,到为经验丰富的开发人员准备的高级功能。
  • Keepalived 是一个使用 C 编写的路由软件。此项目的主要目标是向 Linux 系统和基于 Linux 的基础设施提供简单且健全的工具来实现负载平衡和高可用性。
  • Extra Packages for Enterprise Linux (EPEL) 是一个 Fedora 项目,用于为企业 Linux(包括 RHEL)创建和维护高质量的附加软件包。
  • 以最适合您的方式 评估 IBM 产品:下载产品试用版,在线试用产品,在云环境中使用产品,或者在 SOA 沙盒 中花几小时学习如何高效地实现面向服务的架构。

评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=942424
ArticleTitle=在 IBM 云中设置高度可用的防火墙和负载平衡器
publish-date=08262013