IBM Cloud Docs
使用高可用性 (HA) 和 VRRP

使用高可用性 (HA) 和 VRRP

IBM Cloud® Virtual Router Appliance (VRA) 支持虚拟路由器冗余协议 (VRRP) 作为高可用性协议。 设备的部署以主动/被动方式完成,其中一台机器是主设备,另一台机器是备份设备。 两台机器上的所有接口都是同一 "sync-group" 的成员,因此如果一个接口迂到故障,那么同一组中的其他接口也会发生故障,并且设备停止成为主接口。 当前备份检测到主节点不再广播保持活动/脉动信号消息,承担对 VRRP 虚拟 IP 的控制,并成为主节点。

VRRP 是供应网关时配置中最重要的部分。 高可用性功能取决于脉动信号消息,因此确保未阻塞这些消息至关重要。

VRRP 虚拟 IP (VIP) 地址

dp0bond1dp0bond0 的 VRRP 虚拟 IP 或 VIP 是发生故障转移时从主节点更改为备份设备的浮动 IP 地址。 部署 VRA 时,它具有在每个接口上分配的公共和专用绑定网络连接和实际 IP。 在这两个接口上也会分配 VIP,无论设备是独立设备还是 HA 对。 在与 VRA 关联的 VLAN 中的子网中具有目标 IP 的流量将通过 FCR/BCR 上的静态路由直接发送到这些 VRRP VIP。

您不应更改任何网关组的 VRRP 虚拟 IP 地址,也不应禁用 VRRP 接口。 这些 IP 地址是在关联有 VLAN 时将流量路由到网关的方法。 因此,如果它们已关闭,那么 VLAN 流量也将关闭。 如果 IP 地址不存在,那么无法将流量从 BCR/FCR 转发到 VRA 本身。 此虚拟地址或 VIP 目前不可更改。 将来可能会更改此限制,但目前既不支持在 PODs/FCRs/BCR 之间迁移 VRA,也不支持更改 VIP。

以下是特定 VRA 的 dp0bond0dp0bond1 VIP 的缺省配置示例。 请注意,您的 IP 地址和 vrrp-groups 可能与此示例不同。

set interfaces bonding dp0bond0 vrrp vrrp-group 2 virtual-address '10.127.170.1/26'
set interfaces bonding dp0bond1 vrrp vrrp-group 2 virtual-address '159.8.98.209/29'

有关更多信息,请参阅 关联的 VLAN 子网与 VRRP

缺省情况下,VRRP 设置为禁用。 这将确保新供应和重新装入不会导致主设备发生中断。 要使 VLAN 流量起作用,必须在供应或重新装入完成后重新启用 VRRP。 以下示例详细描述了缺省配置:

set interfaces bonding dp0bond0 vrrp vrrp-group 2 'disable'
set interfaces bonding dp0bond1 vrrp vrrp-group 2 'disable'

要在供应或重新装入后在这两个接口上启用 VRRP,这对于独立和 HA 对都是必需的,请运行以下命令。 然后,落实更改:

delete interfaces bonding dp0bond0 vrrp vrrp-group 2 'disable'
delete interfaces bonding dp0bond1 vrrp vrrp-group 2 'disable'

VRRP 组

VRRP 组由接口或虚拟接口集群组成,这些接口或接口为组中的主要 (或主) 接口提供冗余。 VRRP 组在 Keepalive 配置中定义 virtual_router_id。 在 VRRP 协议本身中,它被称为 VRID。 VRRP 组具有唯一的数字标识,最多可以分配有 20 个虚拟 IP 地址。

VRRP 组标识由 IBM Cloud 分配,不应更改。 首次在前端客户路由器 (FCR)/后端客户路由器 (BCR) 后供应新的网关组时,它将接收到 1 的 VRRP 组。 后续网关组供应将增大此值以防止冲突。 例如,下一个组具有组 2,然后具有组 3,依此类推。 然后由供应过程进行计算和分配。 更改此值可能会与其他活动组发生冲突,然后发生主/主争用,这可能导致两个网关组都发生中断。

如果是从先前配置进行迁移的,那么建议您仔细检查配置代码,以确保 VRRP 组标识未以静态方式分配。

VRRP 组标识持久存储在数据库中,因此在操作系统重新装入或升级期间将使用相同的组标识值。 在操作系统重新装入期间,将使用系统分配的值覆盖任何用户修改的 VRRP 组标识。

VRRP 优先级

网关组中的第一台机器的优先级为 254,对于供应的下一个设备,此值将递减。 切勿将优先级设置为 255,因为这会将 VIP 定义为“地址所有者”,并且当机器使用不同于运行的活动主设备的配置联机时,可能会导致意外行为。

