一例生产网中断,导致管理网无法ssh的事件分析


事件过程:nas挂载中断,patrol监控系统告警后,经查看生产网络不通,带管网络只能ping通,无法ssh,只能通过iLO的控制台登录,且执行route,arp等相关网络命令时,此终端就hang住,只能通过ctl+alt+F1-F6切换到其它终端,在其它终端执行cat /etc/hosts都hang住了,在某一个终端上执行了sosreport,执行了40分钟,不知道是没执行完还是执行到某个地方hang住了,所有终端都hang住以后,无法再对操作系统执行指令,只有重启


事件分析:

1.通过日志查看到

spacer.gif

说明生产网络及NAS在该时间中断


2.生产网络不通可能的原因

通过分析sosreport(使用脚本对比故障时及正常后的在proc下跟网络相关的文件),查看到sosreport文件目录下proc/net/bonding/bond1这个文件发生问题时和重启恢复后是不一样

发生问题时:Currently Active Slave: eth2

重启恢复后:Currently Active Slave: eth0

bond1就是生产网络,而绑定模式是active-backup模式

故可能怀疑eth2在发生故障时,有可能工作不正常,但是又未完全shutdown,所以没有切换到另外一个网卡正常工作。

3.带管网络只能ping通,无法ssh,执行route,arp等相关网络命令时,终端执行cat /etc/hosts都hang住

因当时执行route,arp等相关网络命令,hang住,推荐可能因为主机名解析的原因,导致慢,甚至hang住,故查看hosts表,没想到cat /etc/hosts都hang住,无奈所有终端都已经hang无法再执行命令

事后分析sosreport发现 /etc/hosts下面的文件原来是个链接文件,且链接到NAS上

lrwxrwxrwx 1 root root 31 Nov 17 22:01 etc/hosts -> ../home/ap/ods/etc/system/hosts

而通过当时的日志可以了解到NAS已经中断

故怀疑导致问题的原因就是因为此链接文件的问题,且带管网络只能ping通,无法ssh的原因可能也是如此


为此我作了以下实验验证:

准备两台机器redhat1,redhat2 其中redhat1作为ssh服务端及nfs客户端,redhat2作为nas服务端(nfs服务端)

将redhat2的nfs共享挂载到redhat1(模拟nas挂载)

将redhat1的/etc/hosts软链接到redhat2的nfs共享挂载目录上

spacer.gif

此时,可以通过ssh客户端连接到redhat1上,然后中断了redhat2的网络,此时nfs共享中断,redhat1无法访问redhat2的nfs共享

spacer.gif

此时,通过ssh登录redhat1hang无法登录,执行route,arp等相关网络命令时,终端执行cat /etc/hosts都hang住

spacer.gif

spacer.gif

spacer.gif

spacer.gif

spacer.gif

此时,若能通过控制台登录到redhat1终端,删除掉/etc/hosts软链接,则可以ssh到redhat1上(会慢一点)

spacer.gif

spacer.gif

然而有意思的是,若是软链接到本地文件系统,哪怕删除掉链接指向的源文件,都不影响ssh登录(会慢一点)

spacer.gif

spacer.gif

OK,arp -a,route这些命令是有主机名解析的过程,/etc/hosts链接出现了问题,所以执行会hang住,ll /etc/hosts和cat /etc/hosts会hang住,也是可以理解了,那ssh登录跟主机名解析有关吗?

我们编辑一下ssh服务的配置文件,看下答案在不在这里?

[root@redhat1 ~]# vim /etc/ssh/sshd_config 

跟解析有关的,看起来有这么一行

spacer.gif

那么是不是真的跟这个有关呢,而且这个注释的,默认是yes还是no?我们验证一下,去掉这行注释,并且明确不使用域名解析,并重启服务:

spacer.gif

spacer.gif

再重复上述的过程,结果发现 

spacer.gif

这个命令还是会hang住,但是ssh却可以登录,而且登录过程很快

spacer.gif

当然,我们还可以执行不用解析的其它命令,这个本来就跟 /etc/ssh/sshd_config 中Use DNS没有关系

spacer.gif

再恢复/etc/ssh/sshd_config默认配置

spacer.gif(注释了,yes/no都已经无所谓,影响它的是默认值)

spacer.gif

ssh还是访问不了

spacer.gif

当然在其它终端或shell上执行不用解析的命令没有问题

spacer.gif

现在我们可以得出我们的结论,其实man sshd_config帮助文件已经为我们说明了这个结论,虽然ssh客户端只是使用IP地址ssh登录,但是sshd服务端....

[root@redhat1 ~]# man sshd_config

spacer.gif

/etc/nsswitch.conf告诉我们,为什么要去/etc/hosts找解析记录

[root@redhat1 ~]# vim /etc/nsswitch.conf

spacer.gif

之前删除掉/etc/hosts,登录慢也是因为这个原因,只不过找不到这个文件,系统就不会再解析,但是链接到NAS上面情况又有所不同,此时NAS看起来是mounted状态,但是因为网络中断已经hang住