Hadoop运维记录系列(二十八)

弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述Hadoop运维记录系列(二十八)相关的知识,希望能为你提供帮助。
昨天花两小时帮可口可乐的dmp集群排查了一个集群故障.
故障表象为块的复制很慢, 导致集群报超时错误, 大量机器报超时错误. 

还有一批机器报Slow BlockReceiver write packet to mirror 的WARN



首先按常规排查处理, 检查机器操作系统环境, 各种tcp参数已优化, 各种limit也已经优化.


然后检查硬件
用 hdparm 测试了几个服务器的几块硬盘读写速率, 都正常. dmesg也没有报错信息.
检查网卡, 所有机器网卡显示都正常, 用ethtool bond0查看, 都是20Gbps 双网卡bond, 全双工.


暂时排除硬件故障原因, 检查hadoop设置的dfs.datanode.max.transfer.threads, 发现数量有点少, 设置为16384, 重启集群, 结果故障未解决. 怀疑是hadoop client里面有错误配置覆盖了集群配置, 检查client端提交作业的配置, 没有发现问题.


然后陷入了短暂的僵局, 目前看是硬件和集群配置和服务都没问题. 


那么按照hadoop的原理分析, 这个报错是数据块在复制过程中, 从1-2-3备份的过程里发生的, 所以, 如果硬盘读写没有问题, hadoop配置没有问题, 那么就只可能是网络的问题了, 但网卡又没有报错信息, 之前遇到过一次网卡问题, 自动跳到了100Mbps导致整个集群极慢. 但那次ethtool和syslog里都是有记录的. 这次遇到的机器, 完全没有记录说网卡有任何问题. 全部是20Gbps的bond. 系统日志也没有任何记录. 难道是我方向错了?


但我坚信自己的判断是正确的, 于是用网速测试命令, 在slave2上用 iperf -s 启动服务, 随便找了个其他机器用  iperf -c slave2 -f m -d 进行网速测试.
结果发现如下



slave4 -> slave2之间的速率只有 64Mbps, 还不到百兆


然后测试其他服务器之间的速率





16403Mbps, 这才是正常的20Gbps带宽该有的样子.


所以, 问题找到了, slave2机器的网卡传输速率跳到了不足百兆带宽, 导致整个集群报ERROR和WARN.


但由于网卡在ethtool和ifconfig里面都显示是20Gbps全双工, syslog里面也没有显示网卡速率改变, 所以, 暂时判断问题发生在交换机上.


后续这台机器先decommision掉, 然后联系运维人员排查网卡和交换机故障问题. slave2机器下架以后, 集群健步如飞. 


2个多小时解决可口可乐集群故障. Cloudera没有雇我做他们的兼职, 简直是他们的损失啊.


【Hadoop运维记录系列(二十八)】


    推荐阅读