迁移AWS Linux1至Linux2切换DNS后报503服务不可用错误
AWS Linux 1 迁移到 AWS Linux 2 切流后返回503 Back-end server is at capacity 修复方案
503 Service Unavailable: Back-end server is at capacity 标记来源为Network时,基本都是负载均衡层返回的错误,和迁移过程中的漏配直接相关,按以下优先级排查修复即可,不需要额外扩容:
- 优先排查负载均衡器后端实例健康状态
这个报错最常见的触发原因是Classic Load Balancer(CLB)将所有后端实例标记为OutOfService,此时所有流量不会转发到实例,直接返回该503。迁移时常见漏项:- AL2实例的安全组未放通负载均衡器的健康检查、业务访问端口
- 健康检查配置的端口、路径和AL2上实际部署的业务不匹配:比如AL1上业务跑在80端口,AL2上改到8080但没更新LB健康检查配置
验证方式:在EC2控制台负载均衡详情页查看后端实例状态,若为OutOfService,先登录AL2实例本地执行curl -v http://127.0.0.1:业务端口/健康检查路径确认本地访问正常,再调整安全组、LB健康检查规则直到实例状态变为InService。
- 排查AL2默认系统配置拦截流量
AWS Linux 2和AL1的默认系统配置有几处高频踩坑点,迁移时很容易遗漏:- AL2默认开启
firewalld服务,AL1默认关闭该服务,未配置放行规则时会直接拦截来自LB的流量。可执行systemctl status firewalld确认状态,测试阶段可先执行systemctl stop firewalld && systemctl disable firewalld验证是否为防火墙拦截,生产环境按需添加端口放行规则即可。 - AL2默认预装的Web服务版本更高:比如默认httpd版本从2.2升级到2.4,部分配置迁移后会出现服务仅监听127.0.0.1的情况,LB流量无法到达业务。执行
ss -tulnp | grep 业务端口确认监听地址为0.0.0.0:端口而非127.0.0.1:端口,修正服务监听配置后重启服务即可。
- AL2默认开启
- 排查TCP连接队列溢出问题
AL2默认的内核连接队列参数比AL1小,高并发场景下会出现TCP全连接队列打满,LB无法建立连接判定实例不可用。临时调整参数验证:
确认问题解决后,将上述参数写入sysctl -w net.core.somaxconn=65535 sysctl -w net.ipv4.tcp_max_syn_backlog=65535/etc/sysctl.conf执行sysctl -p永久生效。 - 最后核对DNS解析结果
执行nslookup 你的业务域名确认解析到的负载均衡地址是新环境对应的LB地址,排除切流时填错LB地址、把流量导到无后端实例的空LB的低级错误。
内容的提问来源于stack exchange,提问作者Manu Bouzas
相关产品推荐
相关产品推荐

