Sunday, July 20, 2014

[CentOS 7] Ganglia + RRDcached

這是CentOS 7系列的第一發~
因為7版跟6比起來改了不少東西, 所以決定在我嘗試用CentOS 7架設cluster的同時,
會把遇到的狀況跟做法記錄下來.

首先是Ganglia.
1. Ganglia 一般性步驟
這個之前的文章有說過, 需要rrdtool跟libconfuse.
好消息是現在CentOS自己的套件庫就有rrdtool, 而且是目前最新的1.4.8版
壞消息是內建套件庫跟EPEL套件庫, 都沒有libconfuse...
所以變成libconfuse要先自己編.

libconfuse目前最新版是2.7:
http://savannah.nongnu.org/download/confuse/confuse-2.7.tar.gz
解壓縮之後, 先configure:
./configure --prefix=/usr --libdir=/usr/lib64 --enable-shared=yes
一樣的make, make install.

然後還會遇到另一個問題. 因為CentOS 7捨棄沿用已久的SysV init系統, 改用更快, 更容易管理相依性的systemd系統, 但是目前ganglia 3.6.0版的包裝中, 沒有放入給systemd用的服務設定檔, 所以make時會遇到這個錯誤訊息:
make[2]: *** No rule to make target `gmetad.service.in', needed by `gmetad.service'.  Stop.

請分別建立 gmetad/gmetad.service.in:
[Unit]
Description=Ganglia Meta Daemon
After=network.target
[Service]
Type=forking
PIDFile=/run/gmetad.pid
ExecStart=/usr/sbin/gmetad --pid-file=/run/gmetad.pid
#EnvironmentFile=-/etc/sysconfig/gmetad
[Install]
WantedBy=multi-user.target

跟 gmond/gmond.service.in:
[Unit]
Description=Ganglia Monitor Daemon
After=network.target
[Service]
Type=forking
PIDFile=/run/gmond.pid
ExecStart=/usr/sbin/gmond --pid-file=/run/gmond.pid
[Install]
WantedBy=multi-user.target

就可以解決這個make問題.
(這兩個檔案在make install之後會跑到/usr/lib/systemd/system, 這是systemd服務設定檔的預設位置)

然後就是記得要關掉SELinux, 這個步驟倒是沒有變, 參考以前的做法即可.

2. Ganglia server
在server的部分, 需要的其他套件, 可以用yum安裝:
yum install gcc make rrdtool-devel apr-devel expat-devel pcre-devel zlib-devel httpd php php-gd
然後configure:
./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc/ganglia --with-gmetad
然後一樣make, make install, 設定/etc/ganglia/gmetad.conf.

最後, 讓service啟動, 並設定為開機自動啟動. 因為改用systemd系統, 所以指令會不一樣:
systemctl start httpd
systemctl enable httpd
systemctl start gmetad
systemctl enable gmetad

ganglia-web的安裝方式跟之前一樣的, 沒有改變.

3. Ganglia client
在client的部分, 需要的套件用yum安裝:
yum install gcc make rrdtool-devel apr-devel expat-devel pcre-devel zlib-devel
然後configure:
./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc/ganglia
然後一樣make, make install, 設定/etc/ganglia/gmond.conf.

最後, 讓service啟動, 並設定為開機自動啟動. 因為改用systemd系統, 所以指令會不一樣:
systemctl start gmond
systemctl enable gmond

4. RRDcached
安裝很簡單, 因為內建套件庫就有rrdtool, 所以rrdcached也會一併被裝進來.
重點是現在要怎樣把rrdcached設定為service?

在/usr/lib/systemd/system底下, 建立一個rrdcached.service:
[Unit]
Description=RRDtool cache daemon
After=network.target
[Service]
Type=forking
PIDFile=/run/rrdcached.pid
ExecStart=/usr/bin/rrdcached -s nobody -m 664 -l unix:/var/lib/ganglia/rrdcached.sock -s apache -m 777 -P FLUSH,STATS,HELP -l unix:/var/lib/ganglia/rrdcached_limited.sock -b /var/lib/ganglia/rrds -B -p /run/rrdcached.pid -w 300 -z 300
[Install]
WantedBy=multi-user.target

一樣設定服務:
systemctl enable rrdcached
systemctl start rrdcached

記得去修改剛剛gmetad的服務設定檔 (/usr/lib/systemd/system/gmetad.service), 把:
#EnvironmentFile=-/etc/sysconfig/gmetad
前面的#拿掉並存檔.
這樣啟動服務時會載入 /etc/sysconfig/gmetad 的內容, 在這個檔案裡面填入:
RRDCACHED_ADDRESS="/var/lib/ganglia/rrdcached.sock"

當然改這個設定, 要重新啟動gmetad才會生效, 但是你如果現在要重啟服務, 會發現:
[root@ganglia system]# systemctl restart gmetad

Warning: Unit file of gmetad.service changed on disk, 'systemctl daemon-reload' recommended.
這是因為systemd為了快速, 會在啟動服務後把設定檔內容載到RAM裡面, 所以當systemd發現硬碟上的設定檔改變了, 就會出現這個訊息, 要求你先把改變後的設定檔載到RAM裡.
就照他的說明做就好了:
systemctl daemon-reload
systemctl restart gmetad

最後, 記得修改Ganglia網頁的設定檔(/var/www/html/ganglia/conf_default.php):
$conf['rrdcached_socket'] = "/var/lib/ganglia/rrdcached_limited.sock";
存檔就好啦~





No comments: