一、pacemaker 是什么
二、pacemaker 特点
三、pacemaker 软件包供应商
四、pacemaker 版本信息
五、pacemaker 配置案例
六、pacemaker 支持集群架构
七、pacemaker 内部结构
八、pacemaker 源代码组成
九、Centos6.4+Corosync+Pacemaker 实现高可用的Web集群

Linux 高可用(HA)集群基本概念详解 http://www.linuxidc.com/Linux/2013-08/88522.htm

Linux 高可用(HA)集群之Heartbeat详解 http://www.linuxidc.com/Linux/2013-08/88521.htm

Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群 http://www.linuxidc.com/Linux/2013-08/89036.htm

一、pacemaker 是什么
1.pacemaker 简单说明 
  pacemaker(直译:心脏起搏器),是一个群集资源管理器。它实现较大可用性群集服务(亦称资源管理)的节点和资源级故障检测和恢复使用您的推荐集群基础设施(OpenAIS的或Heaerbeat)提供的消息和成员能力。
  它可以做乎任何规模的集群,并配备了一个强大的依赖模型,使管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。几乎任何可以编写脚本,可以管理作为心脏起搏器集群的一部分。
  我再次说明一下,pacemaker是个资源管理器,不是提供心跳信息的,因为它似乎是一个普遍的误解,也是值得的。pacemaker是一个延续的CRM(亦称Heartbeat V2资源管理器),最初是为心跳,但已经成为独立的项目。
2.pacemaker 由来
大家都知道,Heartbeat 到了V3版本后,拆分为多个项目,其中pacemaker就是拆分出来的资源管理器。

Heartbeat 3.0拆分之后的组成部分:

  • Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信;

  • Cluster Glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即为LRM和STONITH。

  • Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。

  • Pacemaker : 也就是Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。

Linux 高可用(HA)集群之Pacemaker详解_第1张图片

二、pacemaker 特点

  • 主机和应用程序级别的故障检测和恢复

  • 几乎支持任何冗余配置

  • 同时支持多种集群配置模式

  • 配置策略处理法定人数损失(多台机器失败时)

  • 支持应用启动/关机顺序

  • 支持,必须/必须在同一台机器上运行的应用程序

  • 支持多种模式的应用程序(如主/从)

  • 可以测试任何故障或群集的群集状态

注:说白了意思就是功能强大,现在最主流的资源管理器。

三、pacemaker 软件包供应商
目前pacemaker支持主流的操作系统,

  • Fedora(12.0)

  • 红帽企业Linux(5.0,6.0)

  • openSUSE(11.0)

  • Debian

  • Ubuntu的LTS(10.4)

  • CentOS (5.0,6.0)

四、pacemaker 版本信息

Linux 高可用(HA)集群之Pacemaker详解_第2张图片

目前,版的是pacemaker 1.1.10 ,是2013年7月发布的
五、pacemaker 配置案例
1.主/从架构
说明:许多高可用性的情况下,使用Pacemaker和DRBD的双节点主/从集群是一个符合成本效益的解决方案。

Linux 高可用(HA)集群之Pacemaker详解_第3张图片

2.多节点备份集群
说明:支持多少节点,Pacemaker可以显着降低硬件成本通过允许几个主/从群集要结合和共享一个公用备份节点。

Linux 高可用(HA)集群之Pacemaker详解_第4张图片

3.共享存储集群
说明:有共享存储时,每个节点可能被用于故障转移。Pacemaker甚至可以运行多个服务。

Linux 高可用(HA)集群之Pacemaker详解_第5张图片

4.站点集群
说明:Pacemaker 1.2 将包括增强简化设立分站点集群

Linux 高可用(HA)集群之Pacemaker详解_第6张图片

接下来请看第2页精彩内容: http://www.linuxidc.com/Linux/2013-08/89037p2.htm

六、pacemaker 支持集群
1.基于OpenAIS的集群

Linux 高可用(HA)集群之Pacemaker详解_第7张图片

2.传统集群架构,基于心跳信息

Linux 高可用(HA)集群之Pacemaker详解_第8张图片

七、pacemaker 内部结构

Linux 高可用(HA)集群之Pacemaker详解_第9张图片

