记一次线上故障排查
严重的线上问题
2021-06-23 晚上20:00开始,一个微信电话会议开始,jh的一个项目, mesos+marathon的架构,三控制,10计算(计算节点数量忘了), kylin的操作系统(sp2,好像),ft1500a的服务器,突然master1机器死机了, keepalived且切换到了master2,容器做了迁移,但是一切才刚开始。。。
所有容器,页面访问都明显变慢20多秒,
晚上8点开始电话会议,一直到11点,一直排查,没明显进展,apache2日志,nginx日志,php日志都看了 ,没什么头绪,11点多点,电话会议结束了。
12点,现场电话打过来了,让去现场,部门领导,技术总监都去,无奈,只好打车去了。
1小时后,到了现场,开始排查,一楼能访问页面,地下室才能连服务器,连接服务器还需要动态口令,还不让ssh。。。
直接用容器ip访问健康检查接口,15s才回复,就一个nginx镜像,获取静态文件很快,ms级别,获取一个.php文件15s以上。
之前电话会议的时候,我还让现场的人ping过域名,mysql.microservice.mesos.marathon也是通的,毫秒的
mysql -h 容器ip 要10秒才能连接进去,反复查询,发现mysql有一个反向解析,配置/etc/hosts后,获取链接变快了, 但是页面仅仅是快了5秒而已。问题依旧存在。。。
2个小时又过去了。此时,一个同时被电话叫醒,去拍技术总监的家门了。。。
就在此时,我在容器内ping mysql.microservice.mesos.marathon ping不通了, 突然看了一下/etc/resolv.conf文件,竟然!!!配置了3个nameserver(3控),第一个nameserver就是master1, 然而,master1死机了,注释掉地一个nameserver,果然,页面访问恢复了。。。
立马告诉技术总监,不用来了,接着睡吧,解决了。。。
原来是宿主机上/etc/resolv.conf文件是空的,容器里获取到了3个主控的ip, 理论上,宿主机的/etc/resolv.conf应该配置虚拟ip的(多控),单控的话就配置master1的ip,这样mesos-dns就可以解析
有了解决方案之后,基本就没我什么事了,剩下写报告,就交给他们了。
又查了查/etc/resolv.conf,果然,默认5s超时,重试2次,5s的倍数的延时,就是访问了多次其他服务。。。
坑啊。。。