searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

通过ELB的连接优雅中断功能实现业务平稳下线

2026-09-29 17:33:10
0
0
 

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' # 每秒刷新一次

客户端访问断连:

 

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

 

连接重新恢复

 

0条评论
0 / 1000
c****n
6文章数
0粉丝数
c****n
6 文章 | 0 粉丝
原创

通过ELB的连接优雅中断功能实现业务平稳下线

2026-09-29 17:33:10
0
0
 

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' # 每秒刷新一次

客户端访问断连:

 

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

 

连接重新恢复

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0