Pacemaker集群资源管理器原理及部署

一.Pacemaker概述

1.Pacemaker介绍

      Pacemaker是 Linux环境中使用最为广泛的开源集群资源管理器(CRM), Pacemaker利用集群基础架构(Corosync或者 Heartbeat)提供的消息和集群成员管理功能,实现节点和资源级别的故障检测和资源恢复,从而最大程度保证集群服务的高可用。

      从逻辑功能而言, pacemaker在集群管理员所定义的资源规则驱动下,负责集群中软件服务的全生命周期管理,这种管理甚至包括整个软件系统以及软件系统彼此之间的交互。 Pacemaker在实际应用中可以管理任何规模的集群,由于其具备强大的资源依赖模型,这使得集群管理员能够精确描述和表达集群资源之间的关系(包括资源的顺序和位置等关系)。

      Pacemaker仅是资源管理器,并不提供集群心跳信息,事实上 Pacemaker的心跳机制主要基于 Corosync或 Heartbeat来实现,Heartbeat到了3.0版本后已经被拆分为几个子项目:

  • Heartbeat

    最初的消息通信层被独立为新的 Heartbeat项目,新的 Heartbeat只负责维护集群各节点的信息以及它们之间的心跳通信,通常将 Pacemaker与 Heartbeat或者 Corosync共同组成集群管理软件, Pacemaker利用 Heartbeat或者Corosync提供的节点及节点之间的心跳信息来判断节点状态。

  • Cluster Clue

    Cluster Clue 相当于一个中间层,它用来将Heartbeat和Pacemaker关联起来,主要包含两个部分,即本地资源管理器(Local Resource Manager,LRM)和Fencing设备(Shoot The Other Node In The Head,STONITH)

  • Resource Agent

    资源代理(Resource Agent,RA)是用来控制服务的启停,监控服务状态的脚本集合,这些脚本会被位于本节点上的LRM调用从而实现各种资源的启动、停止、监控等操作。

  • Pacemaker

    Pacemaker是整个高可用集群的控制中心,用来管理整个集群的资源状态行为,客户端通过 pacemaker来配置、管理、监控整个集群的运行状态。

2.Pacemaker主要功能

  • 监测并恢复节点和服务级别的故障。
  • 存储无关,并不需要共享存储。
  • 资源无关,任何能用脚本控制的资源都可以作为集群服务。
  • 支持节点 STONITH功能以保证集群数据的完整性和防止集群脑裂。
  • 支持大型或者小型集群。
  • 支持 Quorum机制和资源驱动类型的集群。
  • 支持几乎是任何类型的冗余配置。
  • 自动同步各个节点的配置文件。
  • 可以设定集群范围内的 Ordering、 Colocation and Anti-colocation等约束。
  • 高级服务类型支持:
    • Clone功能,即那些要在多个节点运行的服务可以通过 Clone功能实现, Clone功能将会在多个节点上启动相同的服务;
    • Multi-state功能,即那些需要运行在多状态下的服务可以通过 Multi–state实现,在高可用集群的服务中,有很多服务会运行在不同的高可用模式下,
    • 如:Active/Active模式或者 Active/passive模式等,并且这些服务可能会在 Active 与standby(Passive)之间切换。
  • 具有统一的、脚本化的集群管理工具

3.Pacemaker的服务模式

