Wednesday, October 30, 2013

Ganglia + RRDcached on CentOS 6

Ganglia的gmetad, 每次收集到資料之後, 就會把資料寫入RRD資料庫檔案, 給web介面去讀來畫圖.
但是當node的數量增加之後, 這種經常性大量檔案的小筆寫入, 就是磁碟最不拿手的事情...
所以會產生I/O瓶頸.


一個比較偷懶的方法, 是把資料放到tmpfs (RAMdisk).
但是這樣會佔記憶體, 而且如果不做定時備份, 當機之後歷史資料就全沒了...

事實上RRDtool 1.4之後就有一個快取機制, 叫RRDcached
Ganglia也有支援.
下面的做法是在CentOS 6上面, 搭配RRDtool 1.4.8, Ganglia 3.6.0實作成功的.

1. 依照一般方法安裝完.

2. 在RRDtool的原始檔裡面, etc目錄下有RRDcached的服務啟動檔跟設定檔, 可以拿來用.
cp etc/rrdcached-init /etc/init.d/rrdcached
chmod 755 /etc/init.d/rrdcached
cp etc/rrdcached-default /etc/sysconfig/rrdcached

3. 檔案還是要編輯一下. 首先是服務啟動檔 (/etc/init.d/rrdcached)
11行: /etc/default/rrdcached 改成 /etc/sysconfig/rrdcached
27行: 把 -l $SOCKFILE刪除
31行: 把這行#掉

4. 編輯設定檔 (/etc/sysconfig/rrdcached)
RUN_RRDCACHED=1
RRDCACHED_USER="nobody"
OPTS="-s nobody -m 664 -l unix:/tmp/rrdcached.sock -s apache -m 777 -P FLUSH,STATS,FETCH,HELP -l unix:/tmp/rrdcached_limited.sock -b /var/lib/ganglia/rrds -B"
PIDFILE="/tmp/rrdcached.pid"

5. gmetad啟動時會看/etc/sysconfig/gmetad有沒有設定要匯入, 不過預設是沒這個檔案.
所以建立這個檔, 填入:
RRDCACHED_ADDRESS=/tmp/rrdcached.sock

6. 編輯web介面的設定檔(/var/www/html/ganglia/conf_default.php)
$conf['rrdcached_socket'] = "/tmp/rrdcached_limited.sock";

7. 設定這樣就完成了, 再來要啟動RRDcached, 重啟gmetad服務, 以載入新的設定.
service rrdtoold start
service gmetad restart

8. 開網頁測試看看. 別忘了如果工作正常的話, 把RRDcached設定為開機啟動:
chkconfig rrdcached on

以我的測試來說, 整個grid有76個node.
原本的狀況會讓server (2 CPUs, VM) 有50~60%的wait, 把放資料庫的分割區用nobarrier mount之後降到20%.
設定rrdcached之後約5分鐘才寫入一次, Good!

參考資料:

No comments: