919
阿里云
同一客户端访问多个负载均衡实例失败或超时__异常排查_负载均衡-阿里云
应用场景
将相同ECS同时挂载在多个负载均衡实例的后端,并在这些负载均衡实例下创建相同的后端端口的四层监听。在这种场景下,用户用同一台客户端去同时访问这些负载均衡实例时,有时会出现失败或超时。
架构图
如上图所示,用户有两个负载均衡实例SLB1和SLB2,分别有两个TCP监听,其前端端口不一致,但后端端口一致,并且这两个监听后端挂载了相同的云服务器ECS。当一个用户Client去访问这两个SLB实例时,访问可能会失败。
具体原因
- 四层 (TCP协议) 负载均衡会对用户的访问流量在入方向做DNAT
- 当客户端访问SLB1时,CIP:CPORT->VIP1:VPORT1的连接在到达后端ECS的时候,会被转换成CIP:CPORT->DIP:DPORT。
- 当客户端访问SLB2时,CIP:CPORT->VIP2:VPORT2的连接在到达后端ECS的时候,也会被转换成CIP:CPORT->DIP:DPORT;
两条TCP连接的序列号和TCP状态在后端服务器上互相干扰,导致建连失败,即Client建立的两条连接在后端服务器上变成了同样的五元组TCP:CIP:CPORT:DIP:DPORT
注⚠:
CIP: Client IP (客户端IP);
VIP1: 负载均衡实例SLB1的IP地址;
VIP2: 负载均衡实例SLB2的IP地址;
VPORT1: 负载均衡实例SLB1的监听前端端口;
VPORT2: 负载均衡实例SLB2的监听前端端口;
DIP: 后端服务器的IP地址;
DPORT: 后端服务器的端口;
解决思路
在这样的场景下,需要在后端服务器上避免出现同样的五元组,因协议类型固定为TCP,则需要调整后面的四元组组成。
1.避免CIP冲突: 如果后端服务是HTTP服务,可将其中一个SLB实例的四层监听切换为七层监听,七层SLB监听通过HTTP头部的X-Forward-For字段获取客户端源地址,二者不会产生冲突;另外,使用不同的Client访问这两个监听也可避免此问题出现。
2.避免CPORT冲突: 在Client发起针对VIP1、 VIP2的TCP建连请求时,指定源端口CPORT进行访问(如访问VIP1时使用CPORT范围是10000 – 29999,访问VIP2时使用CPORT范围是30000 – 49999)。
3.避免DIP冲突:即避免同一个后端服务器挂载在多个SLB实例后面。
4.避免DPORT冲突:如果后端服务非HTTP服务,则可将其中一个SLB实例四层监听的后端服务器服务端口修改,也可以避免该问题。
最后更新:2016-12-20 19:37:08
上一篇:
部署负载均衡集群支持会话同步__常见问题_负载均衡-阿里云
下一篇:
curl正常但健康检查异常__异常排查_负载均衡-阿里云
扩容XFS磁盘 (Linux)__扩容磁盘概览_磁盘_用户指南_云服务器 ECS-阿里云
LogSearch-报警__Getting-Started_日志服务-阿里云
容器服务监控__云服务监控_用户指南_云监控-阿里云
扩容__购买磁盘_购买指南_云服务器 ECS-阿里云
基于OSS的移动开发__接入OSS_开发人员指南_对象存储 OSS-阿里云
多路输入输出示例__示例程序_MapReduce_大数据计算服务-阿里云
案例__规则引擎_规则引擎-阿里云
推荐引擎__数加产品概览_数加平台介绍-阿里云
性能压测注意事项__快速入门_云数据库 HybridDB-阿里云
连接数据库实例__快速入门_云数据库 HybridDB-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云