​ Pacemaker对用户的环境没有特定的要求,这使得它支持任何类型的高可用节点冗余配置,包括 Active/Active、 Active/Passive、N+1、 N+M、 N-to-1 and N-to-N模式的高可用集群,用户可以根据自身对业务的高可用级别要求和成本预算,通过 Pacemaker部署适合自己的高可用集群。

  • Active/Active模式

    在这种模式下,故障节点上的访问请求或自动转到另外一个正常运行节点上,或通过负载均衡器在剩余的正常运行的节点上进行负载均衡。这种模式下集群中的节点通常部署了相同的软件并具有相同的参数配置,同时各服务在这些节点上并行运行

  • Active/Passive模式

    在这种模式下,每个节点上都部署有相同的服务实例,但是正常情况下只有一个节点上的服务实例处于激活状态,只有当前活动节点发生故障后,另外的处于 standby状态的节点上的服务才会被激活,这种模式通常意味着需要部署额外的且正常情况下不承载负载的硬件。

  • N+1模式

    所谓的N+1就是多准备一个额外的备机节点,当集群中某一节点故障后该备机节点会被激活从而接管故障节点的服务。在不同节点安装和配置有不同软件的集群中,即集群中运行有多个服务的情况下,该备机节点应该具备接管任何故障服务的能力,而如果整个集群只运行同一个服务,则N+1模式便退变为 Active/Passive模式。

  • N+M模式

    在单个集群运行多种服务的情况下,N+1模式下仅有的一个故障接管节点可能无法提供充分的冗余,因此,集群需要提供 M(M>l)个备机节点以保证集群在多个服务同时发生故障的情况下仍然具备高可用性, M的具体数目需要根据集群高可用性的要求和成本预算来权衡。

  • N-to-l模式

    在 N-to-l模式中,允许接管服务的备机节点临时成为活动节点(此时集群已经没有备机节点),但是,当故障主节点恢复并重新加人到集群后,备机节点上的服务会转移到主节点上运行,同时该备机节点恢复 standby状态以保证集群的高可用

  • N-to-N模式

    N-to-N是 Active/Active模式和N+M模式的结合, N-to-N集群将故障节点的服务和访问请求分散到集群其余的正常节点中,在N-to-N集群中并不需要有Standby节点的存在、但是需要所有Active的节点均有额外的剩余可用资源。

4.Pacemaker的架构

从高层次的集群抽象功能来看, Pacemaker的核心架构主要由集群不相关组件、集群资源管理组件和集群底层基础模块三个部分组成。

  • 底层基础模块

    底层的基础架构模块主要向集群提供可靠的消息通信、集群成员关系和等功能,底层基础模块主要包括像 corosync、 CMAN和 Heartbeat等项目组件

  • 集群无关组件

    这部分组件主要包括资源本身以及用于启动、关闭以及监控资源状态的脚本,同时还包括用于屏蔽和消除实现这些脚本所采用的不同标准之间差异的本地进程

  • 资源管理器

    Pacemaker就像集群大脑,专门负责响应和处理与集群相关的事件,这些事件主要包括集群节点的加人、集群节点脱离,以及由资源故障、维护、计划的资源相关操作所引起的资源事件,同时还包括其他的一些管理员操作事件,如对配置文件的修改和服务重启等操作。

5.Pacemake内部组件

Pacemaker作为一个独立的集群资源管理器项目,其本身由多个内部组件构成,这些内部组件彼此之间相互通信协作并最终实现了集群的资源管理, Pacemaker项目由五个内部组件构成,各个组件之间的关系如 :

  • CIB:集群信息基础( Cluster Information Base)。

  • CRMd:集群资源管理进程( Cluster Resource Manager deamon)。

  • LRMd:本地资源管理进程(Local Resource Manager deamon)。

  • PEngine(PE):策略引擎(PolicyEngine)。

  • STONITHd:集群 Fencing进程( Shoot The Other Node In The Head deamon)。

img

二.Pacemaker集群管理工具pcs

1.pcs介绍

​      可以用用 cibadmin命令行工具来查看和管理 pacemaker的集群配置信息,集群 CIB中的配置信息量非常大而且以 XML语言呈现,对于仅由极少数节点和资源所组成的集群,cibadmin也许是个可行方案。 而在开源社区里,简单实用才是真正开源精神的体现,对于开源系统中任何文件配置参数的修改,简化统一的命令行工具才是最终的归宿。

      随着开源集群软件Pacemaker版本的不断更新,社区推出了两个常用的集群管理命令行工具,即集群管理员最为常用的 pcs和 crmsh命令。本文使用的是 pcs命令行工具,关于 crmsh的更多使用方法和手册可以参考Pacemaker的官方网站。在 pacemaker集群中PCS命令行工具几乎可以实现集群管理的各种功能,例如,全部受控的 pacemaker和配置属性的变更管理都可以通过 pcs实现。此外,需要注意的是, pcs命令行的使用对系统中安装的 pacemaker和 corosync软件版本有一定要求,即 Pacemaker1.1.8及其以上版本, Corosync 2.0及其以上版本才能使用 pcs命令行工具进行集群管理。

2.pcs命令

