网卡配置惊魂记

这是我近期遇到的一个集群的问题,涉及到的主要是硬件的配置导致的软件层问题。起初发现这个问题是由于我们开发的基于YARN的实时流系统某些机器的tps非常低,一开始并没有想到是硬件的问题,所以一直在排查实时框架的问题。最后发现连ping值都很低,才想到是OS配置相关的问题。
这是ping的延迟:

64 bytes from 10.39.****: icmp_seq=34 ttl=63 time=27.4 ms
64 bytes from 10.39.****: icmp_seq=35 ttl=63 time=21.2 ms
64 bytes from 10.39.****: icmp_seq=36 ttl=63 time=5.95 ms
64 bytes from 10.39.****: icmp_seq=37 ttl=63 time=16.5 ms
64 bytes from 10.39.****: icmp_seq=38 ttl=63 time=12.3 ms

底下是正常的ping的延迟

64 bytes from 10.39.****: icmp_seq=13 ttl=63 time=0.230 ms
64 bytes from 10.39.****: icmp_seq=14 ttl=63 time=0.203 ms
64 bytes from 10.39.****: icmp_seq=15 ttl=63 time=0.255 ms
64 bytes from 10.39.****: icmp_seq=16 ttl=63 time=0.229 ms

推测就是网卡的问题,我们是两个千兆网卡bonding,查看/proc/interrupt发现每个网卡只绑到了一个core上,这个core一直跑满,并且丢包,正常的网卡配置会使用多队列,将不同队列亲和到不同的core上,提高tps等。相关的资料可以参见这篇文章:网卡多队列简介.
由于实时系统发送的大多是小包,所以才会有这么大的影响,解决方法比较坑爹,配置好多队列后需要重启服务器。

Ganglia配置续

      续上一篇blog,虽然加入了rrdcached,能够将大量的随机写变为较多的连续写,保证了写入的速度,确保IO write不是瓶颈。但是当打开首页的时候仍然发现速度非常慢,查看系统iostat其实发现读写都很少,所以确定不是硬盘瓶颈导致的。查看代码,首页是读取gmetad的端口行程xml文件并解析的。通过top查看gmetad进程,可以看出进程cpu已经跑满,这时候可以推测任何的读操作都是与写操作进行大量的竞争,返回十分缓慢。解决办法其实很简答,就是在gweb机器上启动两个gmetad进程,一个负责去写,一个负责去解析并返回xml数据,这样读写分离能够大大的提高效率。

      步骤也很简单:

      1、cp一份gmetad的conf文件,比如叫gmetad-norrd.conf,修改conf文件,修改xml_port端口从默认的8651改为8661,修改interactive_port从8652改为8662,把rrd_rootdir改为一个已存在的目录,防止配置错误导致丢数据

      2、修改gmetad的启动脚本,我的在/etc/rc.d/init.d/gmetad,加入以下配置

           在start处

daemon $GMETAD -c /etc/ganglia/gmetad-norrds.conf
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/gmetad.readonly

      在stop处

[ $RETVAL -eq 0 ]  rm -f /var/lock/subsys/gmetad && rm -f /var/lock/subsys/gmetad.readonly

     3、修改gweb的php conf.php,将端口从8651改为8661

   4、重启gmetad,gweb

       启动后,秒开。感谢google,感谢这篇文章:http://blog.hartshorne.net/2014/02/ganglia-web-ui-performance-improvement.html

Ganglia配置小记

      Ganglia是我们Hadoop系统中重要的运维工具,当然我们也开了自己的一套监控系统,这是后话。但是随着监控的机器越来越多,以及监控的指标越来越多,导致了对Ganglia的访问十分缓慢。我花了一些时间看了一下我们的gmetad以及gweb,优化了一些配置。其实相关的文章非常多,我只列一下重要的,方便查询。

      https://github.com/ganglia/monitor-core/wiki/Integrating-Ganglia-with-rrdcached   配置方法。

      http://www.perzl.org/aix/index.php?n=Main.Ganglia-rrdcached  例子。

      http://pages.cs.wisc.edu/~plonka/lisa/lisa2007/bigmrtg-lisa-talk.pdf   很好地解析文章。

      简单地说,我本来想用iotop看一下我ganglia web服务器上面的io使用量,但无奈,机器内核版本过低,安装iotop后无法使用,但是通过iostat以及top,sar查看,可以看到我的磁盘写入已经到100%利用率,成为严重瓶颈,cpu一直是60%的io wait,至少写入有问题。根据上面三篇文章,配置了rrdcached,很轻易的,io的写瓶颈消失了,至少集群的metrcs写入不再是问题。但是配置gweb的时候发现,首页读取依然非常慢,查代码后发现,首页的读取时读取gmetad的端口返回xml文件,如果metrcis非常多的时候返回就要几分钟,相当恐怖。

      至此,ganglia web的问题就成为了瓶颈,解决方法1、修改gweb php代码   2、前端展示采用自己的监控系统,后端收集还是走gangila