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服務,再看網絡佔用率降下來了,至此,問題解決。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章