pcs命令可以管理的集群对象类别和具体使用方式可以通过pcs –help参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@node1 ~]# pcs --help

Usage: pcs [-f file] [-h] [commands]...
Control and configure pacemaker and corosync.

Options:
    -h, --help         Display usage and exit.
    -f file            Perform actions on file instead of active CIB.
    --debug            Print all network traffic and external commands run.
    --version          Print pcs version information. List pcs capabilities if
                       --full is specified.
    --request-timeout  Timeout for each outgoing request to another node in
                       seconds. Default is 60s.
    --force            Override checks and errors, the exact behavior depends on
                       the command. WARNING: Using the --force option is
                       strongly discouraged unless you know what you are doing.

Commands:
    cluster     Configure cluster options and nodes|配置集群选项和节点
    resource    Manage cluster resources|创建和管理集群资源
    stonith     Manage fence devices|创建和管理fence设备
    constraint  Manage resource constraints|管理集群资源约束和限制
    property    Manage pacemaker properties|管理集群节点和资源属性
    acl         Manage pacemaker access control lists|管理acl
    qdevice     Manage quorum device provider on the local host.
    quorum      Manage cluster quorum settings|管理quorum机制设置
    booth       Manage booth (cluster ticket manager).
    status      View cluster status|查看当前集群资源和节点以及进程状态
    config      View and manage cluster configuration|以用户可读格式显示完整集群配置信息
    pcsd        Manage pcs daemon|管理pcs守护进程
    node        Manage cluster nodes|管理集群节点
    alert       Manage pacemaker alerts|管理告警

3.常用的管理命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
cluster      配置集群选项和节点
status       查看当前集群资源和节点以及进程状态
resource     创建和管理集群资源
constraint   管理集群资源约束和限制
property     管理集群节点和资源属性
config       以用户可读格式显示完整集群配置信息

#显示当前 pcs 版本
pcs --version
#查看原始集群配置
pcs cluster cib
#显示完整集群配置
pcs config

4.Pacemaker 资源的相关概念

资源

Resource在 Pacemaker集群中,各种功能服务通常被配置为集群资源,从而接受资源管理器的调度与控制,资源是集群管理的最小单位对象

分类

根据用户的配置,资源有不同的种类,其中最为简单的资源是原始资源(primitive Resource),此外还有相对高级和复杂的资源组(Resource Group)和克隆资源(Clone Resource)等集群资源概念

资源代理

在 Pacemaker集群中,每一个原始资源都有一个资源代理(Resource Agent, RA),RA是一个与资源相关的外部脚本程序,该程序抽象了资源本身所提供的服务并向集群呈现一致的视图以供集群对该资源进行操作控制。

资源代理作用

通过 RA,几乎任何应用程序都可以成为 Pacemaker集群的资源从而被集群资源管理器和控制。RA的存在,使得集群资源管理器可以对其所管理的资源“不求甚解",即集群资源管理器无需知道资源具体的工作逻辑和原理( RA已将其封装),资源管理器只需向 RA发出 start、 stop、Monitor等命令, RA便会执行相应的操作。从资源管理器对资源的控制过程来看,集群对资源的管理完全依赖于该资源所提供的,即资源的 RA脚本功能直接决定了资源管理器可以对该资源进行何种控制,因此一个功能完善的 RA在发行之前必须经过充分的功能测试

资源属性

在 pacemaker中,每个资源都具有属性,资源属性决定了该资源 RA脚本的位置,以及该资源隶属于哪种资源标准。例如,在某些情况下,用户可能会在同一系统中安装不同版本或者不同来源的同一服务(如相同的 RabbitMQ Cluster安装程序可能来自 RabbitMQ官方社区也可能来自 Redhat提供的 RabbitMQ安装包),在这个时候,就会存在同一服务对应多个版本资源的情况,为了区分不同来源的资源,就需要在定义集群资源的时候通过资源属性来指定具体使用哪个资源

资源约束

集群是由众多具有特定功能的资源组成的集合,集群中的每个资源都可以对外提供独立服务,但是资源彼此之间存在依赖与被依赖的关系。如资源B的启动必须依赖资源A的存在,因此资源A必须在资源B之前启动,再如资源A必须与资源B位于同一节点以共享某些服务,则资源 B与 A在故障切换时必须作为一个逻辑整体而同时迁移到其他节点,在 pacemaker中,资源之间的这种关系通过资源约束或限制( Resource constraint)来实现。

