第 19 章 配置第 3 层高可用性

本章解释了第 3 层高可用性功能在一个 OpenStack Networking 环境中所起的作用,并且包括了使用这个功能保护网络中的虚拟路由器的步骤。

19.1. 没有 HA 功能的 OpenStack Networking

一个不带有任何高可用性功能的 OpenStack Networking 环境会在物理节点出现问题时变得非常脆弱。

在一个典型的环境中,租户会创建虚拟路由器,而它们会被调度到物理 L3 agent 节点上运行。当一个 L3 agent 节点出现问题时,依赖它的虚拟机将失去和外部网络的连接;浮动 IP 地址也将无效。

19.2. 第 3 层高可用性概述

“主动/被动”式高可用性配置使用工业标准的 VRRP(在 RFC 3768 中定义)保护租户的路由器和浮动 IP 地址。虚拟路由器会在多个 OpenStack Networking 节点上随机调度,其中的一个是 active(活跃的),其它作为 standby(备份)的角色。

注意

为了成功部署第 3 层高可用性功能,需要有冗余的 OpenStack Networking 节点,这些节点必须具备相似的配置(浮动 IP 范围、到外部网络的访问)。

在下图中,活跃的 Router1 和 Router2 分别运行于独立的物理 L3 agent 节点上。第 3 层高可用性已在相关的节点上调度了备份虚拟路由器,当物理节点出现问题时,会继续提供相关的服务:

vrrp scheduling pre

当 L3 agent 节点出现问题时,第 3 层高可用性会把受影响的虚拟路由器和浮动 IP 地址重新调度到一个可以工作的节点上:

vrrp scheduling post

在发生故障转移操作时,使用浮动 IP 的 TCP 会话不会受到影响,它们会被迁移到一个新的 L3 节点上。只有 SNAT 的网络流量会受到故障转移操作的影响。

L3 agent 本身也会通过 active/active HA 的模式被保护。

19.2.1. 故障转移的条件

Layer 3 高可用性功能会在出现以下情况时自动重新调度被保护的资源:

  • 因为硬件故障造成 L3 agent 关机或无电源供应。
  • L3 agent 节点从物理网络中被隔离并无法被连接。
注意

手工停止 L3 agent 服务不会导致故障转移操作的发生。

19.3. 租户的考虑因素

第 3 层高可用性配置在后台发生,对租户是不可见的。租户可以继续象往常一样创建和管理虚拟路由器,但在设计您的第 3 层高可用性功能时需要考虑以下问题:

  • 第 3 层高可用性功能支持每个租户最多有 255 个虚拟路由。
  • 内部的 VRRP 信息会在为每个项目自动创建的一个独立的内部网络中传输。这个过程对用户是透明的。

19.4. 后台的变化

现在,Neutron API 已被更新,管理员可以在创建路由器时设置 --ha=True/False 标识来覆盖 neutron.conf 文件中的默认 l3_ha 配置。下节介绍了进行这个配置的步骤。

19.4.1. 对 neutron-server 的改变
  • 无论 OpenStack Networking 使用什么调度程序(random 或 leastrouter),第 3 层高可用性功能都随机分配活跃的角色。
  • 修改数据库的 schema 来支持为虚拟路由器分配 VIP。
  • 根据以上的介绍创建一个传输网络来处理第 3 层高可用性网络流量。
19.4.2. 对 L3 agent 的改变
  • 添加一个新的 keepalived manager 来提供负载均衡和 HA 的功能。
  • 把 IP 地址转换为 VIP。

19.5. 配置步骤

以下步骤在 OpenStack Networking 和 L3 agent 节点上启用第 3 层高可用性功能。

19.6. 配置 OpenStack Networking 节点

1. 在 neutron.conf 文件中配置第 3 层高可用性功能。启用 L3 HA,并定义保护每个虚拟路由器所需的 L3 agent 节点的数量:

l3_ha = True
max_l3_agents_per_router = 2
min_l3_agents_per_router = 2

其中:

  • l3_ha - 如果它被设置为 True,以后创建的所有虚拟路由器在默认情况下都是 HA 路由器,而不是一般的路由器。管理员可以通过以下方法覆盖每个路由器中的这个设置:
# neutron router-create --ha=<True | False> routerName
  • max_l3_agents_per_router - 把它的值设置为您的部署中的最小网络节点数量值和总共的网络节点数量值之间的值。例如,您共有 4 个 OpenStack Networking 节点,并把这个值设为 2,则每个 HA 虚拟路由器只有 2 个 L3 agent 来保护它:一个是活跃的,一个用于备份。另外,每次当一个新的 L3 agent 节点被部署时,额外的备份虚拟路由器都会被调度,直到达到了 max_l3_agents_per_router 指定的值。这样,您就可以通过添加新的 L3 agent 来扩展备份路由器的数量。
  • min_l3_agents_per_router - 这个设置确保了 HA 规则在生效。它会在虚拟路由器创建的过程中被设置,来确保有足够的 L3 Agent 节点来实现高可用性的功能。例如,您有 2 个网络节点,一个节点因为某些原因变为不可用,则此时将无法创建新的路由器,因为在创建 HA 路由器时需要满足最少的活跃 L3 agent 数量要求。

2. 重启 neutron-server 服务以使所做的修改生效:

# systemctl restart neutron-server.service

19.7. 检查您的配置

在虚拟路由器的命名空间内运行 ip address 命令,一个 HA 设备应该包括在返回结果中(带有 ha- 前缀)。

# ip netns exec qrouter-b30064f9-414e-4c98-ab42-646197c74020 ip address
<snip>
2794: ha-45249562-ec: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 12:34:56:78:2b:5d brd ff:ff:ff:ff:ff:ff
inet 169.254.0.2/24 brd 169.254.0.255 scope global ha-54b92d86-4f

现在,第 3 层高可用性功能已被启用,在某个节点出现问题时,虚拟路由器和浮动 IP 地址会受到保护。