1.群集组件说明:

  • stonithd:心跳系统。

  • lrmd:本地资源管理守护进程。它提供了一个通用的接口支持的资源类型。直接调用资源代理(脚本)。

  • pengine:政策引擎。根据当前状态和配置集群计算的下一个状态。产生一个过渡图,包含行动和依赖关系的列表。

  • CIB:群集信息库。包含所有群集选项,节点,资源,他们彼此之间的关系和现状的定义。同步更新到所有群集节点。

  • CRMD:集群资源管理守护进程。主要是消息代理的PEngine和LRM,还选举一个领导者(DC)统筹活动(包括启动/停止资源)的集群。

  • OpenAIS:OpenAIS的消息和成员层。

  • Heartbeat:心跳消息层,OpenAIS的一种替代。

  • CCM:共识群集成员,心跳成员层。

2.功能概述
  CIB使用XML表示集群的集群中的所有资源的配置和当前状态。CIB的内容会被自动在整个集群中同步,使用PEngine计算集群的理想状态,生成指令列表,然后输送到DC(指定协调员)。Pacemaker 集群中所有节点选举的DC节点作为主决策节点。如果当选DC节点宕机,它会在所有的节点上, 迅速建立一个新的DC。DC将PEngine生成的策略,传递给其他节点上的LRMd(本地资源管理守护程序)或CRMD通过集群消息传递基础结构。当集群中有节点宕机,PEngine重新计算的理想策略。在某些情况下,可能有必要关闭节点,以保护共享数据或完整的资源回收。为此,Pacemaker配备了stonithd设备。STONITH可以将其它节点“爆头”,通常是实现与远程电源开关。Pacemaker会将STONITH设备,配置为资源保存在CIB中,使他们可以更容易地监测资源失败或宕机。

八、pacemaker 源代码组成

Linux 高可用(HA)集群之Pacemaker详解_第10张图片

说明:大家可以看到Pacemaker主要是由C语言写的,其次是Python,说明其效率非常高。最后我们来说一个小案例,实现高可用的Web集群。


九、CentOS6.4+Corosync+Pacemaker 实现高可用的Web集群
1.环境说明
(1).操作系统
CentOS 6.4 X86_64 位系统

(2).软件环境
Corosync 1.4.1

Pacemaker 1.1.8

crmsh 1.2.6

(3).拓扑准备

Linux 高可用(HA)集群之Pacemaker详解_第11张图片

2.Corosync与Pacemaker 安装与配置
Corosync与Pacemaker安装与配置我就不在这里重复说明了,大家参考一下这篇博文:http://www.linuxidc.com/Linux/2013-08/88733.htm (Linux 高可用(HA)集群之Corosync详解)
3.Pacemaker 配置资源方法
(1).命令配置方式
crmsh

pcs

(2).图形配置方式
pygui

hawk

LCMC

pcs

注:本文主要的讲解的是crmsh
4.crmsh 简单说明 
注:以下上pacemaker 1.1.8的更新说明,最重要的我用红色标记出来,从pacemaker 1.1.8开始,crm sh 发展成一个独立项目,pacemaker中不再提供,说明我们安装好pacemaker后,是不会有crm这个命令行模式的资源管理器的。
[root@node1 ~]# cd /usr/share/doc/pacemaker-1.1.8/  
[root@node1 pacemaker-1.1.8]# ll  
总用量 132  
-rw-r--r-- 1 root root  1102 2月  22 13:05 AUTHORS  
-rw-r--r-- 1 root root 109311 2月  22 13:05 ChangeLog  
-rw-r--r-- 1 root root  18046 2月  22 13:05 COPYING  
[root@node1 pacemaker-1.1.8]# vim ChangeLog 
* Thu Sep 20 2012 Andrew Beekhof Pacemaker-1.1.8-1 
- Update source tarball to revision: 1a5341f  
- Statistics:  
  Changesets: 1019  
  Diff:      2107 files changed, 117258 insertions(+), 73606 deletions(-) 
- All APIs have been cleaned up and reduced to essentials  
- Pacemaker now includes a replacement lrmd that supports systemd and upstart agents 
- Config and state files (cib.xml, PE inputs and core files) have moved to new locations 
- The crm shell has become a separate project and no longer included with Pacemaker (crm shell 已成为一个独立的项目,pacemaker中一再提供)
- All daemons/tools now have a unified set of error codes based on errno.h (see crm_error)
[root@node1 ~]# crm  
crmadmin      crm_diff      crm_failcount  crm_mon        crm_report    crm_shadow    crm_standby    crm_verify 
crm_attribute  crm_error      crm_master    crm_node      crm_resource  crm_simulate  crm_ticket

