1 概述
连接优雅中断功能主要用于在负载均衡器中优雅地终止实例连接,当移除某个后端服务器或者后端服务器健康检查异常时,排空功能会阻止新请求发送到该实例,但允许已建立的连接继续处理,直到超时或完成,保障业务平稳下线
以下图场景为例进行应用场景说明:

1.1 移除后端服务器(手动或自动缩容):
ELB关闭连接优雅中断功能,当ECS02被移除时,
● 新的请求:立即停止转发到ECS02实例
● 存量连接:依赖TCP连接自然结束(客户端断开或超时),不会主动强制中断。若存在长连接(如WebSocket),实例可能长时间无法下线
ELB开启连接优雅中断功能,当ECS02被移除时,
● 新的请求:立即停止转发到ECS02实例
● 存量连接:为移除的实例设置超时时间(默认300秒),期间继续处理存量请求,超时后强制断开连接
1.2 健康检查异常
ELB关闭连接优雅中断功能,当ECS04健康检查异常时,
● 新的请求:立即停止转发到健康检查异常的ECS02实例
● 存量连接:依赖TCP连接自然结束(客户端断开或超时),不会主动强制中断。若存在长连接(如WebSocket),实例可能长时间无法下线
ELB开启连接优雅中断功能,当ECS04健康检查异常时,
● 新的请求:立即停止转发到ECS04实例
● 存量连接:为移除的实例设置超时时间(默认300秒),期间继续处理存量请求,超时后强制断开连接
a) 如果健康检查异常的后端服务器ECS04有进行中的请求,ELB会在设置的优雅中断超时时间到达时关闭ECS04上的存量连接会话。
b) 当异常服务器ECS04 重新通过健康检查,ELB会 自动恢复 接收新请求
2 注意事项
针对不同场景的中断时间设置建议如下:
1. 后端服务器移除场景,建议超时时间:300秒(5分钟)或更长,确保存量请求(如支付事务、数据库操作)完成处理,避免强制中断导致数据不一致
2. 健康检查异常场景,建议超时时间:15-60秒,快速隔离故障节点,减少错误请求堆积。
3 前提条件
1 已创建ELB实例,并创建http监听器
2 已创建后端服务器ECS01,ECS02,ECS03,ECS04
3 后端服务器组http1已添加ECS01,ECS02,后端服务器组http2已添加ECS03,ECS04
4 场景1:移除后端服务器
4.1 websocket连接
4.1.1 登录ECS02,部署websocket服务
步骤1:安装websockets包

步骤2:编写websockets服务脚本,并上传至ECS02的制定目录下
使用python启动websockets服务脚本

步骤3:上传至服务器:

步骤4:启动websocket服务

步骤5:客户端配置elb的地址及端口,可正常访问websocket服务
查看elb配置,获取监听地址及端口

配置websocket客户端访问elb地址,连接成功

4.1.1 结果验证:未开启优雅中断,移除后端主机
步骤1:未开启优雅中断

步骤2:从后端主机组移除云主机后

移除成功

在长连接场景下,会一直保持连接状态,客户端仍然访问成功
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问正常:

4.1.2 结果验证:开启优雅中断,移除后端主机
步骤1:重新加入后端主机组,并开启“连接优雅中断”,设置中断超时时间为 30秒

客户端访问websocket服务正常

步骤2:手动移除后端云主机


优雅中断超时时间内,正常响应
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问正常:

超过优雅中断超时时间30s,连接被终止
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问断连:

5 场景2:健康检查异常
5.1 websocket连接
5.1.2 结果验证:未开启优雅中断,健康检查异常
步骤1:未开启优雅中断

步骤2:健康检查异常后

在长连接场景下,会一直保持连接状态,客户端仍然访问成功
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问正常:

5.1.3 结果验证:开启优雅中断,健康检查异常
步骤1:开启“连接优雅中断”,设置中断超时时间为 60秒

客户端访问websocket服务正常

步骤2:健康检查异常后

新连接立即停止转发

优雅中断超时时间内,存量链接正常响应
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问正常:

超过优雅中断超时时间60s,连接被终止
查看端口连接状态:
watch -n 1 'sudo ss -tnp sport = :8765' # 每秒刷新一次

客户端访问断连:

健康检查恢复后,连接恢复

连接重新恢复
