[linux] Pacemaker集群资源管理器原理及部署
文章目录
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)。
二.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参数
|
|
3.常用的管理命令
|
|
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示例
|
|
2).时间同步
node2和node3都配置
|
|
3).配置node之间SSH互信
|
|
4).安装httpd
node1,node2
|
|
node1,node2均关闭httpd的自启动,httpd由Pacemaker管理
|
|
node1,node2提供测试页
|
|
5).安装资源管理器客户端命令接口工具crmsh
从pacemaker 1.1.8开始,crmsh发展成了一个独立项目,叫crmsh。pacemaker默认不提供命令接口工具,需要单独安装crmsh。
|
|
3.安装corosync和pacemaker
所有节点均安装
|
|
可使用 yum install
命令安装 Red Hat High Availability Add-On 软件包以及 High Availability 频道中的所有可用 fence 代理。
|
|
另外,可使用下面的命令安装 Red Hat High Availability Add-On 软件包以及只有您需要的 fence 代理。
|
|
以下命令显示可用 fence 代理列表。
|
|
lvm2-cluster
和 gfs2-utils
软件包是 ResilientStorage 频道的一部分,可根据需要使用以下命令安装
|
|
4.corosync配置及启动
|
|
1).配置主配置文件
|
|
2).生成认证key
用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵,狂敲键盘即可,随意敲,敲够即可。(关于random使用键盘敲击产生随机数的原理可自行google)
实验演示没有足够的熵,这里将采用投机的方式,生产环境,切切不可。
|
|
3).copy配置给node2
|
|
4).启动corosync
|
|
5).检查启动状况
|
|
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。
|
|
查看原始集群配置
|
|
将配置更改保存到文件中
|
|
6.基于corosync实现web高可用资源管理
1).crmsh使用介绍
|
|
2).stonith参数的调整
禁用stonith功能,corosync默认是启用stonith功能的,没有stonith设备,若直接去配置资源的话,verif会报错,无法commit。
|
|
3).配置web集群
五.Pacemaker运维命令
梳理pacemaker的运维命令,将pacemaker的运维命令进行输出
1.pcs 命令的管理类别
|
|
2.pcs cluster (管理节点) 命令
启动服务器
|
|
强制启动服务器
|
|
启动所有服务器
|
|
关闭服务器
|
|
强制关闭服务器
|
|
关闭所有的服务器
|
|
让服务器随pcs服务一同启动
|
|
让所有服务器都随 pcs 服务一起启动
|
|
取消服务器随 pcs 服务器一同启动
|
|
取消让所有服务器都随 pcs 服务一起启动
|
|
在pcs集群里添加新的节点
|
|
在pcs集群里删除一个节点
|
|
让某台服务器失效
|
|
让所有服务器失效
|
|
让某一台服务器从失效状态回归到活跃状态
|
|
让所有服务器从失效状态回归到活跃状态
|
|
启动集群实例
启动node1, node2, node3的pcs集群
|
|
查看本地的pcs配置文件
|
|
同步pcs节点的配置文件
|
|
pcs cluster setup命令
-
–wait_for_all 当所有集群成员都处于 online 的时候才启动集群投票,主要用于阻止被隔离的主机参与投票
-
–auto_tie_breaker 最低投票从从总数的 50% +1 变为 50% ,如果被分割的主机群两边的数量相等,则拥有最小主机 ID 的那一边才会生效
(补充:–auto_tie_breaker 主要用于集群主机数是双数的主机群)
- –last_man_standing
有了这个参数之后每隔 10 秒钟,就重新计算一次期望投票数,主要用于人为关闭主机后快速进行重新投票 和 –auto_tie_breaker 选项结合可以让整个集群只有一台主机处于激活状态
(注意:当期望投票数发生变化时, # pcs corosync-quorumtool -m 命令不会自动更新,所以最好使用这个命令 watch -n1 corosync-quorumtool)
- –two_node
设置整个集群只包含有两台主机,期望投票数是1,他会自动启用 wait_for_all 选项
3.pcs status (查询状态) 命令
查看集群状态
|
|
查看与集群相关的信息
|
|
只查看资源组的资源
|
|
只查看资源组个人的资源
|
|
查看主机的配置状态
|
|
只查看 corosync 的状态
|
|
查看 pcsd 在每一个主机上的配置状态
|
|
查看 pcs 总共的主机数,当前的主机数,最大期望投票数,最低投票数要求,当前生效投票数
|
|
(注意:为了防止脑裂,PCS 的最低投票数必须高于总主机数的 50%)
查看最近的投票信息
|
|
查看所有的 pcs 资源
|
|
查看某一个 pcs 资源
|
|
查看所有 pcs 资源被限制的列表
|
|
查看现有的资源限制信息
|
|
查看现有的详细资源限制信息
|
|
查看资源被限制到某一台机器上的信息
|
|
4.pcs stonith (管理隔离) 命令
fence 的作用是隔离不需要的主机,当一台主机和集群失去联系时,将其隔离,以防止脑裂
查看所有可用的 fence 的列表
|
|
查看可用 fence 的详细信息
|
|
查看所有已配置的 fence 状况
|
|
删除某一个 fence
|
|
删除当前所有的 fencing 资源
|
|
创建 fence_vmware_soap 的案例
|
|
( 补充:这里以创建
- 名为 vmfence
- fence 服务器的 IP 地址为 192.168.0.254
- fence 服务器的用户名为
- fence 服务器的密码为
- 被 fence 监控的服务器为 pacemaker0、pacemaker1 和 pacemaker2 的 fence 为例 )
(注意:fence_vmware_soap 需要在 vmware 环境下才能被使用,且需要设置好 vmfence 的用户、密码、IP 等)
隔离某一个台主机
|
|
从 fencing 删除某台主机
|
|
5.pcs resoure (管理资源) 命令
resoure 是进行资源管理的,此处的命令比较重要
pcs resource 命令的常用选项
-
interval=value 定义资源监控的时间,如果不设置的话,就使用的是 resource agent ,每 60 秒检测一次
-
timeout=value 设置操作的等待时间,如果时间结束了某项操作还没有完成,则自动失败
-
on-fail=action 如果操作失败,则会执行以下动作
-
ignore 忽略所有失败的操作
-
block 当 fence 没有被配置时,停止执行操作
-
stop 停止处于激活状态的集群
-
restart 重启资源
-
fence 当 fence 有被配置时,当某个资源停止时隔离运行此资源的主机
-
standby 将所有资源从他正在运行的主机上移到另一个主机
pcs resource 命令选项的使用案例
|
|
补充:这里以创建
- 名为 webserver
- 配置文件是 /etc/httpd/conf/http.conf
- 状态链接是 http:?/127.0.0.1/server-status
- 组名是 myweb
- 监控间隔是 20 秒
- 延迟时间是 30 秒 的 apache 资源为例
显示所有可用的资源列表
|
|
查看具体的某一个可用资源的介绍
|
|
查看所有的 pcs 资源
|
|
查看某一个 pcs 资源
|
|
查看所有 pcs 资源被限制的情况
|
|
清理故障,重新拉起资源
|
|
修改 pcs 资源
|
|
删除 pcs 资源
|
|
在某一个组里面添加某一个资源
|
|
在某一个组里面删除某一个资源
|
|
停用某一个 pcs 资源
|
|
启用某一个 pcs 资源
|
|
移动 pcs 资源到另一个主机
|
|
指定某一个 pcs 资源只能在某一个主机上运行
|
|
清除某一个 pcs 资源只能在某一个主机上运行的限制
|
|
删除某一个资源的监控
|
|
添加某一个资源的监控
|
|
查看某一个 pcs 资源失败的次数
|
|
检查某一个资源的情况
|
|
文章作者 ZhangKQ
上次更新 2022-02-18