5.CRM中的几个基本概念

1).资源类型

  • primitive(native):基本资源,原始资源

  • group:资源组

  • clone:克隆资源(可同时运行在多个节点上),要先定义为primitive后才能进行clone。主要包含STONITH和集群文件系统(cluster filesystem)

  • master/slave:主从资源,如drdb(下文详细讲解)

2).RA类型

  • Lsb:linux表中库,一般位于/etc/rc.d/init.d/目录下的支持start|stop|status等参数的服务脚本都是lsb

  • ocf:Open cluster Framework,开放集群架构

  • heartbeat:heartbaet V1版本

  • stonith:专为配置stonith设备而用

3).资源粘性

资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示正无穷,inf表示正无穷。

4).资源约束

资源约束则用以指定在哪些群集节点上运行资源,以何种顺序装载资源,以及特定资源依赖于哪些其它资源。

  • Resource Location(资源位置):定义资源可以、不可以或尽可能在哪些节点上运行;

  • Resource Collocation(资源排列):排列约束用以定义集群资源可以或不可以在某个节点上同时运行;

  • Resource Order(资源顺序):顺序约束定义集群资源在节点上启动的顺序;

定义约束时,还需要指定值。资源安按值管理是集群工作方式的重要组成部分。从迁移资源到决定在已降级集群中停止哪些资源的整个过程是通过以某种方式改变资源值来实现的。值按每个资源来计算,资源值为负的任何节点都无法运行该资源。在计算出资源值后,集群选择值最高的节点。

有两个特殊值:inf(正无穷,表示只要有可能就要)、-inf(负无穷,表示只要有可能就不要)

 定义资源约束时,也可以指定每个约束的值。值较高的约束先应用,值较低的约束后应用。通过使用不同的值为既定资源创建更多位置约束,可指定资源故障转移至的目标节点的顺序。

三.Pacemaker心跳监测Corosync

Corosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。

Corosync作为Pacemaker的心跳检测机制存在。

它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。

Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.

四.集群安装配置(corosync+pacemaker+pcsd)

1.环境介绍

主机IP 主机名 安装配置
10.0.8.111 node1 corosync+pacemaker+pcsd+crmsh
10.0.8.112 node2 corosync+pacemaker+pcsd+crmsh
10.0.8.113 node3 corosync+pacemaker+pcsd+crmsh

2.基于corosync实现web高可用基础配置

1).配置主机名

node1示例

1
2
3
4
5
6
7
8
9
# vim /etc/hosts
10.0.8.111  node1 node1.hoo.com
10.0.8.112  node2 node2.hoo.com
10.0.8.113  node3 node3.hoo.com
# ifconfig eth0 10.0.8.111 up
# hostname node1
# uname -n
# vim /etc/sysconfig/network  //重启才生效,source也不生效
hostname=node1

2).时间同步

node2和node3都配置

1
2
# crontab -e
*/5 * * * * /usr/sbin/ntpdate 10.0.8.111 &> /dev/null

3).配置node之间SSH互信

1
2
3
4
5
6
7
8
node1:
#ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node2.hoo.com
node1:
#ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node1.hoo.com
node1:测试
#  ssh node2.hoo.com ‘date’;date

4).安装httpd

node1,node2

1
2
3
4
# yum install httpd -y
# ssh node2 "yum install httpd -y "
# ss -tunl | grep 80
# ssh node2 "ss -tunl | grep 80"

node1,node2均关闭httpd的自启动,httpd由Pacemaker管理

1
2
# chkconfig httpd off
# ckconfig --list httpd  //检查

node1,node2提供测试页

1
2
[root@node1 ~]# echo "node1.hoo.com" >/var/www/html/index.html
[root@node2 ~]# echo "node2.hoo.com" >/var/www/html/index.html

5).安装资源管理器客户端命令接口工具crmsh

从pacemaker 1.1.8开始,crmsh发展成了一个独立项目,叫crmsh。pacemaker默认不提供命令接口工具,需要单独安装crmsh。

