Ambari Server网口带宽占用率很高问题的分析和解决办法

背景

Ambari是Hortonworks出一款开源Hadoop管理系统,是用python写的,目前市场是开源的Hadoop管理系统好像就只有这一个,虽然Ambari问题很多,也不好用,但也没办法了。

最近监控系统经常报警说一个url老是不可达,只是一个ambari服务器的url 。

于是登录到服务器上一探究竟。

原因分析

用iftop查看网络状况,发现网络占用率很高,达到了700Mbps,而且一直居高不下,网卡最大带宽是1000Mbps,被用掉了一大半,怪不得会报警,这是不正常的。

再仔细看,发现ambari server和每个slavenodes都有很多包传输,肯定和某个服务有关。怀疑是Ganglia。

保险起见,我登录到另外一个ambari server上,发现网络占用率很低,1Mbps都不到。

 

用tcpdump抓包,然后用wireshark分析。

tcpdump -i bond0 'host SLAVENODE' -w traffic.cap -G 60 -W 1

-G:override previous saved file very n seconds .

-W: Keep n files

 

抓好包后把,包传到自己电脑上,用wireshark分析,发现几乎所有包都是metrics相关的,推断肯定是ganglia ,因为另外一个ambari server上没有装ganglia。

虽然ganglia服务已经被停掉了,但估计是agents端在一直不停的发metrics给server端,导致了很高的网络占用率。

于是删掉ganglia,在ambari web UI中没法删掉ganglia,只能调用ambari API 来做。

#STOP THE GANGLIA SERVICE
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop Service"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/services/GANGLIA

#STOP THE SERVER AND MONITOR ON THE GANGLIA SERVER
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop Component"},"Body":{"HostRoles":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/hosts/<GANGLIA_SERVER_FQDN>/host_components/GANGLIA_SERVER
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop Component"},"Body":{"HostRoles":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/hosts/<GANGLIA_SERVER_FQDN>/host_components/GANGLIA_MONITOR

#STOP THE GANGLIA MONITOR ON ***EVERY*** NODE (REPEAT FOR EACH NODE WHERE GANGLIA IS MONITORING):
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop Component"},"Body":{"HostRoles":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/hosts/<HOST_FQDN>/host_components/GANGLIA_MONITOR

#STOP EACH SERVICE COMPONENT:
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop All Components"},"Body":{"ServiceComponentInfo":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/services/GANGLIA/components/GANGLIA_SERVER
curl -u admin:admin -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop All Components"},"Body":{"ServiceComponentInfo":{"state":"INSTALLED"}}}' https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/services/GANGLIA/components/GANGLIA_MONITOR

#RERUN TO CHECK ALL COMPONENTS ARE STOPPED:
curl --user admin:admin https://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/services/GANGLIA

#REMOVE THE GANGLIA SERVICE: 
curl -u admin:admin -H "X-Requested-By: ambari" -X DELETE http://<AMBARI_NODE>:8080/api/v1/clusters/<CLUSTER_NAME>/services/GANGLIA

卸掉Ganglia之后用iftop查看网络占用率,发现任然很高,不解, 于是再打开wireshark,发现所有包都是UDP包,而且端口大部分都一样,于是登录到对应的slavenode上,用"lsof -i :PORT" ,发现是regionserver进程发出的包,其他的端口对应的是datanode和nodemanager进程发出的包,一团疑惑,按道理应该是Ganglia gmond进程发出的包才对啊,为什么是hadoop进程本身发出的包呢?

问题解决

通过研究后发现,原来hadoop 本身带有metric2 framework,能够集成ganglia这样的监控系统,直接把jvm等metrics直接吐给Ganglia server,其中的一个重要配置文件是/etc/hadoop/conf/hadoop-metric2.properties 。

原理搞懂之后,决定找一个slavenode重启上面的hadoop服务,完成后再用tcpdump抓包,发现metrics包消失了,在ambari Web 上重启所有的slavenodes的hadoop服务,再看网络占用率降下来了,至此,问题解决。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值