可以使用标准负载均衡器,通过为给定规则启用“空闲时执行 TCP 重置”,为方案创建可预测度更高的应用程序行为。 负载均衡器的默认行为是,当流的空闲超时时间到达时,静默地丢弃该流。 启用 TCP 重置会导致负载均衡器在出现空闲超时情况时发送双向 TCP 重置(TCP 重置数据包),以通知应用程序终结点该连接超时且不再可用。 终结点可以视需要立即建立新连接。
TCP 重置
你可以更改此默认行为,并启用针对入站 NAT 规则、负载均衡规则和出站规则在空闲超时时发送 TCP 重置报文。 根据规则启用时,负载均衡器将在所有匹配流出现空闲超时情况时向客户端和服务器终结点发送双向 TCP 重置(TCP RST 数据包)。
接收 TCP RST 数据包的终结点会立即关闭相应的套接字。 这会立即通知终结点该连接已释放,并且同一 TCP 连接上的任何后续通信都将失败。 应用程序可以在套接字关闭时清除连接,并根据需要重新建立连接,而无需等待 TCP 连接最终超时。
在许多情况下,TCP 重置可以减少发送 TCP(或应用程序层)以刷新流空闲超时的需要。
在TCP重置和保持活之间选择
请使用以下标准来决定您的情景需要哪种机制:
- 当你希望端点立即通知空闲流关闭时,启用TCP重置功能,这样应用程序可以清理并重新建立连接,而无需等待自己的TCP超时。
- 当空闲时间超过可配置的空闲超时范围,或者应用在启用TCP复位后表现异常时,使用TCP保活。 不建议移动应用程序使用保活机制,因为这会更快地消耗设备电池电量。
- 当连接在传输路径中的某处经过代理时,请使用应用层保活机制,因为代理可能会终止传输层保活机制所维持的 TCP 连接。
通过仔细分析整个端到端场景,您可以判断启用TCP重置和调整空闲超时的好处。 然后决定是否需要更多步骤以确保所需的应用行为。
可配置的 TCP 空闲超时
Azure 负载均衡器 Standard 对负载均衡器规则和入站 NAT 规则的超时范围为 4 分钟到 100 分钟。 出站规则 可配置为4到120分钟。 默认时间是所有规则类型4分钟。 如果处于非活动状态的时间超过超时值,则不能保证在客户端和云服务之间保持 TCP 或 HTTP 会话。 Azure 负载均衡器 Basic(已退役)超时时间范围最多可达60分钟。
当连接关闭时,客户端应用程序可能收到以下错误消息:“基础连接已关闭: 应保持连接状态的连接已由服务器关闭”。
如果启用了 TCP 重置,但由于某些原因而错过了相应数据包,则会针对任何后续数据包进行重置。 如果未启用 TCP 重置选项,则会以无提示方式删除数据包。
常见的做法是使用 TCP 保活机制。 这种做法可以使连接状态保持更长时间。 有关详细信息,请参阅 .NET 示例。 启用保活后,会在连接空闲期间发送数据包。 保活数据包可确保不会达到空闲超时阈值,从而使连接能够长时间保持。
本节描述的TCP保持活化仅适用于入站连接。 出站规则可单独支持 TCP 重置和可配置的空闲超时。 为了避免断开连接,请将 TCP 保持连接的时间间隔配置为小于空闲超时设置,或者提高空闲超时值。 为支持这些场景,现已提供对可配置空闲超时的支持。
TCP 保持连接状态适用于电池续航时间不受限制的情况。 不建议将其用于移动应用程序。 在移动应用程序中使用 TCP 保持连接状态可能会加快设备电池的耗尽速度。
优先级顺序
请考虑到为不同 IP 设置的空闲超时值之间可能产生的相互影响。
入站
- 如果某个(入站)负载均衡器规则设置的空闲超时值与其引用的前端 IP 的空闲超时值不同,则以前端 IP 的空闲超时值为准。
- 如果入站 NAT 规则的空闲超时值设置与它引用的前端 IP 的空闲超时不同,则优先采用负载均衡器前端 IP 空闲超时。
出站
- 如果存在某个出站规则,其空闲超时值不是 4 分钟(公共 IP 的出站空闲超时固定为 4 分钟),则以该出站规则的空闲超时为准。
- 由于 NAT 网关始终优先于负载均衡器出站规则(并且优先于直接分配至 VM 的公共 IP 地址),因此将使用分配至 NAT 网关的空闲超时值。 (同样地,分配给 NAT GW 的任何 IP 的固定公共 IP 出站空闲超时时间(4 分钟)也不予考虑。)
限制
以下限制适用于 Azure 负载均衡器 上的 TCP 重置和空闲超时:
- TCP 重置报文仅在 TCP 连接处于 ESTABLISHED 状态期间发送。
- UDP负载均衡规则不支持空闲超时。
- 当网络虚拟设备 (NVA) 位于流量路径中时,内部负载均衡器的高可用性 (HA) 端口规则不支持 TCP 重置功能。 作为一种变通方法,请使用网络虚拟设备中的 TCP 重置出站规则。
- 当用户定义路由(UDR)将流量转发到内部负载均衡器时,内部负载均衡器的HA端口规则不支持TCP空闲超时。
后续步骤
- 了解标准负载均衡器。
- 了解出站规则。
- 配置空闲超时时的 TCP RST