思路:使用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