基于Ganglia實現集群性能態勢感知

本文以開源項目Ganglia為例,介紹多集群環境下,利用監控系統進行故障診斷、性能瓶頸分析的一般方法。

回顧

通過前面的發布過的兩篇文章,我們已經大致掌握了描述單個服務器的性能情況的方法??梢詮膌oad avgerage等總括性的數據著手,獲得系統資源利用率(CPU、內存、I/O、網絡)和進程運行情況的整體概念。參考CPU使用率和I/O等待時間等具體的數字,從而自頂向下快速排查各進程狀態。也可以在60秒內,通過運行以下10個基本命令,判斷是否存在異常、評估飽和度,度量請求隊列長度等等。

1.基于Linux單機的負載評估

2.Netflix性能分析模型:In 60 Seconds

在真實的工程實踐中,并不能總是通過幾行簡單的命令,直接獲得性能問題的答案。一般不會存在一臺單獨運行的服務器,它們一定屬于某個服務集群之中,就算是同一集群的服務器,也可能屬于不同建設周期、硬件配置不同、分工角色不同?;蛘哂刹煌瑱C房、不通集群的服務器共同協作完成任務。


多機橫向對比

另外,很多性能問題也需要長時間的追蹤、對比才能作出判斷。正如任何一個高明的醫生,都需要盡可能多地了解、記錄病人的病史,不掌握這些情況,盲目下藥,無異于庸醫殺人。誠如醫者曰:

夫經方之難精,由來尚矣。今病有內同而外異,亦有內異而外,
故五臟六腑之盈虛,血脈榮衛之通塞,固非耳目之所察,
必先診候以審之。世有愚者,讀方三年,便謂天下無病可治;
及治病三年,乃知天下無方可用。

基于Ganglia項目,我們可以快速搭建一套高性能的監控系統,展開故障診斷分析、資源擴容預算甚至故障預測。

Ganglia框架簡析

一般應用中,需要用到兩個核心組件:

** Gmond (Ganglia Monitoring Daemon) **
Gmond承擔雙重角色:1、作為Agent,部署在所有需要監控的服務器上。
2、作為收發機,接收或轉發數據包。

** Gmetad (Ganglia Meta Daemon)**
負責收集所在集群的數據,并持久化到RRD數據庫。根據集群的組網情況,可以部署1-N個。

** Web frontend **
Ganglia項目提供一個PHP編寫的通用型的Web包,主要實現數據可視化,能提供一些簡單的數據篩選UI。頁面不多,大量使用了模版技術。HTTP Server方面,用Apache和Nginx都可以。

** RRDTool (Round Robin Database) **
Gmetad收集的時間序列數據都通過RRD存儲,RRDTool作為繪圖引擎使用。

** 插件生態 **
Ganglia最重要的特性之一就是提供了一個靈活的數據標準和插件API。
它使得我們可以根據系統的情況,很容易地在默認的監控指標集之上,引用或定制其他擴展指標。
這一特性在大數據領域也獲得了認可,Hadoop,Spark等都開放了面向Ganglia的指標集。
在Github上也有很多現成的擴展插件。

Ganglia工作模式

項目的名稱其實已經反映了作者的設計思路。
Ganglia(又作:ganglion),直譯為“神經節”、“中樞神經”。在解剖學上是一個生物組織叢集,通常是神經細胞體的集合。在神經學中,神經節主要是由核周體和附隨連結的樹突組合而成。神經節經常與其他神經節相互連接以形成一個復雜的神經節系統。神經節提供了身體內不同神經體系之間的依靠點和中介連結,例如周圍神經系統和中樞神經系統。

Ganglia的作者意圖將服務器集群理解為生物神經系統,每臺服務器都是獨立工作神經節,通過多層次樹突結構連接起來,
既可以橫向聯合,也可以從低向高,逐層傳遞信息。具體例證就是Ganglia的收集數據工作可以工作在單播(unicast)或多播(multicast)模式下,
默認為多播模式。

單播:Gmond收集到的監控數據發送到特定的一臺或幾臺機器上,可以跨網段

多播:Gmond收集到的監控數據發送到同一網段內所有的機器上,同時收集同一網段內的所有機器發送過來的監控數據。
因為是以廣播包的形式發送,因此需要同一網段內。但同一網段內,又可以定義不同的發送通道。

vi /usr/local/ganglia/etc/gmond.conf

** 默認配置:**

cluster {
  name = "cluster01"
}

udp_send_channel {
  mcast_join = 239.2.11.71
  port = 8649
  ttl = 1
}

udp_recv_channel {
  mcast_join = 239.2.11.71
  port = 8649
  bind = 239.2.11.71
  retry_bind = true
}

tcp_accept_channel {
  port = 8649
  gzip_output = no
}

** 單播模式Gmetad增加配置:**

udp_recv_channel {
  port = 8666
}

