Pacemaker官网: http://clusterlabs.org/wiki/Pacemaker
Pacemaker官方安装文档: http://clusterlabs.org/wiki/Install#Binary_Packages
Drbd与Pacemaker参考:http://www.dbanotes.net/opensource/drbd-pacemaker.html
HA配置实例:http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
CLI帮助文档:http://www.clusterlabs.org/doc/crm_cli.html
关于集群资源配置:http://club.topsage.com/thread-530660-1-1.html  
 
Pacemaker是什么?有什么用?
Pacemaker在其官网一再强调,它不是Heartbeat的一个分支,而是一个独立的开源的集群管理工具(也许正因为此,所以它更喜欢使用OpenAIS作为基础组件,而不是Heartbeat),它使用资源级别的监测和恢复来保证集群服务(即资源)的高可用。在启动的基础组件上,它使用Corosync或Heartbeat来实现通信,以及管理集群关系。
以下引用Pacemaker官网,说明一下Pacemaker的关键特性:
1、监测并恢复节点和服务级别的故障。
2、存储无关,不需要共享存储。(而drbd在里就有了用武之地。)
3、资源无关,任何能用脚本控制的资源都可作为集群服务来管理
还有其它很多重要特性,如:支持多种集群模式;提供统一的,可用脚本控制的cluster shell(CRM CLI)等。
 
除Pacemaker外,还有其它集群管理工具么?
当然有。集群管理工具还有很多,如IBM的xcat,据说功能非常强大。
 
Pacemaker支持哪些集群的高可用?
Pacemaker对集群环境没有特定要求,它支持多种集群模式,而最常用的集群模式为Active/Passive(主备集群)。详细的情况可以参考官方文档http://clusterlabs.org/wiki/Main_Page。
正如官方文档所述,使用Pacemaker和DRBD搭建的由两个节点组成的Active/Passive clusters(主备集群),作为一个经济型高可用方案被广泛的使用。我们的Namenode双机热备即采用此方案。
 
除Pacemaker外,搭建一个两节点HA集群还需要哪些软件?
基本上,搭建一个HA集群,需要这些软件:Pacemaker+Heartbeat/Corosync+DRBD+服务(如Mysql,Apache或Ngnix)。当然,如果后台有专门的存储,DRBD就不需要了。
 
一个HA集群的基本架构是什么样子的?它是怎样工作的?

如上图,一个HA集群的高层架构由三个部分组成,以三色进行标识。Messaging & Membership部分是基础核心,负责消息传递以及集群中的成员关系管理;CRM部分是集群的大脑,负责对集群(节点的加入或退出)和资源(失效监测)的各种事件做出反应和决策;蓝色标识的部分是直接和服务相关的底层组件,CRM调用LRM来管理资源,而LRM调用RS来和具体的服务打交道。
 
从更具体的层次来看,由Pacemaker管理的集群,基本架构如下:

注:上图来自http://my.chinaunix.net/space.php?uid=369&do=blog&id=300808。推荐这篇文章,它对各个组件的介绍非常详细,建议好好阅读一下。感谢作者。
GUI console是一个图形管理界面;Pacemaker充当的是CRM的角色;Heartbeat(Corosync)充当的是Messaging & Membership的角色; Cluster Glue和Resource Agents,对应的是LRM和Resource Scripts,虽然把Glue和Resource Agents归为了同一类,但实际上它们是完全平行的两个部分,参考:http://www.linux-ha.org/wiki/Cluster_Glue。
至于HA的工作流程,可以参考:http://hi.baidu.com/leolance/blog/item/bd8ff9ca54b0731192457eb3.html。
 
Resource Agents是什么?
它是标准化的Cluster Resource接口,Pacemaker通过这个接口对Cluster Resource进行操作。Pacemaker支持三种类型的Resource Agents:LSB,OCF,和Heartbeat
LSB Resource Agents:Linux Standard Base Resource Agents,就是那些/etc/init.d下的脚本。
OCF Resource Agents:Open Cluster Framework,是对LSB Resource Agents的扩展。
Heartbeat Resource Agents:Heartbeat遗留下来的Resource Agents
这些RA的语法跟linux的/etc/init.d/下的普通自启动脚本有点不同,若要配置自己的RA,在配置自己的RA之前,阅读一下参考文档:http://www.linux-ha.org/wiki/Resource_Agents,特别注意LSB标准和OCF标准各自RA的写法。
   
