corosync+openais+pacemaker实现www高可用性

群集资源类型有四种:

1primitive   本地主资源 (只能运行在一个节点上)

2group     把多个资源轨道一个组里面,便于管理

3clone    需要在多个节点上同时启用的(如ocfs2stonith没有主次之分)

4master    有主次之分,如drbd

实验拓扑图:

 

一、准备环境

1、系统环境

# uname r            #内核版本

2.6.18-164.el5

# cat /etc/redhat-release  #查看系统信息

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

2、修改主机名称等

在节点1上进行修改

# hostname node1.a.com          #修改主机名称

# vim /etc/sysconfig/network         #修改文件

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node1.a.com      

之后退出再次登陆。

# hostname                       #查看名称

node1.a.com

# vim /etc/hosts                  #修改hosts文件

127.0.0.1                localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.10.10 node1.a.com

192.168.10.20 node2.a.com

在节点2上进行修改

# hostname node2.a.com            #修改主机名称

# vim /etc/sysconfig/network           #修改文件

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=node2.a.com

之后退出再次登陆。

# vim /etc/hosts              #修改hosts文件

127.0.0.1                localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.10.10 node1.a.com

192.168.10.20 node2.a.com

3、同步时钟

要求两个节点上的始终必须要一致。

[root@node2 ~]# hwclock -s            #同步时钟

[root@node1 ~]# hwclock –s

4、所需软件包

[root@node2 ~]# ll

-rw-r--r-- 1 root root 271360 07-24 21:46 cluster-glue-1.0.6-1.6.el5.i386.rpm

-rw-r--r-- 1 root root 133254 07-24 21:46 cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

-rw-r--r-- 1 root root 170052 07-24 21:46 corosync-1.2.7-1.1.el5.i386.rpm

-rw-r--r-- 1 root root 158502 07-24 21:46 corosynclib-1.2.7-1.1.el5.i386.rpm

-rw-r--r-- 1 root root 165591 07-24 21:46 heartbeat-3.0.3-2.3.el5.i386.rpm

-rw-r--r-- 1 root root 289600 07-24 21:46 heartbeat-libs-3.0.3-2.3.el5.i386.rpm

-rw-r--r-- 1 root root  60458 07-24 21:46 libesmtp-1.0.4-5.el5.i386.rpm

-rw-r--r-- 1 root root 207085 07-24 21:46 openais-1.1.3-1.6.el5.i386.rpm

-rw-r--r-- 1 root root  94614 07-24 21:46 openaislib-1.1.3-1.6.el5.i386.rpm

-rw-r--r-- 1 root root 796813 07-24 21:46 pacemaker-1.1.5-1.1.el5.i386.rpm

-rw-r--r-- 1 root root 207925 07-24 21:46 pacemaker-cts-1.1.5-1.1.el5.i386.rpm

-rw-r--r-- 1 root root 332026 07-24 21:46 pacemaker-libs-1.1.5-1.1.el5.i386.rpm

-rw-r--r-- 1 root root  32818 07-24 21:46 perl-TimeDate-1.16-5.el5.noarch.rpm

-rw-r--r-- 1 root root 388632 07-24 21:46 resource-agents-1.0.4-1.1.el5.i386.rpm

5、在节点1和节点2上分别挂在光盘

#  mkdir /mnt/cdrom

# mount /dev/cdrom /mnt/cdrom/

6、在节点1和节点2上安装上述软件包

# yum localinstall -y *.rpm –nogpgcheck

二、实验步骤

1、在节点1和节点2上,产生corosync的配置文件,并编辑配置文件

# cd /etc/corosync/

# cp corosync.conf.example corosync.conf

# vim corosync.conf

  8         interface {

  9                 ringnumber: 0

 10                 bindnetaddr: 192.168.10.10  #心跳检测地址

 11                 mcastaddr: 226.94.1.1

 12                 mcastport: 5405

 13         }

加入以下内容

34 service {

 35         ver: 0

 36         name: pacemaker  #要用pacemaker

 37 }

 38

 39 aisexec {                  #会用到openais一些子选项

 40         user: root

 41         group: root

 42 }

2、在节点1和节点2上创建日志存放的目录

#mkdir /var/log/cluster

3、在节点1和节点2上启动corosync服务

# service corosync start

4、验证corosync引擎是否正常启动了

#grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages 

