故障检测对于实现服务引擎高可用性至关重要。

NSX Advanced Load Balancer 依赖于不同的方法以检测服务引擎故障,如下所示:

  • 控制器到 SE 故障检测方法

  • SE 到 SE 故障检测方法

  • BGP 路由器到 SE 故障检测方法

控制器到 SE 故障检测方法

在所有部署中,NSX Advanced Load Balancer 控制器 每 10 秒向它控制的所有组中的所有服务引擎发送检测信号消息。如果没有从特定 SE 收到连续 6 个检测信号消息的响应,则控制器断定该 SE 为 DOWN,并将所有虚拟服务移动到新的 SE。

如果启用了 vSphere High Availability,并且控制器检测到 vSphere 主机发生故障,SE 将在连续丢失 6 次检测信号之前转变为 OPER_PARTITIONEDOPER_DOWN

  • 故障主机上具有运行的虚拟服务的 SE 转变为 OPER_PARTITIONED 状态。

  • 故障主机上没有任何运行的虚拟服务的 SE 转变为 OPER_DOWN 状态。

SE 到 SE 故障检测方法

在上述控制器到 SE 故障检测方法中,控制器通过管理接口定期发送检测信号消息以检测服务引擎故障。不过,该方法不会检测 SE 上的数据接口的数据路径故障。

为了验证总体故障检测,设计了服务引擎数据路径检测信号机制,其中服务引擎通过数据接口定期发送检测信号消息。

默认情况下,此通信设置为标准模式。也可以将其配置为激进模式,如使用 CLI 启用激进模式一节中所述。

服务引擎数据路径通信模式

根据服务引擎部署,可用于 SE 到 SE 进程间通信的三种模式如下所述:

自定义 EtherType

这是服务引擎位于同一子网时适用的默认模式。使用的 EtherType 是:

  • ETHERTYPE_AVI_IPC 0XA1C0

  • ETHERTYPE_AVI_MACINMAC 0XA1C1

  • ETHERTYPE_AVI_MACINMAC_TXONLY 0XA1C2

IP 封装

该模式适用于基础架构不允许 EtherType 通过的情况。即使在该模式下,也假设服务引擎位于同一子网中。默认情况下,该模式适用于 AWS。

可以使用 se_ip_encap_ipc X 命令配置 IP 封装。

以下示例显示了使用 CLI 配置 IP 封装。

#shell
Login: admin
Password: 
[GB-slough-cam:cd-avi-cntrl1]: > configure serviceengineproperties
[GB-slough-cam:cd-avi-cntrl1]: seproperties> se_bootup_properties
[GB-slough-cam:cd-avi-cntrl1]: seproperties:se_bootup_properties> se_ip_encap_ipc 1
[GB-slough-cam:cd-avi-cntrl1]: seproperties:se_bootup_properties> save
[GB-slough-cam:cd-avi-cntrl1]: seproperties:> save
[GB-slough-cam:cd-avi-cntrl1]: > reboot serviceengine <IP 1>
[GB-slough-cam:cd-avi-cntrl1]: > reboot serviceengine <IP 2>
注:

为了使 se_ip_encap_ipc 命令更改生效,请重新引导服务引擎组中的所有服务引擎。

此模式中使用的 IP 协议包括:

  • IPPROTO_AVI_IPC 73

  • IPPROTO_AVI_MACINMAC 97

  • IPPROTO_AVI_MACINMAC_TX 63

IP 数据包

该模式适用于服务引擎位于不同子网的情况。发送到目标服务引擎的接口 IP 的 IP 数据包将发送到下一跳路由器。此模式中使用的 IP 协议包括:

  • IPPROTO_AVI_IPC_L3 75

  • IPPROTO_AVI_MACINMAC 97

BGP 路由器到 SE 故障检测方法

在配置了 BGP 时,将增强 SE 到 SE 故障检测,如下所述:

  • 双向转发检测 (Bidirectional Forwarding Detection, BFD) 检测 SE 故障,并提示路由器不要使用到故障 SE 的路由进行流量负载均衡。

  • 路由器使用 BGP 协议定时器检测 SE 故障。

