群集资源类型有四种:
1、primitive 本地主资源 (只能运行在一个节点上)
2、group 把多个资源轨道一个组里面,便于管理
3、clone 需要在多个节点上同时启用的(如ocfs2,stonith没有主次之分)
4、master 有主次之分,如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#当前DC是node1
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服务资源
在node1和node2上安装httpd服务
# yum -y install httpd
在node1和node2上创建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的工作。