1
2
3
//crmsh依赖pssh
# yum -y install pssh-2.3.1-2.el6.x86_64.rpm
# yum -y install crmsh-1.2.6-4.el6.x86_64.rpm

3.安装corosync和pacemaker

所有节点均安装

1
2
# yum install corosync pacemaker -y
# rpm -ql corosync

可使用 yum install 命令安装 Red Hat High Availability Add-On 软件包以及 High Availability 频道中的所有可用 fence 代理。

1
yum install pcs fence-agents-all

另外,可使用下面的命令安装 Red Hat High Availability Add-On 软件包以及只有您需要的 fence 代理。

1
yum install pcs fence-agents-model

以下命令显示可用 fence 代理列表。

1
2
3
4
5
[root@node1 ~]# rpm -q -a | grep fence 
fence-agents-rhevm-4.0.2-3.el7.x86_64
fence-agents-ilo-mp-4.0.2-3.el7.x86_64
fence-agents-ipmilan-4.0.2-3.el7.x86_64
...

lvm2-cluster 和 gfs2-utils 软件包是 ResilientStorage 频道的一部分,可根据需要使用以下命令安装

1
yum install lvm2-cluster gfs2-utils

4.corosync配置及启动

1
2
3
#配置目录:/etc/corosync
#配置模板:/etc/corosync/corosync.conf.example
#服务器脚本:/etc/rc.d/init.d/corosync

1).配置主配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf
[root@node1 corosync]# vi corosync.conf
compatibility: whitetank   #表示是否兼容0.8之前的版本
totem {        #图腾,定义集群中各节点中通信机制以及参数
        version: 2    #图腾的协议版本号,不修改
        secauth: on   #安全认证功能是否启用,当使用aisexec时,会非常消耗CPU
        threads: 0    #实现认证时的并行线程数,0表示默认配置
        interface {   # 指定在哪个接口发心跳信息,子模块
                ringnumber: 0   #冗余环号,节点有多个网卡是可定义,避免心跳信息成环。
                bindnetaddr: 192.168.1.0   #绑定心跳网段
                mcastaddr: 226.94.8.8      #心跳组播地址
                mcastport: 5405            #心跳组播使用端口
                ttl: 1                     #表示只向外播一次
        }
}
logging {          # 跟日志相关
        fileline: off       #指定要打印的行
        to_stderr: no       #是否发送到标准错误输出,即屏幕
        to_logfile: yes     #记录到日志文件
        to_syslog: no       #记录到系统日志syslog
        logfile: /var/log/cluster/corosync.log  #日志文件路径
        debug: off          #是否启动调试
        timestamp: on       #是否打印时间戳
        logger_subsys {     #日志的子系统
                subsys: AMF
                debug: off
        }
}
service {
  ver:  0
  name: pacemaker        #定义corosync启动时同时启动pacemaker
  # use_mgmtd: yes
}                                                                                                                             
aisexec {     #表示启动ais的功能时,以哪个用户的身份运行
              #这个块可不定义,corosync默认就是以root身份运行的
  user: root
  group: root
}
amf {     # 跟编程接口相关的
        mode: disabled
}

2).生成认证key

   用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵,狂敲键盘即可,随意敲,敲够即可。(关于random使用键盘敲击产生随机数的原理可自行google)

   实验演示没有足够的熵,这里将采用投机的方式,生产环境,切切不可。

1
2
3
4
5
6
//投机的认证方式
# mv /dev/random /dev/lala
# ln /dev/urandom /dev/random   //将随机数生成器链接至伪随机数生成器
# corosync-keygen    //生成密钥文件,用于节点通信,会生成authkey文件
# rm -rf /dev/random        //删除链接
# mv /dev/lala /dev/random     //还原随机数生成器

3).copy配置给node2

1
[root@node1 corosync]# scp authkey corosync.conf node2:/etc/corosync/

4).启动corosync

1
2
[root@node1 corosync]# service corosync start
[root@node1 corosync]# ssh node2  "service corosync start"

5).检查启动状况

1
2
3
4
5
6
7
8
//查看corosync引擎是否正常启动
[root@node1 corosync]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
//查看初始化节点通知是否正常发出
[root@node1 corosync]# grep  TOTEM  /var/log/messages
//检查启动过程中是否有错误产生
[root@node1 corosync]# grep ERROR: /var/log/messages | grep -v unpack_resources
//查看pacemaker是否正常启动
[root@node1 corosync]# grep pcmk_startup /var/log/messages

