corosync+openais+pacemaker实现高可用性群集
实验拓扑
Corosync简介:
Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci.
Openais:就是corostnc的前身。
Pacemaker是一个群集管理器。它利用首选群集基础设施提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。
它可以做几乎任何规模的群集,并带有一个强大的依赖模式,让管理员能够准确地表达的群集资源之间的关系(包括顺序和位置)。
首先准备好环境,配置好两台主机的ip地址
Vip:192.168.2.100
Node1
Eth0:192.168.2.10
Node2
Eth0:182.168.2.20
实现无障碍通讯
配置好yum
拷贝所需软件包
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 安装pacemaker依赖的
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.1.5-1.1.el5.i386.rpm 资源管理器
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
安装这些软件包
[root@node1 ~]# yum localinstall *.rpm --nogpgcheck
创建目录 mkdir /var/log/cluster
为了便面其他主机加入该集群,需要认证,生成一个authkey
[root@node1 corosync]# corosync-keygen
排错
11.验证corosync引擎是否正常启动了
[root@node1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages
ct 18 23:24:02 node1 smartd[2832]: Opened configuration file /etc/smartd.conf
Oct 18 23:24:02 node1 smartd[2832]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
May 7 14:00:29 node1 smartd[2787]: Opened configuration file /etc/smartd.conf
May 7 14:00:29 node1 smartd[2787]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
May 7 16:24:36 node1 corosync[686]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
May 7 16:24:36 node1 corosync[686]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
12。查看初始化成员节点通知是否发出
[root@node1 corosync]# grep -i totem /var/log/messages
May 7 16:24:36 node1 corosync[686]: [TOTEM ] Initializing transport (UDP/IP).
May 7 16:24:36 node1 corosync[686]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
May 7 16:24:36 node1 corosync[686]: [TOTEM ] The network interface is down.
May 7 16:24:37 node1 corosync[686]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
May 7 16:38:30 node1 corosync[754]: [TOTEM ] Initializing transport (UDP/IP).
May 7 16:38:30 node1 corosync[754]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
May 7 16:38:30 node1 corosync[754]: [TOTEM ] The network interface [192.168.2.10] is now up.
May 7 16:38:31 node1 corosync[754]: [TOTEM ] Process pause detected for 603 ms, flushing membership messages.
May 7 16:38:31 node1 corosync[754]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
13.检查过程中是否有错误产生
grep -i error: /var/log/messages |grep -v unpack_resources (便面stonith的错误)
14.检查pacemaker时候已经启动了
[root@node1 corosync]# grep -i pcmk_startup /var/log/messages
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: CRM: Initialized
May 7 16:24:36 node1 corosync[686]: [pcmk ] Logging: Initialized pcmk_startup
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Service: 9
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.com
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: CRM: Initialized
May 7 16:38:31 node1 corosync[754]: [pcmk ] Logging: Initialized pcmk_startup
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Service: 9
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.com
15 前集群的节点上启动另外一个节点
[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'
Starting Corosync Cluster Engine (corosync): [ OK ]
16,将前面的验证步骤在另外一个节点上再次验证一次
17.在任何一个节点上 查看集群的成员状态
可以看到有stonith错误,在高可用的环境里面,会禁止实用任何支援
可以禁用stonith ,不禁用就提交不上去
定义资源
提交上去
crm(live)configure# commit
查看一下我们的ip
定义我们服务的资源
先安装web服务器
Node1
[root@node2 ~]# yum install httpd
[root@node2 ~]# chkconfig httpd off
[root@node2 ~]# echo "node1" >/var/www/html/index.html
crm(live)configure# primitive webserver lsb:httpd
Node2
[root@node2 ~]# yum install httpd
[root@node2 ~]# chkconfig httpd off
[root@node2 ~]# echo "node2" >/var/www/html/index.html
crm(live)configure# primitive webserver lsb:httpd
停掉我们的票数,不然在节点一是小的时候,节点二不会变成主节点
4.关数闭 quorum
可选的参数有如下 ignore (忽略)
freeze (冻结,表示已经启用的资源继续实用,没有启用的资源不能
启用)
stop(默认)
suicide (所有的资源杀掉)
将节点1 的corosync 服务启动起来
改变quorum
crm(live)configure# property no-quorum-policy=ignore
cimmit
crm(live)# show (在次查看quorum 的属性)
ERROR: syntax: show
crm(live)# configure
crm(live)configure# show
node node1.a.com
node node2.a.com
primitive webIP ocf:heartbeat:IPaddr \
params ip="192.168.2.100"
primitive webserver lsb:httpd
group web webIP webserver
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore" (已经关闭)
停掉节点一
查看一下资源
访问以下我们的节点
再将我们的node1启动起来
看一下资源到底会不会回滚了。其实在这种高可用的群集上是不会回滚的。依然在node2上。
我们把node2停下来。看能不能切换到node1上呢
切换过来了
也变成了node1了