发生在阿里云 SLB 4 层的一次故障记录
阿里云 SLB 与 ECS 之间发生故事。环境如下:
SLB api-node: 该 SLB 后端接着 10 台节点服务器
SLB sql-node: 该 SLB 后端接着 2 台节点服务器
问题描述:
访问 web 站点发现,连续点击几次页面就会有一次请求时间很长 30s 。
这个 30s 是超过了 php.ini 中 max_execution_time = 30 该参数的设置最大值,最终请求失败,返回 400 。
分析故障现象应该是有一台 api-node 有问题,当请求被轮询到该节点时,请求失败。
通过监控服务器观看,各个 api-node 负载都均衡,无法直观的发现是哪台服务器故障。
(如果有每台 api-node 的访问日志,做了日志分析,可以通过统计图直观的反应出来)
最终写脚本拿问题URL去循环请求每台 api-node ,发现了这台问题服务器。
通过开发人员调试代码,发现问题为该节点连接数据库故障。具体情况如下:
1、该 ECS 请求三四次数据库的SLB就会出现连接超时。( 直接使用 mysql 命令连接 )
2、该 ECS 单独去请求数据库SLB后端的服务器,没有任何问题。
通过上面的测试,排除服务器环境、代码、数据库服务器的问题。最终问题定位在数据库的SLB上。
由于是做 mysql 的负载均衡,使用的是 TCP 协议的 4 层负载均衡。
向阿里云发起工单,提交问题,经过一系列排查,最终阿里云给出故障原因及解决方法如下:
"这是由于您使用的slb 4层tcp 协议,由于slb 的一些底层架构原因引起的,这个问题我们也已经向后端反馈过了;
只要客户端ecs 的内网ip 和 slb 后端的ecs 内网ip 有在一个路由段的,就会出现这个问题;
建议您可以手工删除slb 后端ecs 重复的路由条目,或者将您的slb 配置修改成7层http 协议"
解决方法:
1、登录问题 ECS 查看路由表
shell > route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
159.110.44.0 0.0.0.0 255.255.252.0 U eth1
110.27.240.0 0.0.0.0 255.255.252.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth1
172.16.0.0 110.27.243.247 255.240.0.0 UG eth0
100.64.0.0 110.27.243.247 255.192.0.0 UG eth0
10.0.0.0 110.27.243.247 255.0.0.0 UG eth0
0.0.0.0 159.110.47.247 0.0.0.0 UG eth1
2、登录数据库 SLB 后端 ECS 查看路由表 ( 与问题 ECS 内网同一网段的服务器 )
shell > route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
59.110.20.0 0.0.0.0 255.255.252.0 U eth1
110.27.240.0 0.0.0.0 255.255.252.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth1
172.16.0.0 110.27.243.247 255.240.0.0 UG eth0
100.64.0.0 110.27.243.247 255.192.0.0 UG eth0
10.0.0.0 110.27.243.247 255.0.0.0 UG eth0
0.0.0.0 159.110.23.247 0.0.0.0 UG eth1
3、删除这台数据库服务器内网地址与问题 ECS 重复的路由 (只删数据库服务器这台就可以)
shell > route del -net 110.27.240.0 netmask 255.255.252.0 dev eth0 shell > route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
159.110.20.0 0.0.0.0 255.255.252.0 U eth1
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth1
172.16.0.0 110.27.243.247 255.240.0.0 UG eth0
100.64.0.0 110.27.243.247 255.192.0.0 UG eth0
10.0.0.0 110.27.243.247 255.0.0.0 UG eth0
0.0.0.0 159.110.23.247 0.0.0.0 UG eth1
# 经测试,问题解决。最终关闭工单提示,实际处理时长:6小时2分钟
# 记录:确保以后新买的需要访问数据库 SLB 的 ECS 不与数据库 SLB 后端的 ECS 在同一内网段,如果在,删除数据库 SLB 后端 ECS 重复路由。
发生在阿里云 SLB 4 层的一次故障记录的更多相关文章
- 阿里云SLB后Nginx、Tomcat获取真实IP
一.SLB后Nginx如何获取真实IP 前提:nginx作为slb获取真实ip是使用 http_realip_module,默认一键安装包安装的nginx没有安装这个模块需要重新重新编译nginx并加 ...
- [网站公告]3月10日23:00-4:00阿里云SLB升级,会有4-8次连接闪断
大家好,阿里云将于3月10日23:00-4:00对负载均衡服务(SLB)做升级操作,升级期间SLB网络连接会有约4-8次闪断.由此给您带来麻烦,敬请谅解! 阿里云SLB升级公告内容如下: 尊敬的用户: ...
- [云上天气预报-有时有闪电]2月3日23:00-4:00阿里云SLB升级期间网络会闪断
大家好,2月3日23:00-2月4日4:00,阿里云将对SLB(负载均衡)进行升级,在升级期间,SLB会有约4-8次的网络闪断.由此给您带来麻烦,望谅解! 阿里云官方公告内容如下: 尊敬的用户: 您好 ...
- 解决阿里云SLB无法添加https证书的问题
私钥是在Linux中通过下面的openssl命令生成的: openssl req -new -newkey rsa:2048 -nodes -keyout cnblogs.key -out cnblo ...
- 阿里云SLB出现502 Bad Gateway 错误排查解决方法
502 Bad Gateway The proxy server received an invalid response from an upstream server. 原本系统是通过一个SLB转 ...
- 记阿里云SLB后配置Nginx反向代理百度地图API的坑
需求: 百度的原始请求:https://api.map.baidu.com/place/v2/suggestion?query=s®ion=sc&city_limit=true& ...
- 阿里云SLB负载均衡与使用SSL域名证书
阿里云SLB负载均衡与使用SSL证书 1.购买两台ECS服务器,这就是后台服务器,在这两个服务器上面部署你的网站,注意网站的端口要一样:比如都是 88. 2.在阿里云控制台的菜单里找到 负载均衡,创建 ...
- 阿里云SLB快速切换至https
域名caifuxiang.com是直接解析到阿里云SLB的,运行了好几年的http服务,今天通过修改配置快速切换到了https,莫名就感觉更上档次了! 首先,SSL证书 服务可以提供免费单域名证书 w ...
- 阿里云slb实现多域名https
刚开始接锅,没注意原来站点的https配置在slb上,在服务器上配置一顿操作猛如虎,细细检查一遍,感觉良好,一测试发现不对劲,检查发现原来https配置在阿里云slb上,阿里云还是做得不错的 ,但是现 ...
随机推荐
- BZOJ4668 冷战 【LCT】
Description 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表"铁幕演说",正式拉开了冷战序幕. 美国和苏联同为世界上的"超级大国&quo ...
- UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接
古老的 Win32 应用启动其他程序太过方便,以至于一部分开发者都已经不记得 Windows 能通过关联协议的方式通过统一资源定位符(URI)来启动应用程序了. 转到 UWP 后,使用 URI 启动应 ...
- flask第十八篇——模板【2】
请关注公众号:自动化测试实战 上一节我们介绍了模板的基本使用方法,现在我们想一个问题,如果把index.html放到template文件夹下面的文件夹该怎么办呢?其实很容易,当文件夹结构如下图所示时: ...
- 以gevent(协程) 方式跑uwsgi服务
当你的系统存在一些IO或网络请求较久的操作时, 如果以默认的方式启动uwsgi服务, 那么如果这类请求过多的时候, 所以进程被卡死. uwsgi就无法再对后续请求做处理了. 这时可以用gevent的方 ...
- mysql执行导入导出数据源
mysql执行导入导出数据源 一.导出数据表结构 导出数据库建表的结构,不带数据,windows环境下,在cmd下,执行: mysqldump –no-data –u username –p* dat ...
- vue怎么自定义指令??
最近看看vue中自定义指令,感觉vue的指令和angular1的指令相差较大 <script> //指令钩子函数: /* bind 只调用一次,指令第一次绑定到元素的时调用 inserte ...
- ZooKeeper+Kafka+Storm
http://www.cnblogs.com/panfeng412/archive/2012/11/30/how-to-install-and-deploy-storm-cluster.html
- 1、Docker学习笔记
Docker是一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.它是一个开发的平台,用来为开发者和系统管理员构建.发布和运行分布式应 ...
- HTML第一讲
HTML标记区分 HTML即超文本标记语言(HtyperText Markup Language),其作用就是将编辑的内容在屏幕上显示.文件的后缀为.HTML. 在HTML中成对出现的叫做双标记(譬如 ...
- Unit02: 参数值注入 、 基于注解的组件扫描
Unit02: 参数值注入 . 基于注解的组件扫描 (4)IOC (Inversion Of Controll 控制反转) 什么是IOC? 对象之间的依赖关系由容器来建立. 什么是DI? (Depen ...