5.集群及pacemaker配置文件

1).配置文件说明

Red Hat High Availability Add-On 的配置文件为 corosync.conf 和 cib.xml。请勿直接编辑这些文件,而是使 用 pcs 或 pcsd 界面进行编辑。

corosync.conf 文件(/etc/corosync/corosync.conf)提供 corosync 使用的集群参数,后者是 Pacemaker 所在集群管理器

cib.xml 是一个 XML 文件(/var/lib/pacemaker/cib/cib.xml),代表集群配置和集群中所有资源的当前状态。这个文件由 Pacemaker 的集群信息基地(CIB)使用。会自动在整个集群中同步 CIB 的内容

2).修改配置

pcs命令行 pcs 命令行界面通过为 corosync.conf 文件 cib.xml 提供界面,从而控制和配置 corosync 及 Pacemaker。

1
2
#pcs 命令一般格式如下。
pcs [-f file] [-h] [commands]...

查看原始集群配置

1
pcs cluster cib

将配置更改保存到文件中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#使用 pcs 命令时,可使用 -f 选项将配置更改保存到文件中,而不会影响活跃的 CIB。
#如果之前已配置了集群,且已有一个活跃 CIB,则可使用以下命令保存原始 xml 文件。
pcs cluster cib filename
#例如:可使用以下命令将原始 xml 从 CIB 保存到名为 testfile 的文件。
pcs cluster cib testfile

#以下命令在 testfile1 中创建一个资源,但不会将该资源添加到当前运行的集群配置中。
pcs -f testfile1 resource create VirtualIP ocf💓IPaddr2 ip=192.168.0.120
cidr_netmask=24 op monitor interval=30s
#可使用以下命令将 testfile 的当前内容 push 回 CIB 中。
pcs cluster cib-push filename

6.基于corosync实现web高可用资源管理

1).crmsh使用介绍

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@node1 ~]# crm  //进入crmsh
crm(live)# help   #查看帮助
This is crm shell, a Pacemaker command line interface.
Available commands:
    cib              manage shadow CIBs            #CIB管理模块
    resource         resources management     #资源管理模块
    configure        CRM cluster configuration  #CRM配置,包含资源粘性、资源类型、资源约束等
    node             nodes management  #节点管理
    options          user preferences  #用户偏好
    history          CRM cluster history  #CRM 历史
    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         #进入配置模式
crm(live)configure# show     #查看当前配置
crm(live)configure# verify   #检查当前配置语法
crm(live)configure# commit   #提交配置
crm(live)configure# cd
crm(live)# ra   //进入RA(资源代理配置)模式
crm(live)ra# help
This level contains commands which show various information about
the installed resource agents. It is available both at the top
level and at the `configure` level.
Available commands:
    classes          list classes and providers    ##查看RA类型
    list             list RA for a class (and provider)  ##查看指定类型(或提供商)的RA
    meta,info        show meta data for a RA   ##查看RA详细信息
    providers        show providers for a RA and a class  ##查看指定资源的提供商和类型
    help,?           show help (help topics for list of topics)
    end,cd,up        go back one level
    quit,bye,exit    exit the program
crm(live)ra# cd
crm(live)# status   //查看集群状态

2).stonith参数的调整

禁用stonith功能,corosync默认是启用stonith功能的,没有stonith设备,若直接去配置资源的话,verif会报错,无法commit。

1
2
3
4
5
6
7
[root@node1 corosync]# crm configure    #进入crm命令行模式配置资源等
crm(live)configure# property    #切换到property目录下,可以用两次tab键进行补全和查看
usage: property [$id=<set_id>] <option>=<value>    # property的用法和格式
crm(live)configure# property stonith-enabled=false   #禁用stonith-enabled
crm(live)configure# verify      #检查设置的属性是否正确
crm(live)configure# commit    #提交
crm(live)configure# show     #查看当前集群的所有配置信息

3).配置web集群

五.Pacemaker运维命令

梳理pacemaker的运维命令,将pacemaker的运维命令进行输出

1.pcs 命令的管理类别

