首页 > 代码库 > corosync+pacemaker的高可用集群

corosync+pacemaker的高可用集群

基于corosync+pacemaker的高可用集群

    

Pacemaker即Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层(新拆分的heartbeat或corosync)的心跳传递服务,将信息通告给对方。 
pacemaker
管理资源的工具由命令行界面的crmsh、pcs和图形化界面pygui、hawk等进行管理。

因此,一般来说都是选择corosync来进行心跳的检测,搭配pacemaker的资源管理系统来构建高可用的系统,下面就来介绍下corosync+pacemaker构建高可用系统。


 
配置共有两个测试节点,分别server2和server3,相的IP地址分别为172.25.80.2和172.25.80.3;
  模拟实现的集群服务是web服务;
  提供web服务的地址为172.25.80.1

1,基础环境设置:
首先配置一台HA主机需要做的准备工作:
1)固定IP地址
2)所有节点的主机名称和对应的IP地址解析服务可以正常工作,只需要保证两个节点上的/etc/hosts文件均为下面的内容:

172.25.80.2  server2    node1
172.25.80.3  server3    node2
以上三步配置完成后能实现相互解析主机名,如下:

3)配置节点信任关系:
节点1:
# ssh-keygen  -t   rsa
# ssh-copy-id -i  ~/.ssh/id_rsa.pub 
root@node2
节点2:
# ssh-keygen -t rsa
# ssh-copy-id -i  ~/.ssh/id_rsa.pub 
root@node1

2,安装环境需要的相应的软件包:
#yum  install   -y libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpiperl-TimeDate
3,安装corosync和pacemaker,我们这里将软件包放在/root/corosync目录下(两个节点都要做):
cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
pacemaker-1.0.11-1.2.el5.i386.rpm
pacemaker-libs-1.0.11-1.2.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
开始安装:
# cd  /root/corosync/
# yum -y --nogpgcheck  localinstall  *.rpm
这里我们使用本地yum安装,并忽略包的检查。
4,corosync的相关配置(在节点1上执行):
# cd   /etc/corosync
# cp   corosync.conf.example  corosync.conf
这里corosync.conf.example是配置样本,我们只需拷贝一份,并进行修改即可:
vim /etc/corosync/corosync.conf


compatibility: whitetank
totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 172.25.0.0
                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
}
service {
  ver: 0
  name: pacemaker
}
aisexec {
  user: root
  group: root
}
生成节点间通信时用到的认证密钥文件:
# corosync-keygen //此处会在当前目录下生成一个认证密钥文件
然后拷贝相关的文件到节点2上:
# scp -p  corosync.conf  authkey node2:/etc/corosync/
为两个节点创建corosync生成的日志所在的目录:
# mkdir /var/log/cluster
# ssh node2 --  mkdir /var/log/cluster
5,开始启动corosync(在节点1上执行):
# /etc/init.d/corosync start
 Starting Corosync Cluster Engine(corosync):               [  OK ]  //出现此,说明corosync已经启动

启动节点2:
# ssh node2 -- /etc/init.d/corosync  start //此步您需要在节点1上进行
Starting Corosync Cluster Engine (corosync): [ OK  ] //出现此,说明您的节点2corosync已经启动,节点2上继续验证是否出现异常错误
Online: [ server2 server3 ] //此处说明您的两个集群节点均已运行正常。
6,配置集群的工作属性:
因为corosync默认已经启用了stonith,而当前又没有添加stonith设备,会出现默认配置不可用的状态,为防止以后出现错误,影响操作,我们这里可以禁用stonith:
# crm configure property stonith-enabled=false //这样执行的命令会提交而且会立即生效
INFO: building help index

 crm,crm_verify相关的命令是1.0后的版本的pacemaker提供的基于命令行的集群管理工具;可以在集群中的任何一个节点上执行,查看相应的信息。
7,为集群添加集群资源:
corosync支持heartbeat,lsb和ocf等类型的资源代理,目前较为常用的类型为lsb和lsb两类,stonith类专为配置stonith设备而用。

8,配置相试网页:
#echo  "<h1>Server2</h1>"   > /var/www/html/index.html
#chkconfig   httpd off
#service  httpd  stop
#ssh  node2  -- ‘echo "<h1>Server3</h1>"   > /var/www/html/index.html‘
#ssh node2   --  ‘chkconfig  httpd off‘
#ssh  node2  -- ‘service   httpd  stop‘
添加web资源:
首先创建的web集群创建一个IP地址资源,
# crm  configure primitive WebIPocf:heartbeat:IPaddr  paramsip=172.25.80.1
然后将httpd服务添加为集群资源。将httpd添加为集群资源有两处资源代理可用:lsb和ocf:heartbeat,为了简单起见,这里使用lsb类型:
#crm configure primitive WebSite lsb:httpd

可以通过主机的浏览器输入http://172.25.80.1进行访问web服务:
9,在节点2上使节点1离线:
# ssh node1 -- /etc/init.d/corosync stop
# crm status
============
Stack: openais
Current DC: server3 - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ server3 ]
OFFLINE: [ server2 ]
此时节点1已经离线,而节点2却无法获得相应的资源,当然也无法访问相应的服务,,此时的集群状态是“WITHOUT quorum”,没有了quorum,就无法使节点获得相应的资源,集群服务无法正常运行。可以采取设置quorum,来忽略quorum。如下设置:
# crm configure property no-quorum-policy=ignore
# crm status
============
Stack: openais
Current DC: server3 - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ seerver3 ]
OFFLINE: [ server2 ]
 Resource Group: Web

     WebIP (ocf::heartbeat:IPaddr):Started server3
     WebSite (lsb:httpd): Started server3//此时节点2已经获得资源


本文出自 “12444971” 博客,请务必保留此出处http://12454971.blog.51cto.com/12444971/1930094

corosync+pacemaker的高可用集群