** 單播模式Gmond增加配置:**

udp_send_channel {
  host = 192.168.0.39
  port = 8666
  ttl = 1
}

** 默認裝載指標集:**

modules {
  module {
    name = "core_metrics"
  }
  module {
    name = "cpu_module"
    path = "modcpu.so"
  }
  module {
    name = "disk_module"
    path = "moddisk.so"
  }
  module {
    name = "load_module"
    path = "modload.so"
  }
  module {
    name = "mem_module"
    path = "modmem.so"
  }
  module {
    name = "net_module"
    path = "modnet.so"
  }
  module {
    name = "proc_module"
    path = "modproc.so"
  }
  module {
    name = "sys_module"
    path = "modsys.so"
  }
}

vi /usr/local/ganglia/etc/gmetad.conf

### 配置數據源,可以多個
data_source "cluster01" localhost:8649   
data_source "cluster02"  192.168.0.39:8666 192.168.0.48:8666

gridname "mygrid"

### 指定RRD數據路徑
rrd_rootdir "/home/data/ganglia/rrds"

查看數據流向

[root@zynm-gddx-col13 etc]# netstat -an | grep 86     
tcp        0      0 0.0.0.0:8649         0.0.0.0:*           LISTEN      ##tcp_accept_channel
udp        0      0 192.168.0.45:52745   239.2.11.71:8649    ESTABLISHED  ##組播
udp        0      0 239.2.11.71:8649     0.0.0.0:*                               
udp        0      0 0.0.0.0:8666         0.0.0.0:*    ##udp_recv_channel

Gmetad所在位置,已經可以收到監控數據的服務器列表:

# telnet localhost 8649 | grep HOST
<HOST NAME="192.168.0.56" IP="192.168.0.56" TAGS="" REPORTED="1478226772" TN="6" TMAX="20" DMAX="86400" LOCATION="GZ" GMOND_STARTED="1477817579">
</HOST>
<HOST NAME="192.168.0.39" IP="192.168.0.39" TAGS="" REPORTED="1478226771" TN="7" TMAX="20" DMAX="86400" LOCATION="GZ" GMOND_STARTED="1477473541">
......

Gmond所在位置,收到的監控指標數據明細:

# telnet localhost 8649 | grep cpu_idle
telnet: connect to address ::1: Connection refused
<METRIC NAME="cpu_idle" VAL="96.7" TYPE="float" UNITS="%" TN="33" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="100.0" TYPE="float" UNITS="%" TN="20" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="91.2" TYPE="float" UNITS="%" TN="4" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="96.3" TYPE="float" UNITS="%" TN="28" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="99.9" TYPE="float" UNITS="%" TN="5" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="83.9" TYPE="float" UNITS="%" TN="14" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="84.2" TYPE="float" UNITS="%" TN="0" TMAX="90" DMAX="0" SLOPE="both">
<METRIC NAME="cpu_idle" VAL="44.1" TYPE="float" UNITS="%" TN="9" TMAX="90" DMAX="0" SLOPE="both">
......

數據可視化

集群視圖
一級視圖
二級視圖
主機視圖
多機橫向對比
多機橫向對比
Nginx監控擴展插件
CPU密集型特征

注意事項

沒有任何一個開源項目是完美的。

1、告警流程框架:Ganglia本身并不具備,可以選用Nagios補充。

2、日志管理框架:Ganglia本身并不具備,可以選用Splunk補充。

3、性能開銷預算

對于單純的Gmond節點來說,性能開銷很低。主要的瓶頸在中央節點。


各節點的gmond進程向中央節點發送的udp數據帶來的網絡開銷。如果一個節點每秒發10個包,
1000個節點將會發出10000個,每個包有200字節,就有2m字節,10000個包的處理所需要的cpu使用也會上升。

Gmetad默認15秒向gmond取一次xml數據,解析xml文件帶來的CPU負荷也會隨著管理節點數線性增長。

格外需要注意的是RRD的寫入瓶頸。實際應用中需要根據資源情況,調整采樣頻率、權衡指標數量、引入RRDCached等方式優化。

4、網絡流向監控:Ganglia原生支持sFlow
GitHub:gmond-proxy project。what are some of the benefits of using the proxy?

Firstly, the proxy allows metrics to be filtered, reducing the amount of data logged and increasing the scaleability of the Ganglia collector.

Secondly, sFlow-RT generates traffic flow metrics, making them available to Ganglia.

Finally, Ganglia is typically used in conjunction with additional monitoring tools that can all be driven using the analytics stream generated by sFlow-RT.

參考資料

1、《 The ganglia distributed monitoring system: design, implementation, and experience》(必讀)

2、《Wide Area Cluster Monitoring with Ganglia》(必讀)


3、這篇本來沒有什么直接關系,是Ganglia作者的最新研究成果,僅供娛樂。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容