思路:使用pacemaker原生的CLI管理工具元件的crm_mon,監控叢集的狀態

梗概:把crm_mon做成LSB標準的服務。使用crm configure工具新增到叢集資源中。設定Apache資源與crm_mon資源的啟動順序和繫結關係。

操作:

一、製作標準的LSB 架構crm_mon服務以方便pacemaker管理,拷貝如下指令碼到叢集節點的/etc/init.d/目錄下並給執行許可權

注:可以根據實際情況,修改crm_mon的引數,例如我們還可以使用

crm_mon –daemonize –snmp-traps snmptrapd.example.com

來發出SNMP資訊,並通過nagios等SNMP代理收集並處理。

 

  1. #!/bin/bash  
  2. # 
  3. # crm_mon        Startup script for the Pacemaker managment tools: crm_mon 
  4. # 
  5. # chkconfig: - 86 16 
  6. # description: crm_mon scripts for pacemaker`s lsb style 
  7. # processname: crm_mon 
  8. # pidfile: /var/run/crm_mon.pid 
  9. # 
  10. ### BEGIN INIT INFO 
  11. ### END INIT INFO 
  12. # wangxiaoyu#live.com 
  13. # 2011-03-20 22:53:59 
  14. # Version 0.1 
  15.  
  16. # Source function library. 
  17. . /etc/rc.d/init.d/functions 
  18.  
  19. crm_mon=/usr/sbin/crm_mon 
  20. prog=crm_mon 
  21. pidfile=${PIDFILE-/var/run/crm_mon.pid} 
  22. lockfile=${LOCKFILE-/var/lock/subsys/crm_mon} 
  23. RETVAL=0 
  24.  
  25. # 請根據實際情況,修改crm_mon的啟動引數
  26. OPTIONS=`--daemonize --as-html /var/www/html/crm_mon.html` 
  27.  
  28. start() { 
  29.         echo -ne $"Starting $prog: " 
  30.     $crm_mon $OPTIONS 
  31.     RETVAL=$? 
  32.     [ $RETVAL -ne 0 ] && echo_failure && return $RETVAL 
  33.     pidNum=$(pidof ${crm_mon}) 
  34.         [ "$pidNum" -ne 1 ] && touch ${pidfile}  
  35.     && echo -ne ${pidNum} > ${pidfile}  
  36.     && touch ${lockfile} 
  37.         RETVAL=$?  
  38.     [ $RETVAL = 0 ] && echo_success 
  39.         return $RETVAL
    # 最初嘗試通過function中的deamon函式實現,發現不成功,只好自己寫pidfile和lockfile 
  40.  
  41. # When stopping crm_mon a delay of >10 second is required before SIGKILLing the 
  42. # crm_mon parent; this gives enough time for the crm_mon parent to SIGKILL any 
  43. # errant children. 
  44. stop() { 
  45.     echo -n $"Stopping $prog: " 
  46.     killproc -p ${pidfile} -d 10 $crm_mon 
  47.     RETVAL=$? 
  48.     echo 
  49.     [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} 
  50. reload() { 
  51.     echo -n $"Reloading $prog: " 
  52.     # Force LSB behaviour from killproc 
  53.     LSB=1 killproc -p ${pidfile} $crm_mon -HUP 
  54.         RETVAL=$? 
  55.     if [ $RETVAL -eq 7 ]; then 
  56.             failure "$crm_mon shutdown" 
  57.         fi 
  58.     echo 
  59.  
  60. # See how we were called. 
  61. case "$1" in 
  62.   start) 
  63.     start 
  64.     ;; 
  65.   stop) 
  66.     stop 
  67.     ;; 
  68.   status) 
  69.         status -p ${pidfile} $crm_mon 
  70.     RETVAL=$? 
  71.     ;; 
  72.   restart) 
  73.     stop 
  74.     start 
  75.     ;; 
  76.   condrestart|try-restart) 
  77.     if status -p ${pidfile} $crm_mon >&/dev/null; then 
  78.         stop 
  79.         start 
  80.     fi 
  81.     ;; 
  82.   force-reload|reload) 
  83.         reload 
  84.     ;; 
  85.   *) 
  86.     echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|help}" 
  87.     RETVAL=2 
  88. esac 
  89.  
  90. exit $RETVA 

二、新增crm_mon資源到叢集中,並設定與資源HTTPD(管理Apache服務的指令碼)的繫結關係和啟動順序

在任意一叢集節點上操作:

crm configure primitive CRM_MON lsb:crm_mon
crm configure colocation CRM_MON_with_HTTPD inf: CRM_MON HTTPD
crm configure order order HTTPD_before_CRM_MON inf: HTTPD CRM_MON

三、現在我們就可以通過http://VIP/crm_mon.html頁面實時檢視叢集的狀態了
# elinks http://VIP/crm_mon.html # 結果如下

 

Cluster summary

Last updated: Sun Mar 20 22:32:38 2011
Current DC: pcmk-2 (pcmk-2)
3 Nodes configured.
3 Resources configured.

Config Options

STONITH of failed nodes : disabled
Cluster is : symmetric
No Quorum Policy : Ignore

Node List

  • Node: pcmk-2 (pcmk-2): online
  • Node: pcmk-1 (pcmk-1): standby
  • Node: pcmk-3 (pcmk-3): online

Resource List

VIP (ocf::heartbeat:IPaddr2): Started pcmk-2
HTTPD (ocf::heartbeat:apache): Started pcmk-2
CRM_MON (lsb:crm_mon): Started pcmk-2