1、使用场景
后端应用是用Ruby Goliath框架写的纯webapi接口,以IP+Port的方式对外提供接口调用访问,其中应用监听在全网(公网+私网)的3600端口。
使用SLB的目前是为了防止单点故障, 后端应用已经做到了水平扩展,也就是SLB下面可以很容易地挂任意多个ECS,目前测试阶段,采用的是
1 SLB下面挂 2个ECS
2、SLB配置
其中SLB的基本配置如图1 所示
图1 SLB的基本配置
并且将健康检查的标签打开,配置如图2
图2 健康检查设置
3、问题描述
按照图1 和 图2 中的描述配置SLB和后端ECS端口后,查看控制台,发现健康检查失败,如图3所示
图3 健康检查失败
4、排查及求助
4.1 首先排查后端应用是否正常启动live@iZ23wyub74zZ:~$ lsof -i:3600
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 4708 live 13u IPv4 2627912 0t0 TCP *:3600 (LISTEN)live@iZ23scxzq4jZ:~$ lsof -i:3600
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 27755 live 13u IPv4 5105606 0t0 TCP *:3600 (LISTEN)
可以看到,两台机器上面的3600端口都是正常监听的,因此可以确认的是,后端进程是正常的,因此提工单向阿里云同事求助
4.2 求助工单
将问题描述清楚后,收到了阿里云同事的电话支撑,我将SLB和后端服务器的配置告知后,阿里同事提醒了一句,如果SLB采用http 7层应用协助
默认是用80端口,如果后端服务不是启动在80端口,就应该使用4层的TCP协助,并将SLB的端口和后端服务器端口设置为应用服务启动端口。
按照提示,将之前的配置规则删除,然后重新创建配置规则,如图4所示
图4 新的协议配置(TCP协议)
然后开启健康检查,端口同样填写3600,回到控制台,此时健康检查终于正常,如图5所示!
图5 健康检查正常
5、总结
5.1 如果大家的应用场景和我相似,而且问题也是健康检查失败,那么就重点看下协议的选择,到时是选4层的TCP还是7层HTTP(默认80端口)
5.2 遇到不能及时解决的问题,就请及时提交工单,目前来看,阿里云的工单响应速度还是比较及时,在此点个赞,也希望阿里后面能够做得更好。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。