VRRP 抢占

应该始终禁用所有 VRRP 接口上的抢占,这样新的设备或正在重装其操作系统的设备才不会尝试接管集群。

VRRP 通知时间间隔

主接口或 VIF 为了表示自己仍在使用中,会使用 IANA 为 VRRP 分配的多点广播地址(对于 IPv4 为 224.0.0.18,对于 IPv6 为 FF02:0:0:0:0:0:0:12)将称为“通知”的“脉动信号”包发送到 LAN 网段。

缺省情况下,时间间隔设置为 1。 可以增大此值,但建议不要将值设置为高于 5。 在繁忙的网络上,从主节点到达备份设备的所有 VRRP 通知可能需要比一秒长的时间,因此应该将值 2 用于高流量网络。

VRRP 同步 (sync-group)

VRRP 同步组(“sync-group”)中接口的同步方式是,如果组中的某个接口故障转移到备份,那么该组中的其他所有接口都将故障转移到备份。 例如,如果主路由器上的一个接口发生故障,那么整个路由器将故障转移到备份路由器。

此值与 VRRP 组不同,因为它定义当该组中的接口注册故障时设备上的哪些接口发生故障转移。 建议所有接口都属于同一个同步组; 否则,某些接口是主接口,具有网关 IP,而其他接口是备份接口,流量不再正确转发。 不支持主动/主动配置。

VRRP RFC 兼容性

RFC 兼容性在接口上启用或禁用用于 VRRP 的 RFC 3768 MAC 地址。 这应该在本机接口上启用,而不应该在任何已配置的 VIF 上启用。 某些虚拟交换机 (大部分为 vmware) 在启用此虚拟交换机时存在问题,并且会导致流量被删除,并且不会从系统管理程序主机发送到网关 IP。 请保留此设置不变,并且不为任何 VIF 配置此设置。

VRRP 认证

如果为 VRRP 认证设置了密码,那么还必须定义认证类型。 如果设置了密码并且未定义认证类型,那么当您尝试落实配置时,系统会生成错误。

与此类似,不能只删除 VRRP 密码而不删除 VRRP 认证类型。 如果这样做,那么在您尝试落实配置时,系统会生成错误。 如果同时删除了 VRRP 认证密码和认证类型,那么会禁用 VRRP 认证。

IETF 决定不将认证用于 VRRP V 3。 有关更多信息,请参阅 RFC 5798 VRRP。

V2/3 支持

VRA 同时支持 VRRP V2(缺省)和 V3 协议。 在 V 2 中,不能同时使用 IPv4 和 IPv6 ; 但是,在 V 3 中,可以同时使用 IPv4 和 IPv6。

使用 VRRP 的高可用性 VPN

借助 VRA,能够将一对 IBM Cloud® Virtual Router Appliance 与 VRRP 配合使用,通过一个 IPsec 隧道来保持连接。 当一个路由器发生故障或关闭以进行维护时,新的 VRRP 主路由器将恢复本地和远程网络之间的 IPsec 连接。

使用 VRRP 配置 HA VPN 时,无论何时将 VRRP 虚拟地址添加到 VRA 接口,都必须重新初始化 IPsec 守护程序,因为当初始化因特网密钥交换 (IKE) 服务守护程序时,IPsec 服务仅侦听与 VRA 上存在的地址的连接。

在主路由器和备份路由器上运行以下命令,以便发生故障转移时,在 VIP 转换后,将在新的主设备上重新启动 IPsec 守护程序,如以下示例中所示:

vyatta@vrouter# set interfaces bonding dp0bond1 vrrp vrrp-group 1 notify ipsec

使用 VRRP 的高可用性防火墙

两个设备采用 HA 对形式时,在主设备上操作时必须小心,确保不会阻止来自其他设备的访问。 两个设备之间必须允许端口 443,以便配置同步工作,并且必须允许发送和接收 VRRP,包括多点广播范围 224.0.0.0/24

将 VLAN 子网与 VRRP 相关联

对于具有 VRRP 的任何 VIF 配置,您需要虚拟 IP 地址 (子网中的第一个可用 IP,该子网中的所有内容都将路由到的网关 IP) 以及两个设备上 VIF 的实际接口 IP 地址。 为节省可用 IP,建议实际接口 IP 使用频带外范围,例如 192.168.0.0/30,其中一个设备具有 .1,另一个设备具有 .2 地址。 您可以有多个 VRRP 虚拟 IP,但每个 VIF 上只需要一个真实地址。

下面是具有两个专用 VLAN 和三个子网的 VRRP 配置示例:

set interfaces bonding dp0bond0 address '10.100.11.39/26'
set interfaces bonding dp0bond0 mode 'lacp'
set interfaces bonding dp0bond0 vif 10 address '192.168.255.81/30'
set interfaces bonding dp0bond0 vif 10 description 'VLAN 10 - Two private subnets/VIPs'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 advertise-interval '1'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 preempt 'false'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 priority '254'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 sync-group 'vgroup1'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 virtual-address '10.100.105.177/28'
set interfaces bonding dp0bond0 vif 10 vrrp vrrp-group 1 virtual-address '10.100.38.1/26'
set interfaces bonding dp0bond0 vif 11 address '192.168.255.89/30'
set interfaces bonding dp0bond0 vif 11 description 'VLAN 11 - One private subnet/VIP'
set interfaces bonding dp0bond0 vif 11 vrrp vrrp-group 1 advertise-interval '1'
set interfaces bonding dp0bond0 vif 11 vrrp vrrp-group 1 preempt 'false'
set interfaces bonding dp0bond0 vif 11 vrrp vrrp-group 1 priority '254'
set interfaces bonding dp0bond0 vif 11 vrrp vrrp-group 1 sync-group 'vgroup1'
set interfaces bonding dp0bond0 vif 11 vrrp vrrp-group 1 virtual-address '10.100.212.65/26'
set interfaces bonding dp0bond0 vrrp vrrp-group 1 preempt 'false'
set interfaces bonding dp0bond0 vrrp vrrp-group 1 priority '254'
set interfaces bonding dp0bond0 vrrp vrrp-group 1 'rfc-compatibility'
set interfaces bonding dp0bond0 vrrp vrrp-group 1 sync-group 'vgroup1'
set interfaces bonding dp0bond0 vrrp vrrp-group 1 virtual-address '10.100.11.5/26'
set interfaces bonding dp0bond1 address '169.110.20.28/29'
set interfaces bonding dp0bond1 mode 'lacp'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 notify 'ipsec'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 preempt 'false'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 priority '254'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 'rfc-compatibility'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 sync-group 'vgroup1'
set interfaces bonding dp0bond1 vrrp vrrp-group 1 virtual-address '169.110.21.26/29'
  • VRRP sync-group 与 VRRP 组不同。 属于 sync-group 的接口的状态更改时,该 sync-group 的其他所有成员都会转换为相同的状态。
  • VLAN 接口 (VIF) 的 vrrp-group 号应该几乎总是与其匹配的本机接口相同。 例如,dp0bond1.789 应该始终具有与 dp0bond1 相同的 vrrp-group 号,除非两个接口共享相同的 sync-group。 如果在 VIF 和本机接口上具有不同的组号,那么在与不同的 sync 组配对时可能会导致“脑裂”条件。 当两个接口共享相同的 sync-group 时,尽管它们位于不同的 vrrp-group 上,它们也将同时在主项和备份项之间转换,从而防止脑裂情况发生。 另一方面,如果本机接口是使用不同于 VLAN 接口的 vrrp-group 号和 sync-group 设置的,那么因为在 VLAN 接口上设置的子网会静态路由到本机接口上的虚拟地址,如果 VLAN 接口显示为备份项,而本机接口显示为主项,那么路由器还是会将 VLAN 接口流量发送到 VRA,其中本机接口是主项,尽管 VLAN 接口在 VRA 上是辅助项并且未处于活动状态。 这种具体情况造成“脑裂”和停运。 这就是为什么必须了解同步组如何与 vrrp-groups 一起设置的原因。 在同一传输 VLAN 中的多个 HA VRA 对之间不使用相同的 vrrp-group 号也很重要,因为使用同一组的四个 Vyattas 会导致 sthree VRA 可能处于“备份”状态,而只有一个是“主”,导致中断。
  • 本机 VLAN 上的真实接口地址(如 dp0bond1:169.110.20.28/29)并不一定与其 VIP(169.110.21.26/29)在同一子网中。

手动 VRRP 故障转移

如果需要强制执行 VRRP 故障转移,可以通过在当前作为 VRRP 主设备的设备上运行以下命令来实现:

vyatta@vrouter$ reset vrrp master interface dp0bond0 group 1

组标识是本机接口的 VRRP 组标识,并且如上所述,在您的对中可能不同。

连接同步

当两个 VRA 设备位于 HA 对中时,跟踪两个设备之间的有状态连接可能有用,以便在发生故障转移时,会将发生故障的设备上所有连接的当前状态复制到备份设备。 无需从头开始重建任何当前活动会话 (例如 SSL 连接),这可能会导致用户体验中断。