1
2
3
4
5
6
cluster: 配置集群选项和节点
status :查看当前集群资源和节点以及进程的状态
resource:创建和管理集群资源
constraint:管理集群资源约束和限制
property :管理集群节点和资源属性
stonith:进行隔离

2.pcs cluster (管理节点) 命令

启动服务器

1
pcs cluster start 10.0.8.160

强制启动服务器

1
pcs cluster start --force

启动所有服务器

1
pcs cluster start --all

关闭服务器

1
pcs cluster stop 10.0.8.160

强制关闭服务器

1
pcs cluster stop --force

关闭所有的服务器

1
pcs cluster stop --all

让服务器随pcs服务一同启动

1
pcs cluster enable 10.0.8.160

让所有服务器都随 pcs 服务一起启动

1
pcs cluster enable --all

取消服务器随 pcs 服务器一同启动

1
pcs cluster diablle 10.0.8.160

取消让所有服务器都随 pcs 服务一起启动

1
pcs cluster disable --all

在pcs集群里添加新的节点

1
pcs cluster node add 10.0.8.160

在pcs集群里删除一个节点

1
pcs cluster node remove 10.0.8.160

让某台服务器失效

1
pcs cluster standby 10.0.8.160

让所有服务器失效

1
pcs cluster standby --all

让某一台服务器从失效状态回归到活跃状态

1
pcs cluster unstandby 10.0.8.160

让所有服务器从失效状态回归到活跃状态

1
pcs cluster unstandby --all

启动集群实例

启动node1, node2, node3的pcs集群

1
 pcs cluster setup --start --name testcluster --last_man_standing --wait_for_all node1 node2 node3

查看本地的pcs配置文件

1
vim /etc/corosync/corosync.conf

同步pcs节点的配置文件

1
pcs cluster sync

pcs cluster setup命令

  1. –wait_for_all 当所有集群成员都处于 online 的时候才启动集群投票,主要用于阻止被隔离的主机参与投票

  2. –auto_tie_breaker 最低投票从从总数的 50% +1 变为 50% ,如果被分割的主机群两边的数量相等,则拥有最小主机 ID 的那一边才会生效

(补充:–auto_tie_breaker 主要用于集群主机数是双数的主机群)

  1. –last_man_standing

有了这个参数之后每隔 10 秒钟,就重新计算一次期望投票数,主要用于人为关闭主机后快速进行重新投票 和 –auto_tie_breaker 选项结合可以让整个集群只有一台主机处于激活状态

