最近做集群机房迁移,在旧机房和新机房之间接了根专线,做集群不停机搬迁,也就是跨机房,同时要新加百多台服务器,遇到几个问题,记录一下。

旧集群的机器是centos 6, 新机房加的机器是centos 7。


一、丢包问题

在跨机房的时候,datanode显示很多Slow BlockReceiver的日志

WARN  org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write packet to mirror took 630ms(threshold=300ms)

经查,这个报错的主要原因出在网卡的MTU设置上,hadoop建议将网卡mtu值从1500设置为9000,以支持接收jumbo frame。调整mtu值后,偶尔还会有几条,但频率小多了。而且我记得这个得交换机一起配合修改,光改服务器不好使。


二、centos7 执行df命令挂起,无法退出

在cent7下面执行df命令会死在那里,用ctrl-c也没法退出。由于我们的nodemanager健康检查脚本里面包含df命令,所以,nm的健康检查会卡死,最后把所有CPU全吃光,导致计算任务无法正常进行。使用kill命令也无法杀掉僵死的df进程,使用strace跟踪df命令也无法退出,必须用kill -9 杀掉strace才可以。

stat("/sys/fs/cgroup/memory", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
stat("/sys/kernel/config", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
stat("/", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
stat("/proc/sys/fs/binfmt_misc",

最后df就是卡死在 binfmt_misc 这了。

经查,这是centos7 systemd的一个bug,1534701,我们触发这个bug的原因应该是在执行hadoop安装的时候,作为依赖更新了systemd相关的组件,但是没有进行重启,新的systemd没生效,所以重启之后,故障解决。


三、专线流量大,导致跑任务慢

使用tcpdump及nmap综合分析,发现大量的ARP连接,应是B类地址没有做VLAN路由,跨机房集群相互之间做ARP通告引发广播风暴。后续由运维重新规划vlan解决。


这些故障基本都不是hadoop本身的问题,就像上一篇记录里面,几百台机器其中一台的网卡变成了10Mbps,结果拖慢了整个集群的运行速度。这些问题都需要hadoop运维来发现,排查,通知其他部门,所以hadoop运维应该是在数据研发部门和运维部门之间的桥梁,能够快速定位hadoop,数据应用,操作系统,硬件之间哪里出现了问题,然后安排各相关人员解决,越快速定位,越能节省成本,时间成本和金钱成本都是成本,比如我司为了跨集群拉的专线据说一天一万,客户限定时间内跑不出数据报告丢的钱更多。


等跨机房迁移弄完了,可以专门写一写。