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方式安装更简单;当然,如果你不嫌麻烦,也可以从源码进行编译安装。
-
su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm'
-
wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
-
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
-
# Please read the openais.conf.5 manual page
-
compatibility: whitetank
-
-
aisexec {
-
# Run as root - this is necessary to be able to manage resources with Pacemaker
-
user: root
-
group: root
-
}
-
-
service {
-
# Load the Pacemaker Cluster Resource Manager
-
name: pacemaker
-
ver: 0
-
use_mgmtd: yes
-
use_logd: yes
-
}
-
-
totem {
-
# Version of current configuration.
-
version: 2
-
# Whether enable encryption or not
-
secauth: off
-
# How many threads to use for encryption/decryption
-
threads: 0
-
# How long before declaring a token lost (ms)
-
token: 5000
-
# How many token retransmits before forming a new configuration
-
token_retransmits_before_loss_const: 10
-
# How long to wait for join messages in the membership protocol (ms)
-
join: 1000
-
# How long to wait for consensus to be achieved before starting a new round of membership configuration (ms)
-
consensus: 2500
-
# Turn off the virtual synchrony filter
-
vsftype: none
-
# Number of messages that may be sent by one processor on receipt of the token
-
max_messages: 20
-
# Stagger sending the node join messages by 1..send_join (ms)
-
send_join: 45
-
# Limit generated nodeids to 31-bits (positive signed integers)
-
clear_node_high_bit: yes
-
-
interface {
-
ringnumber: 0
-
bindnetaddr: 192.168.9.0
-
mcastaddr: 226.94.1.1
-
mcastport: 5405
-
}
-
}
-
-
logging {
-
fileline: off
-
to_stderr: no
-
to_logfile: yes
-
to_syslog: yes
-
logfile: /var/log/cluster/corosync.log
-
debug: off
-
timestamp: on
-
logger_subsys {
-
subsys: AMF
-
debug: off
-
}
-
}
-
-
amf {
-
mode: disabled
-
}
配置完成后,把所有配置文件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,
发现错误:
-
parse error in config: parse error in config: .
-
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
检查集群是否正确启动,以及能否初始化节点:
-
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
-
grep TOTEM /var/log/messages
检查pacemaker状态:
-
grep pcmk_startup /var/log/messages
检查是否错误:
-
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层级等。
对于创建资源和配置约束的大致步骤,示例如下:
-
crm(live)configure# primitive VIP ocf:heartbeat:IPaddr2 \
-
> params ip=192.168.9.200 cidr_netmask=32 \
-
> op monitor interval=20s timeout=30s
上述命令创建一个名为VIP的原始资源,并指定了控制该资源的脚本(或者叫资源代理,RA),配置了该资源的一些选项。创建资源是在configure层级中进行的,primitive命令创建一个原始资源,params命令指定资源的参数,op命令指定常用的操作。
我们重点关注资源代理ocf:heartbeat:IPaddr2:ocf是资源代理(的类别(class),heartbeat是资源代理的provider,最后一个字段IPaddr2是资源代理的名称(type)。
列出集群资源所有可用的classes:
-
crm(live)ra#classes
列出由heartbeat提供的遵守OCF标准的所有资源代理:
-
crm(live)ra#list ocf heartbeat
查看指定RA的常见选项(创建资源时,会用到这些选项):
-
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,下面就要实际操作了。