注:大家可以看到,安装好pacemaker后,就没有crm shell命令行工具,我们得单独安装。下面我们就来说说怎么安装crm sh
5.安装crmsh资源管理工具
(1).crmsh官方网站
https://savannah.nongnu.org/forum/forum.php?forum_id=7672
(2).crmsh下载地址
http://download.openSUSE.org/repositories/network:/ha-clustering:/Stable/
(3).安装crmsh
[root@node1 ~]# rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm  
warning: crmsh-1.2.6-0.rc2.2.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 7b709911: NOKEY 
error: Failed dependencies:  
    pssh is needed by crmsh-1.2.6-0.rc2.2.1.x86_64  
    python-dateutil is needed by crmsh-1.2.6-0.rc2.2.1.x86_64  
    python-lxml is needed by crmsh-1.2.6-0.rc2.2.1.x86_64

注:大家可以看到年缺少依赖包,我们先用yum安装依赖包
[root@node1 ~]# yum install -y python-dateutil python-lxml 
[root@node1 ~]# rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm --nodeps  
warning: crmsh-1.2.6-0.rc2.2.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 7b709911: NOKEY 
Preparing...                ########################################### [100%]  
  1:crmsh                  ########################################### [100%] 
[root@node1 ~]# crm #安装好后出现一个crm命令,说明安装完成  
crm            crm_attribute  crm_error      crm_master    crm_node      crm_resource  crm_simulate  crm_ticket 
crmadmin      crm_diff      crm_failcount  crm_mon        crm_report    crm_shadow    crm_standby    crm_verify 
[root@node1 ~]# crm #输入crm命令,进入资源配置模式  
Cannot change active directory to /var/lib/pacemaker/cores/root: No such file or directory (2) 
crm(live)# help #查看一下帮助 
This is crm shell, a Pacemaker command line interface. 
Available commands: 
    cib              manage shadow CIBs  
    resource        resources management  
    configure        CRM cluster configuration  
    node            nodes management  
    options          user preferences  
    history          CRM cluster history  
    site            Geo-cluster support  
    ra              resource agents information center  
    status          show cluster status  
    help,?          show help (help topics for list of topics)  
    end,cd,up        go back one level  
    quit,bye,exit    exit the program  
crm(live)#

注:到此准备工作全部完成,下面我们来具体配置一下高可用的Web集群,在配置之前我们还得简的说明一下,crm sh 如何使用!
6.crmsh使用说明
注:简单说明一下,其实遇到一个新命令较好的方法就是man一下!简单的先熟悉一下这个命令,然后再慢慢尝试。
[root@node1 ~]# crm #输入crm命令,进入crm  sh 模式  
Cannot change active directory to /var/lib/pacemaker/cores/root: No such file or directory (2) 
crm(live)# help #输入help查看一下,会出下很多子命令 
This is crm shell, a Pacemaker command line interface. 
Available commands: 
    cib              manage shadow CIBs  
    resource        resources management  
    configure        CRM cluster configuration 
    node            nodes management  
    options          user preferences  
    history          CRM cluster history  
    site            Geo-cluster support  
    ra              resource agents information center  
    status          show cluster status  
    help,?          show help (help topics for list of topics)  
    end,cd,up        go back one level  
    quit,bye,exit    exit the program  
crm(live)# configure #输入configure就会进入,configure模式下,  
crm(live)configure# #敲两下tab键就会显示configure下全部命令    
?                  default-timeouts  group              node              rename            simulate   
bye                delete            help              op_defaults        role              template   
cd                edit              history            order              rsc_defaults      up   
cib                end                load              primitive          rsc_template      upgrade   
cibstatus          erase              location          property          rsc_ticket        user   
clone              exit              master            ptest              rsctest            verify   
collocation        fencing_topology  modgroup          quit              save              xml   
colocation        filter            monitor            ra                schema           
commit            graph              ms                refresh            show  
crm(live)configure# help node #输入help加你想了解的任意命令,就会显示该命令的使用帮助与案例 
The node command describes a cluster node. Nodes in the CIB are  
commonly created automatically by the CRM. Hence, you should not  
need to deal with nodes unless you also want to define node  
attributes. Note that it is also possible to manage node  
attributes at the `node` level. 
Usage:  
...............  
        node [:]  
          [attributes = [=...]]  
          [utilization = [=...]] 
        type :: normal | member | ping 
...............  
Example:  
...............  
        node node1  
        node big_node attributes memory=64  
