故障检测对于实现服务引擎高可用性至关重要。
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_PARTITIONED
或 OPER_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 组。故障检测的顺序如下所述:
虚拟服务的主 SE 定期向虚拟服务的所有辅助 SE 发送检测信号消息。
如果一个 SE 的响应反复失败,则主 SE 怀疑该 SE 可能关闭。
将向 NSX Advanced Load Balancer 控制器 发送通知以指示可能的 SE 故障。
NSX Advanced Load Balancer 控制器 发送一系列回显消息,以确认可疑的服务引擎是否确实关闭。
根据在服务引擎之间发送的检测信号消息的时间范围和频率,运行模式分为标准和激进。两种模式的算法相同,但频率和时间范围不同,如下所述:
主 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 文件以检测这种情况。