Jul 25 00:57:07 node2 corosync[2439]:   [MAIN  ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.

Jul 25 00:57:07 node2 corosync[2439]:   [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

5、查看初始化成员节点通知是否发出

# grep -i totem /var/log/messages

Jul 25 00:57:02 node1 corosync[2427]:   [TOTEM ] The network interface [192.168.10.10] is now up.          #node1心跳地址已经处于up状态

Jul 25 00:57:07 node2 corosync[2439]:   [TOTEM ] The network interface [192.168.10.20] is now up.          #node2心跳地址已经处于up状态

6、检查过程中是否有错误产生

# grep -i error:  /var/log/messages #会产生stonith的错误,我们在后边配置解决

7、检查pacemaker是否已经启动

# grep -i pcmk_startup /var/log/messages

8、查看集群的成员状态

[root@node1 ~]# crm status

============

Last updated: Wed Jul 25 01:17:10 2012

Stack: openais

Current DC: node1.a.com - partition with quorum#当前DCnode1

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f

2 Nodes configured, 2 expected votes

0 Resources configured.

============

Online: [ node1.a.com node2.a.com ]

9、验证该文件的语法错误,产生的错误与上述stonith相同

#crm_verify  -L

[root@node1 ~]# crm_verify  -L

crm_verify[2617]: 2012/07/25_01:34:31 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined

crm_verify[2617]: 2012/07/25_01:34:31 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option

crm_verify[2617]: 2012/07/25_01:34:31 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity

解决stonith错误

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# property stonith-enabled=false

crm(live)configure# commit

10、定义资源

配置一个资源,可以在configure 下面进行配置

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure#  primitive webip ocf:heartbeat:IPaddr  params ip=192.168.10.1              #类型prinitive,名称webip,设置资源公共ip

crm(live)configure# commit     #交上述配置

可以使用show命令对上述配置进行查看

crm(live)configure# show

node node1.a.com

node node2.a.com

primitive webip ocf:heartbeat:IPaddr \

       params ip="192.168.10.1"

property $id="cib-bootstrap-options" \

       dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

       cluster-infrastructure="openais" \

       expected-quorum-votes="2"

stonith-enabled="false"

在节点1上可以看到群集ip地址

[root@node1 ~]# ifconfig

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:5F:B3:A1 

          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

11、定义高可用性的web服务资源

node1node2上安装httpd服务

# yum -y install httpd

node1node2上创建web页面

[root@node1 ~]# echo "hello node1" >/var/www/html/ index.html

[root@node2 ~]# echo "hello node2" >/var/www/html/ index.html

定义httpd资源

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# primitive webserver lsb:httpd

crm(live)configure# commit

12、高级群集服务资源越来越多,会分布在不同的节点上,以尽量负载均衡

需要约束在同一个节点上,定义成一个组

创建组

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# group web webip webserver

crm(live)configure# commit

crm(live)configure# end

crm(live)# status

============

Last updated: Wed Jul 25 02:15:02 2012

Stack: openais

Current DC: node1.a.com - partition with quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f

2 Nodes configured, 2 expected votes

1 Resources configured.

============

Online: [ node1.a.com node2.a.com ]

 Resource Group: web

     webip (ocf::heartbeat:IPaddr):    Started node1.a.com

     webserver (lsb:httpd):    Started node1.a.com

crm(live)#

13、忽略节点1的票数

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# commit

14、查看群集成员状态

crm(live)configure# show

node node1.a.com

node node2.a.com

primitive webip ocf:heartbeat:IPaddr \

       params ip="192.168.10.1"

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"

三、测试

我们看到虚拟ip在节点1

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:5F:B3:A1 

          inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

我们在node2节点查看http状态

[root@node2 ~]# service httpd status

httpd 已停

我们访问群集虚拟ip地址http://192.168.10.1

 

当节点1因为某种原因关闭时,我们继续访问http://192.168.10.1

 

我们来看下node2节点的状态

[root@node2 ~]# crm status

============

Last updated: Wed Jul 25 02:35:47 2012

Stack: openais

Current DC: node2.a.com - partition WITHOUT quorum

Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f

2 Nodes configured, 2 expected votes

1 Resources configured.

============

Online: [ node2.a.com ]

OFFLINE: [ node1.a.com ]

 Resource Group: web

     webip (ocf::heartbeat:IPaddr):    Started node2.a.com

     webserver (lsb:httpd):    Started node2.a.com

此时,node1节点恢复正常,我们继续查看资源状态

Online: [ node1.a.com node2.a.com ]

 Resource Group: web

     webip (ocf::heartbeat:IPaddr):    Started node2.a.com

     webserver (lsb:httpd):    Started node2.a.com

访问http://192.168.10.1,依然是nodo2的网页

 

虽然,node1也处于在线状态,但是在高可用性群集中,node1并没有抢占资源,而是处于等待状态,当node2节点处于down状态的时候,node1会接替node2的工作。

你可能感兴趣的:(高可用,pacemaker,corosync,openais)