(注意:当期望投票数发生变化时, # pcs corosync-quorumtool -m 命令不会自动更新,所以最好使用这个命令 watch -n1 corosync-quorumtool)

  1. –two_node

设置整个集群只包含有两台主机,期望投票数是1,他会自动启用 wait_for_all 选项

3.pcs status (查询状态) 命令

查看集群状态

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#显示集群和集群资源所有状态
pcs status
#显示具体集群组件的状态
#{commands}的可选值为:resources、groups、cluster、nodes 或 pcsd
pcs status {commands}
#输出为xml
pcs status xml

#可使用以下命令显示集群当前状态的信息子集
#显示集群状态,但不显示集群资源
pcs cluster status
#以下命令显示集群资源状态
pcs status resources

查看与集群相关的信息

1
pcs status cluster

只查看资源组的资源

1
pcs status groups

只查看资源组个人的资源

1
pcs status resources

查看主机的配置状态

1
pcs status nodes

只查看 corosync 的状态

1
pcs status corosync

查看 pcsd 在每一个主机上的配置状态

1
pcs status pcsd

查看 pcs 总共的主机数,当前的主机数,最大期望投票数,最低投票数要求,当前生效投票数

1
pcs corosync-quorumtool -m

(注意:为了防止脑裂,PCS 的最低投票数必须高于总主机数的 50%)

查看最近的投票信息

1
watch -n1 corosync-quorumtool

查看所有的 pcs 资源

1
pcs resource show

查看某一个 pcs 资源

1
pcs resourece show node22

查看所有 pcs 资源被限制的列表

1
pcs constraint list

查看现有的资源限制信息

1
pcs constraint

查看现有的详细资源限制信息

1
pcs constraint --full

查看资源被限制到某一台机器上的信息

1
crm_simulate -sL

4.pcs stonith (管理隔离) 命令

fence 的作用是隔离不需要的主机,当一台主机和集群失去联系时,将其隔离,以防止脑裂

查看所有可用的 fence 的列表

1
pcs stonith list

查看可用 fence 的详细信息

1
pcs stonith describe fence_rhevm

查看所有已配置的 fence 状况

1
pcs stonith fence show --full

删除某一个 fence

1
pcs stonith delete <fence>

删除当前所有的 fencing 资源

1
2
3
for i in fence_node{a..d}; do
> pcs stonith delete &{I}
> done

创建 fence_vmware_soap 的案例

1
pcs stonith create vmfence fence_vmware_soap ipaddr=192.168.0.254 login="vmfence" passwd="vmfence" ssl_insecure=1 pcmk_host_check="static-list" pcmk_host_list="pacemaker0 pacemaker1 pacemaker2"

( 补充:这里以创建

  1. 名为 vmfence
  2. fence 服务器的 IP 地址为 192.168.0.254
  3. fence 服务器的用户名为
  4. fence 服务器的密码为
  5. 被 fence 监控的服务器为 pacemaker0、pacemaker1 和 pacemaker2 的 fence 为例 )

(注意:fence_vmware_soap 需要在 vmware 环境下才能被使用,且需要设置好 vmfence 的用户、密码、IP 等)

隔离某一个台主机

1
 pcs stonith fence <host>

从 fencing 删除某台主机

1
pcs stonith delete <host>

5.pcs resoure (管理资源) 命令

resoure 是进行资源管理的,此处的命令比较重要

pcs resource 命令的常用选项

  1. interval=value 定义资源监控的时间,如果不设置的话,就使用的是 resource agent ,每 60 秒检测一次

  2. timeout=value 设置操作的等待时间,如果时间结束了某项操作还没有完成,则自动失败

  3. on-fail=action 如果操作失败,则会执行以下动作

  4. ignore 忽略所有失败的操作

  5. block 当 fence 没有被配置时,停止执行操作

  6. stop 停止处于激活状态的集群

  7. restart 重启资源

  8. fence 当 fence 有被配置时,当某个资源停止时隔离运行此资源的主机

  9. standby 将所有资源从他正在运行的主机上移到另一个主机

pcs resource 命令选项的使用案例

1
2
3
4
 pcs resourece create webserver apache \
> configfile="/etc/httpd/conf/http.conf" \
> statusurl="http:?/127.0.0.1/server-status" --group myweb \
> op monitor interval=20s timeout=30s

补充:这里以创建

  1. 名为 webserver
  2. 配置文件是 /etc/httpd/conf/http.conf
  3. 状态链接是 http:?/127.0.0.1/server-status
  4. 组名是 myweb
  5. 监控间隔是 20 秒
  6. 延迟时间是 30 秒 的 apache 资源为例

显示所有可用的资源列表

1
pcs resource list

查看具体的某一个可用资源的介绍

1
pcs resource describe <resource>

查看所有的 pcs 资源

1
pcs resource show

查看某一个 pcs 资源

1
pcs resource show <resource>

查看所有 pcs 资源被限制的情况

1
pcs constraint list

清理故障,重新拉起资源

1
pcs resource cleanup --all

修改 pcs 资源

1
# pcs resource update <resource> <option>

删除 pcs 资源

1
pcs resource delete <resource> 

在某一个组里面添加某一个资源

1
pcs resource group add <group> <resource>

在某一个组里面删除某一个资源

1
pcs resource group remove <group> <resource>

停用某一个 pcs 资源

1
pcs resource disable <resource>

启用某一个 pcs 资源

1
pcs resource enable <resource>

移动 pcs 资源到另一个主机

1
pcs resource move <resource> <host>

指定某一个 pcs 资源只能在某一个主机上运行

1
pcs resource ban <resource> <host>

清除某一个 pcs 资源只能在某一个主机上运行的限制

1
pcs resource clear <resource> <host>

删除某一个资源的监控

1
pcs resource op remove <resource> monitor

添加某一个资源的监控

1
pcs resource op add <resource> monitor <fence parameter> onfail=fence

查看某一个 pcs 资源失败的次数

1
pcs resource failcount show <resource>

检查某一个资源的情况

1
pcs resource debug-start firstwebserver --full