Pacemaker如何安装?
官方安装文档:
RPM包安装:http://clusterlabs.org/wiki/Install#Binary_Packages
源码安装:http://clusterlabs.org/wiki/Install#From_Source
虽然Pacemaker的体系结构比较复杂,但我们不必依次编译各个组件进行安装,有编译好的RPM包供我们选择,如果配置好epel,使用yum方式安装更简单;当然,如果你不嫌麻烦,也可以从源码进行编译安装。
 
    
  1. su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'  
  2. wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo  
  3. yum -y install pacemaker   #yum安装更简单! 
  注意:两个节点都要安装!
官方帮助文档中有一个epel(extra packages for Enterprise Linux),也就是上面我们在yum安装pacemaker前配置的东西,它是Fedora发起并维护的一个项目,目的是为了Red Hat Enterprise Linux能够使用Fedora的软件包(因为Fedora的软件仓库比RHEL的要丰富嘛!),所以这个项目的软件仓库有很多是针对RHEL设计的。参考:http://www.shocr.com/epel-rhel-yum-source/
 
Pacemaker如何配置?
这部分包括三部分内容:各节点SSH密钥配置、Corosync配置、Pacemaker配置。
  SSH密钥配置:略
  Corosync配置:
1、创建corosync密钥,为集群节点间的通信提供授权服务:
   创建的密钥文件authkey,属主及属组必须为root,权限必须为0400,然后把该文件发送到HA的所有节点
corosync-keygen   # 没有任何参数,默认在/etc/corosync中创建authkey文件
chmod 0400 authkey
scp authkey drbd-b:/etc/corosync
2、编译corosync配置文件:
参考文档:http://www.corosync.org/doku.php?id=faq:configure_openais
                 http://www.clusterlabs.org/wiki/Initial_Configuration 
   cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
   vim corosync.conf
 
    
  1. # Please read the openais.conf.5 manual page  
  2. compatibility: whitetank  
  3.    
  4. aisexec {  
  5.         # Run as root - this is necessary to be able to manage resources with Pacemaker  
  6.         user: root  
  7.         group: root  
  8. }  
  9.    
  10. service {  
  11.         # Load the Pacemaker Cluster Resource Manager  
  12.         name: pacemaker  
  13.         ver: 0  
  14.         use_mgmtd: yes  
  15.         use_logd: yes  
  16. }  
  17.    
  18. totem {  
  19.         # Version of current configuration.   
  20.         version: 2  
  21.         # Whether enable encryption or not  
  22.         secauth: off   
  23.         # How many threads to use for encryption/decryption  
  24.         threads: 0  
  25.         # How long before declaring a token lost (ms)  
  26.         token: 5000  
  27.         # How many token retransmits before forming a new configuration  
  28.         token_retransmits_before_loss_const: 10  
  29.         # How long to wait for join messages in the membership protocol (ms)  
  30.         join: 1000  
  31.         # How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)  
  32.         consensus: 2500  
  33.         # Turn off the virtual synchrony filter  
  34.         vsftype: none  
  35.         # Number of messages that may be sent by one processor on receipt of the token  
  36.         max_messages: 20  
  37.         # Stagger sending the node join messages by 1..send_join (ms)  
  38.         send_join: 45  
  39.         # Limit generated nodeids to 31-bits (positive signed integers)  
  40.         clear_node_high_bit: yes  
  41.    
  42.         interface {  
  43.                 ringnumber: 0  
  44.                 bindnetaddr: 192.168.9.0  
  45.                 mcastaddr: 226.94.1.1  
  46.                 mcastport: 5405  
  47.         }  
  48. }  
  49.    
  50. logging {  
  51.         fileline: off  
  52.         to_stderr: no  
  53.         to_logfile: yes  
  54.         to_syslog: yes  
  55.         logfile: /var/log/cluster/corosync.log  
  56.         debug: off  
  57.         timestamp: on  
  58.         logger_subsys {  
  59.                 subsys: AMF  
  60.                 debug: off  
  61.         }  
  62. }  
  63.    
  64. amf {  
  65.         mode: disabled  
  66. }  
  配置完成后,把所有配置文件scp到其它节点,本例为drbd-b(192.168.9.53)
