如何配置AWS Load Balancer将同会议用户路由至指定EC2机器?
AWS负载均衡配置方案(满足按会议ID绑定服务器的需求)
前提准备
- 客户端发起WebSocket握手请求时,必须将唯一会议ID放到固定可被ALB识别的位置,推荐两种方式二选一:
- 放在URL查询参数中,例如:
wss://你的服务域名/ws?meetingId=会议唯一标识 - 放在自定义HTTP请求头中,例如:
X-Meeting-ID: 会议唯一标识
- 放在URL查询参数中,例如:
- 你部署EC2的目标组健康检查配置正常,能准确识别故障节点。
具体配置步骤
1. 选择负载均衡器类型
直接选用应用负载均衡器(ALB),ALB天然支持WebSocket协议,且提供自定义属性粘性、灵活的路由算法,完全匹配你的需求。
2. 配置目标组参数
- 路由算法选择
最少未完成请求数,保证首次接入新会议的用户会被分配到当前负载最低的EC2实例。 - 空闲超时时间调整为大于你平台最长支持的会议时长,比如设置为28800秒(8小时),避免WebSocket长连接中途被ALB主动断开。
3. 开启自定义属性会话粘性
在目标组的属性配置中开启粘性,类型选择基于请求属性的粘性,按你之前约定的会议ID传递方式设置粘性键:
- 如果用查询参数传会议ID,粘性键设置为
query_param.meetingId - 如果用请求头传会议ID,粘性键设置为
http_header.X-Meeting-ID - 粘性超时时间同样设置为大于最长会议时长,保证整个会议周期内同会议ID的请求都绑定到同一台EC2。
4. 配置ALB监听器
新增对应端口的HTTP/HTTPS监听器,默认转发规则指向你配置好的目标组即可,ALB会自动识别WebSocket握手请求,完成协议升级后保持长连接,不需要额外特殊配置。
补充说明
如果某台EC2实例健康检查失败,ALB会自动解除该实例对应所有会议ID的粘性绑定,后续新接入该会议的用户会被重新分配到当前负载最低的健康实例,你可以根据业务需要补充服务端的会议状态同步逻辑,处理节点故障的场景。
内容的提问来源于stack exchange,提问作者Thomas Carlton
相关产品推荐
相关产品推荐