这称为连接跟踪同步。

要对其进行配置,必须声明故障转移方法,用于发送连接跟踪信息的接口以及远程同级的 IP:

set service connsync failover-mechanism vrrp sync-group SYNC1
set service connsync interface dp0bond0
set service connsync remote-peer 10.124.10.4

另一个 VRA 具有相同的配置,但具有不同的 remote-peer

请注意,如果其他接口上出现大量连接,并且与已声明的链路上的其他流量竞争,那么这可能会使链路饱和。

VRRP 的启动延迟功能

Vyatta 操作系统 V1801 和更高版本中包含新的 vrrp 命令。

vrrp 用于指定一种选举协议,该协议将虚拟路由器的责任动态分配给 LAN 上的其中一个 VRRP 路由器。 控制与虚拟路由器关联的 IPv4 或 IPv6 地址的 VRRP 路由器称为主路由器,它转发发送到这些 IPv4 或 IPv6 地址的包。 如果主控变为不可用,那么选举进程将在转发责任中提供动态故障转移。 所有协议消息传递都使用 IPv4 或 IPv6 多点广播数据报来执行;因此,该协议可以基于支持 IPv4/IPv6 多点广播的各种多路访问 LAN 技术来运行。

为了最大限度减少网络流量,各个虚拟路由器中只有主控会定期发送 VRRP 通告消息。 备份路由器不会尝试抢占主节点,除非它具有更高的优先级。 这将避免服务中断,除非更优先的路径变得可用。 此外,还可以通过管理方式禁止所有抢占尝试。 如果主节点变为不可用,那么优先级最高的备份会在短暂延迟后过渡到主节点,从而提供虚拟路由器责任的受控过渡,并将服务中断降至最低。

在 IBM Cloud 供应的部署中,启动延迟值设置为缺省值。 在测试故障转移和高可用性方法时,您可能需要自行改变此方法。

先发制人与不先发制人

vrrp 协议定义了用于确定网络上哪个 VRRP 同级具有更高优先级的逻辑,因此,这是执行“主”角色的最佳同级。 通过缺省配置,VRRP 能够执行抢占,这意味着网络上新的更高优先级的同级会强制主角色进行故障转移。

禁用抢占时,仅当较低优先级的现有同级在网络上不再可用,较高优先级的同级才会执行主控角色的故障转移。 在现实世界场景中,禁用抢占有时很有用,因为它可以更好地处理以下情况: 由于同级本身或其某个网络连接的可靠性问题,优先级较高的同级可能已开始定期切换。 此外,这对于防止过早地故障转移到尚未完成网络融合的更高优先级的新同级也非常有用。

抢占的假设及限制

如果将 VRRP 同级配置为禁用抢占,那么在某些情况下可能会“出现”抢占,但实际上此场景只是标准 VRRP 故障转移。 如上所述,VRRP 利用 IP 多点广播数据报来确认当前选举的主路由器的可用性。 由于是采用第 3 层协议来检测 VRRP 同级的故障,因此请务必将 VRRP 中的故障转移检测延迟到 VRRP 以及网络堆栈的第 1 层到第 2 层已就绪并融合后再执行。 在某些情况下,运行 VRRP 的网络接口可能会向协议确认接口已启动,但其他底层服务 (例如 "生成树" 或 "绑定") 可能未完成。 因此,无法建立同级之间的 IP 连接。 如果发生此情况,那么新的较高同级上的 VRRP 将成为主同级,因为它无法检测来自网络上当前主同级的 VRRP 消息。 收敛后,有两个主 VRRP 同级的短暂时间段会导致执行 VRRP 的双主逻辑。 优先级较高的同级仍为“主”,优先级较低的将变为“备份”。 此场景可能似乎演示了“无抢占”功能中的故障。

启动延迟功能

为了适应在接口启动事件期间与网络堆栈较低级别的延迟收敛相关的问题以及其他促成因素,在 1801p 补丁中引入了称为“启动延迟”的新功能。 此功能导致“已重新装入”的机器上的 VRRP 状态保持为 INIT 状态,直到经过预定义的延迟 (可由网络操作员配置) 为止。 通过此延迟值的灵活性,网络操作员可定制其网络和设备在现实世界状况下的特征。

命令详细信息

vrrp {
start-delay <0-600>
}

start-delay 的值可以介于 0(缺省值)到 600 秒之间。

示例配置

interfaces {
  bonding dp0bond1 {
address 161.202.101.206/29 mode balanced
vrrp {
      start-delay 120
      vrrp-group 211 {
preempt false
priority 253
virtual-address 161.202.101.204/29
} }
}