............... 
注:好了,简单说明就到这,其实就是一句话,不会的命令help一下。下面我们开始配置,高可用的Web集群。

7.crmsh 配置高可用的Web集群
(1).查看一下默认配置
[root@node1 ~]# crm  
Cannot change active directory to /var/lib/pacemaker/cores/root: No such file or directory (2) 
crm(live)# configure    
crm(live)configure# show  
node node1.test.com  
node node2.test.com  
property $id="cib-bootstrap-options" \  
    dc-version="1.1.8-7.el6-394e906" \  
    cluster-infrastructure="classic openais (with plugin)" \  
    expected-quorum-votes="2" \

(2).检测一下配置文件是否有错
crm(live)# configure  
crm(live)configure# verify 
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined 
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option 
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity 
注:说我们的STONITH resources没有定义,因我们这里没有STONITH设备,所以我们先关闭这个属性 
crm(live)configure# property stonith-enabled=false 
crm(live)configure# show  
node node1.test.com  
node node2.test.com  
property $id="cib-bootstrap-options" \  
    dc-version="1.1.8-7.el6-394e906" \  
    cluster-infrastructure="classic openais (with plugin)" \  
    expected-quorum-votes="2" \  
    stonith-enabled="false"
crm(live)configure# verify  #现在已经不报错

(3).查看当前集群系统所支持的类型
crm(live)# ra  
crm(live)ra# classes    
lsb  
ocf / heartbeat pacemaker RedHat  
service  
stonith

(4).查看某种类别下的所用资源代理的列表
crm(live)ra# list lsb  
auditd              blk-availability    corosync            corosync-notifyd    crond              halt 
htcacheclean        httpd              ip6tables          iptables            killall            lvm2-lvmetad 
lvm2-monitor        messagebus          netconsole          netfs              network            nfs 
nfslock            ntpd                ntpdate            pacemaker          postfix            quota_nld 
rdisc              restorecond        rpcbind            rpcgssd            rpcidmapd          rpcsvcgssd 
rsyslog            sandbox            saslauthd          single              sshd                svnserve 
udev-post          winbind            
crm(live)ra# list ocf heartbeat  
AoEtarget          AudibleAlarm        CTDB                ClusterMon          Delay              Dummy 
EvmsSCC            Evmsd              Filesystem          ICP                IPaddr              IPaddr2 
IPsrcaddr          IPv6addr            LVM                LinuxSCSI          MailTo              ManageRAID 
ManageVE            Pure-FTPd          Raid1              Route              SAPDatabase        SAPInstance 
SendArp            ServeRAID          SphinxSearchDaemon  Squid              Stateful            SysInfo 
VIPArip            VirtualDomain      WAS                WAS6                WinPopup            Xen 
Xinetd              anything            apache              conntrackd          db2                drbd 
eDir88              ethmonitor          exportfs            fio                iSCSILogicalUnit    iSCSITarget 
ids                iscsi              jboss              lxc                mysql              mysql-proxy 
nfsserver          nginx              Oracle              oralsnr            pgsql              pingd  
portblock          postfix            proftpd            rsyncd              scsi2reservation    sfex 
symlink            syslog-ng          tomcat              vmware            
crm(live)ra# list ocf pacemaker  
ClusterMon    Dummy          HealthCPU      HealthSMART    Stateful      SysInfo        SystemHealth  controld 
o2cb          ping          pingd

(5).查看某个资源代理的配置方法
crm(live)ra# info ocf:heartbeat:IPaddr 
Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr) 
This script manages IP alias IP addresses  
It can add an IP alias, or remove one. 
Parameters (* denotes required, [] the default): 
ip* (string): IPv4 address  
    The IPv4 address to be configured in dotted quad notation, for example  
    "192.168.1.1". 
nic (string, [eth0]): Network interface  
    The base network interface on which the IP address will be brought  
    online.  
    If left empty, the script will try and determine this from the  
    routing table.  
    Do NOT specify an alias interface in the form eth0:1 or anything here;  
    rather, specify the base interface only.  
    Prerequisite:  
    There must be at least one static IP address, which is not managed by  
    the cluster, assigned to the network interface.  
    If you can not assign any static IP address on the interface,  
:

(6).接下来要创建的web集群创建一个IP地址资源(IP资源是主资源,我们查看一下怎么定义一个主资源)
crm(live)# configure  
crm(live)configure# primitive    
usage: primitive {[:[:]]|@