配置文件顶端的那一句Please read the corosync.conf.5 manual page,这类句子提示如何阅读相应的帮助文档,阅读方法为man 5 corosync.conf。参考:http://topic.csdn.net/t/20040815/10/3275623.html
 
chkconfig --level 2345 corosync on
service corosync start
启动失败: Starting Corosync Cluster Engine (corosync): [FAILED]
查看错误日志:less /var/log/message发现错误:
 
    
  1. parse error in config: parse error in config: .  
  2. Corosync Cluster Engine exiting with status 8 at main.c:1397. 
  解决:手动创建/var/log/cluster目录
 
启动corosync (两个节点都要启动):
/etc/init.d/corosync start
ssh drbd-b /etc/init.d/corosync start
 
检查集群是否正确启动,以及能否初始化节点:
 
     
  1. grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages  
  2. grep TOTEM /var/log/messages 
检查pacemaker状态:
 
    
  1. grep pcmk_startup /var/log/messages 
  检查是否错误:
 
    
  1. grep ERROR: /var/log/messages | grep -v unpack_resources 
发现错误:corosync[3449]:   [pcmk ] ERROR: pcmk_wait_dispatch: Child process mgmtd exited (pid=3461, rc=100)
解决:网上搜索了一下,给出的答案都不靠谱。感觉像是原有软件未卸载干净,于是野蛮地卸载重装,问题解决。
 
检查集群状态:
crm_mon

 
Pacemaker配置:
我们说配置Pacemaker,到底需要配置什么?配置Pacemaker,就是在配置资源,集群中的服务器上运行的任何类型的服务都称之为资源,如web站点,mail服务器,数据库等;但仅仅配置完集群所需要的资源还不够,还要配置一些规则,来指导指导集群按照这些规则正确地运行这些资源,Pacemaker把这些规则称为约束,它提供了三种类型的约束。配置Pacemaker的基本流程就是这么一个样子。
对于资源、资源的种类、配置约束的选项,及常见选项的含义等,这里就不说了。参考:http://club.topsage.com/thread-530660-1-1.html,写的很好,感谢作者!
 
创建资源或配置约束,常用的工具是CRM CLI。这个CLI用起来不那么容易!具体用法可以参考CLI的官方文档,本文开头有链接,强烈建议读一读这个文档。重点要理解CLI的分层设计,每一层级的主要用途,以及每一层级中的主要命令,比如,我们经常在其中创建资源的configure层级,查看RA及其常用选项的的ra层级,启动、停止资源的resource层级等。
对于创建资源和配置约束的大致步骤,示例如下:
 
    
  1. crm(live)configure# primitive VIP ocf:heartbeat:IPaddr2 \  
  2. > params ip=192.168.9.200 cidr_netmask=32 \  
  3. > op monitor interval=20s timeout=30s 
  上述命令创建一个名为VIP的原始资源,并指定了控制该资源的脚本(或者叫资源代理,RA),配置了该资源的一些选项。创建资源是在configure层级中进行的,primitive命令创建一个原始资源,params命令指定资源的参数,op命令指定常用的操作。
我们重点关注资源代理ocf:heartbeat:IPaddr2:ocf是资源代理(的类别(class),heartbeat是资源代理的provider,最后一个字段IPaddr2是资源代理的名称(type)。
列出集群资源所有可用的classes:
 
    
  1. crm(live)ra#classes 
列出由heartbeat提供的遵守OCF标准的所有资源代理:
 
    
  1. crm(live)ra#list ocf heartbeat 
查看指定RA的常见选项(创建资源时,会用到这些选项):
 
    
  1. crm(live)ra#meat ocf:heartbeat:IPaddr2 
  说明一点,就是用CLI创建资源或配置约束时,网上有些文章使用了某些选项,而官方文档里找不到这些选项,不知道是从哪里来的。
 
Pacemaker与DRBD整合:
在Pacemaker“眼中”,DRBD也是它的一种资源,而且是一种特殊的,有主从之分的资源。整合Pacemaker和DRBD,就是在Pacemaker中配置DRBD资源。
具体的操作,会在下面的实际运用中讲到;可以先参考一下官方文档:http://www.clusterlabs.org/wiki/DRBD_HowTo_1.0
 
对pacemaker的介绍,至此为止。这么些许文字,很难完全理解pacemaker,其实我自己也是懵懵懂懂的,呵呵。。还是要多读几篇文章,对比着看,加深理解。OK,下面就要实际操作了。