故障检测算法

考虑一个已扩展虚拟服务的 SE 组。故障检测的顺序如下所述:

  1. 虚拟服务的主 SE 定期向虚拟服务的所有辅助 SE 发送检测信号消息。

  2. 如果一个 SE 的响应反复失败,则主 SE 怀疑该 SE 可能关闭。

  3. 将向 NSX Advanced Load Balancer 控制器 发送通知以指示可能的 SE 故障。

  4. NSX Advanced Load Balancer 控制器 发送一系列回显消息,以确认可疑的服务引擎是否确实关闭。

根据在服务引擎之间发送的检测信号消息的时间范围和频率,运行模式分为标准和激进。两种模式的算法相同,但频率和时间范围不同,如下所述:

  1. 主 SE 按自定义的间隔(例如 100 毫秒)向辅助 SE 发送检测信号消息。一系列连续的响应失败将表明给定 SE 可能关闭。根据第二列中显示的设置,如果出现以下情况,主 SE 将怀疑辅助 SE 关闭:

    • 在 1 秒内,10 个连续的检测信号消息失败(标准),或

    • 在 1 秒内,10 个连续的检测信号消息失败(激进)。不过,可以使用以下配置参数对其进行调整以使其更激进。

    • 在主 SE 怀疑辅助 SE 关闭时,它立即通知 NSX Advanced Load Balancer 控制器,后者向可疑的 SE 发送回显消息。根据第三列中显示的设置,控制器将在以下时间后宣布可疑的 SE 关闭:

      • 在 8 秒内,4 个连续的回显消息失败(标准),或

      • 在 4 秒内,2 个连续的回显消息失败(激进)。

通过将第二列和第三列中的值相加,控制器在标准设置中在 9 秒内断定发生故障,但在激进设置中在 5 秒内就断定发生故障。

根据 SE-DP 检测信号故障检测服务引擎故障所花的时间如下所示:

检测模式

SE-SE 检测信号消息

控制器-SE 回显消息

故障检测总时间

正常模式

检测信号周期:100 毫秒

回显周期:2 秒

1+8 = 9 秒

10 次连续失败

4 次连续失败

激进模式

检测信号周期:100 毫秒

回显周期:2 秒

1+4 = 5 秒

10 次连续失败

2 次连续失败

可以通过以下配置实现仅 2 秒的激进故障检测。不过,仅建议在裸机环境中使用,在虚拟化环境中,这会导致误报。

serviceengineproperties 指示激进超时值:

configure serviceengineproperties 
se_runtime_properties
|   dp_aggressive_hb_frequency                    | 100 milliseconds                |
|   dp_aggressive_hb_timeout_count                | 5                              |
se_agent_properties
|   controller_echo_rpc_aggressive_timeout        | 500 milliseconds               |
|   controller_echo_miss_aggressive_limit         | 3                               |

使用 CLI 启用激进模式

只能使用 CLI 将服务引擎故障检测设置为激进模式,如下所述。

登录到 NSX Advanced Load Balancer 控制器 的 Shell 指示符,并为选定的服务引擎组输入以下命令:

[admin:1-Controller-2]: > configure serviceenginegroup AA-SE-Group
  
[admin:1-Controller-2]: serviceenginegroup> aggressive_failure_detection
  
[admin:1-Controller-2]: serviceenginegroup> save

使用以下 show 命令验证设置:

[admin:1-Controller-2]: > show serviceenginegroup AA-SE-Group  | grep aggressive

| aggressive_failure_detection   | True

服务引擎文件是只读的

在某些情况下,服务引擎的文件系统变为只读。这会影响服务引擎功能,并且可能会导致无法解释的故障。只读状态可能是由于物理磁盘故障或服务引擎磁盘空间不足造成的。只能分析服务引擎 Syslog 文件以检测这种情况。