为避免与虚拟隧道端点 (Tunnel Endpoint, TEP) 关联的工作负载(虚拟机或容器)发生连接中断,请配置 TEP HA 主机交换机配置文件并将其应用于集群传输节点或单个传输节点。
由于跨 L2 或 L3 网络的覆盖网络使用封装协议,工作负载(虚拟机或容器)的传出或传入数据包将会封装在虚拟隧道端点 (TEP) 的外部数据包中。如果 TEP 进入故障状态,则与其关联的虚拟机将无法访问。虚拟机与 TEP 之间存在一对一的映射。
若发生以下任一情况,TEP 将出现故障:
- 由于底层 Fabric 中的问题,TEP 的所有 BFD 会话均已关闭。
- TEP 没有 IP 地址。
正常运行的 TEP 应具有以下特征:
- 具有 IP 地址。
- 至少有一个与 TEP 关联的 BFD 会话处于启动状态。
当 NSX 发现某个 TEP 已关闭时,虚拟机的 vNIC 将从故障 TEP 迁移到同一 ESXi 主机上正常运行的 TEP。如果 ESXi 具有两个 TEP,并且两个 TEP 均出现故障,则无法迁移虚拟机 vNIC。
每个虚拟机都可以有多个 vNIC,每个 vNIC 都与一个 TEP 相关联。来自 vNIC 的数据包将先封装,然后再通过上行链路发出。可以有多个 vNIC 映射到同一个 TEP。将根据上行链路绑定策略确定映射。
注: TEP HA 仅支持 IPv4 TEP。
前提条件
在一个 ESXi 主机上至少配置两个 TEP。确保用于创建传输节点配置文件 (Transport Node Profile, TNP) 或单个传输节点配置的上行链路配置文件至少使用两个活动上行链路 (TEP)。
过程
- 创建一个 TEP HA 主机交换机配置文件。
PUT https://<nsx-policy-manager>/policy/api/v1/infra/host-switch-profiles/vtephaprofile1
{
"enabled": "true",
"failover_timeout":"5",
"auto_recovery" : "true",
"auto_recovery_initial_wait" : "300",
"auto_recovery_max_backoff" : "86400",
"resource_type": "PolicyVtepHAHostSwitchProfile",
"display_name": "VtepHAProfile1"
}
其中,
- enabled:指示是否已启用 TEP HA。“true”值表示 TEP HA 已启用,“false”则表示已禁用。
- failover_timeout:TEP 高可用性功能故障切换超时(以秒为单位)。此属性用于控制一旦在 vmknic 上检测到故障,应在多长时间后将虚拟机 vNIC 迁移到正常运行的备用 TEP。默认超时值为 5 秒。支持的最大值为 60 秒。
- auto_recovery:指定 TEP 高可用性功能的自动恢复选项的状态。如果将 auto_recovery 设置为 true,则会在每次循环序列后在内部检查发生故障的 vmknic。如果故障 vmknic 恢复,虚拟机将迁移回其初始 TEP 映射,前提是已将虚拟机 vNIC 映射到该 TEP。默认情况下,auto_recovery 设置为 true。在自动恢复期间,如果 TEP 仍处于故障状态,虚拟机将发生中断。中断时间使用以下公式计算:
failover_timeout + bfd timeout + 1
。默认 bfd timeout
值为 4 秒。
- auto_recovery_initial_wait:此属性用于控制应在多长时间后启动自动恢复。最短初始等待时间为 300 秒,而最长等待时间为 3600 秒。如果初始等待时间为 300 秒,则会在 300 秒后启动自动恢复。
- auto_recovery_max_backoff:在 auto_recovery_initial_wait 后尝试初始恢复。如果此恢复失败,则会在将之前的延迟时间增加一倍后进行其他尝试。当延迟达到 auto_recovery_max_backoff 时,延迟将停止增加,并且每隔 auto_recovery_max_backoff 完成一次所有其他尝试。
- 要将 TEP HA 配置文件连接到所有 ESXi 主机,请创建一个 TNP 并在其“主机交换机配置文件”部分添加 TEP HA 配置文件中的键和值属性,或者使用 TEP HA 配置文件中的键和值属性准备单个传输节点。
PUT https://<nsx-policy-manager>/policy/api/v1/infra/host-transport-node-profiles/<tnp-id>
在 <tnp-id>
参数中,输入传输节点配置文件 ID。
{
"host_switch_spec": {
"host_switches": [
{
"host_switch_name": "vtepha_vds",
"host_switch_id": "50 22 ee c4 f6 40 79 8b-0e a4 2b da 6a 4c 36 b3",
"host_switch_type": "VDS",
"host_switch_mode": "ENS_INTERRUPT",
"host_switch_profile_ids": [
{
"key": "UplinkHostSwitchProfile",
"value": "/infra/host-switch-profiles/b32e6ce6-f1ba-4e31-a2c4-33d550505cdd"
},
{
"key": "VtepHAHostSwitchProfile",
"value": "/infra/host-switch-profiles/vtephaprofile1"
}
],
"uplinks": [
{
"vds_uplink_name": "Uplink 1",
"uplink_name": "uplink-1"
},
{
"vds_uplink_name": "Uplink 2",
"uplink_name": "uplink-2"
}
],
"is_migrate_pnics": false,
"ip_assignment_spec": {
"ip_pool_id": "/infra/ip-pools/v4",
"resource_type": "StaticIpPoolSpec"
},
"cpu_config": [],
"transport_zone_endpoints": [
{
"transport_zone_id": "/infra/sites/default/enforcement-points/default/transport-zones/de47a6b9-fa4c-4bf3-bd75-385859895949",
"transport_zone_profile_ids": []
}
],
"not_ready": false
}
],
"resource_type": "StandardHostSwitchSpec"
},
"ignore_overridden_hosts": false,
"resource_type": "PolicyHostTransportNodeProfile"
}
注: 如果没有为 TNP 配置 TEP HA,NSX 会创建一个默认 TEP HA 配置文件。将使用默认值配置此默认 TEP HA 配置文件。TEP HA 将处于禁用状态。
- 要获取在步骤 1 中创建的 TEP HA 配置文件 ID,请运行以下 API:
get https://<nsx-manager>/policy/api/v1/infra/host-switch-profiles/vtephaprofile1
在 GET 响应中,您可以从 id
字段中获取 TEP HA 配置文件的 ID 值。
- 要验证是否已将 TEP HA 主机交换机配置文件应用于传输节点,请运行以下 API。
GET https://<nsx-manager>/policy/api/v1/infra/host-transport-nodes-profiles/<tnp_id>
"host_switch_profile_ids": [
{
"key": "VtepHAHostSwitchProfile",
"value": "/infra/host-switch-profiles/<vtephaprofile1>"
}
],
<vtephaprofile1>
是您在步骤 1 中创建 TEP HA 配置文件时返回的 ID。
- 您还可以对故障 TEP 进行手动恢复,并将关联的虚拟机迁移到正常运行的 TEP,而无需等待自动恢复开始。
POST https://<nsx-mgr>/policy/api/v1/infra/sites/<site-id>/enforcement-points/<enforcementpoint-id>/host-transport-nodes/<host-transport-node-id>/vteps/actions
{
"action_type": "TransportNodeVtepRecoveryRequest",
"device_name": "vmk10"
}
其中,vmk10 为 TEP 名称。
- 如果 TEP 的 vmknic 出现故障,可运行警报 API 以查看与错误相关的详细信息,也可在 NSX Manager 仪表板上查看错误。
如果 vmknic 出现故障,NSX 可能至少需要 60 秒才会发出警报。同样,在 TEP 从故障状态重新启动后,NSX 可能最多需要 60 秒才会反映新状态。
GET https://<nsx-manager>/api/v1/alarms?feature_name=tep_health
- 修复与 IP 或 BFD 相关的错误后,请验证 state 参数以了解 vmknic 或 TEP 状态。
GET https://<nsx-manager>/api/v1/transport-nodes/<node-id>/network/interfaces?source=realtime
{
"interfaceId": "vmk10",
"linkStatus": "UP",
"adminStatus": "UP",
"mtu": "1600",
"interfaceAlias": [{
"broadcastAddress": "133.117.22.255",
"ipAddress": {
"ipv4": 2239043120
},
"ipConfiguration": "STATIC",
"netmask": "255.255.255.0",
"macAddress": "00:50:56:66:67:a6"
}],
"state": "NORMAL"
},
结果
如果 BFD 已关闭,NSX 会使用自动恢复或手动恢复机制确定故障 TEP 是否已重新启动。
如果 IP 最初不可用但被重新分配给故障 TEP,NSX 将使用内置机制来确定 TEP 何时重新启动,而不会依赖于手动或自动恢复机制。
如果故障 TEP 未重新启动:
- 在自动恢复或手动恢复过程中,虚拟机 vNIC 可能会遇到暂时性的网络中断。
- 之所以会发生网络中断,可能是因为在 BFD 检查期间,虚拟机 vNIC 仍映射到故障 TEP。
- 网络中断时间使用以下公式计算:
failover_timeout + bfd timeout + 1
,即 10 秒。默认 bfd timeout
值为 4 秒。
如果故障 TEP 仍未重新启动,则会将虚拟机 vNIC 重新映射到主机上可用的正常运行的 TEP。如果没有正常运行的 TEP,则会将虚拟机 vNIC 映射到其原始 TEP。