1)本配置共有两个测试节点,分别node1.a.org和node2.a.org,相的IP地址分别为192.168.0.41和192.168.0.42;
2)集群服务为apache的httpd服务;
3)提供web服务的地址为192.168.0.40;
4)系统为rhel5.4, Linux version 2.6.18-164.el5
实验拓扑图如下:
为了配置一台Linux主机成为HA的节点,通常需要做出如下的准备工作:
1)所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
192.168.0.41 node1.a.org node1
192.168.0.42 node2.a.org node2
为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:
Node1:
# sed -i 's@\(HOSTNAME=\).*@\1node1.a.org@g'
# hostname node1.a.org
Node2:
# sed -i 's@\(HOSTNAME=\).*@\1node2.a.org@g'
# hostname node2.a.org
2)设定两个节点可以基于密钥进行ssh通信,这可以通过类似如下的命令实现:
Node1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
Node2:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
libibverbs, librdmacm, lm_sensors, libtool-ltdl, openhpi-libs, openhpi, perl-TimeDate
cluster-glue
cluster-glue-libs
heartbeat
openaislib
resource-agents
corosync
heartbeat-libs
pacemaker
corosynclib
libesmtp
pacemaker-libs
我们只是为了验证这个解决方案,为了方便演示,使用rpm包进行安装
所需的软件包:
cluster-glue-1.0.6-1.6.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
pacemaker-1.0.11-1.2.el5.i386.rpm
pacemaker-libs-1.0.11-1.2.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
使用rpm包安装pacemaker的时候为了解决依赖关系需要安装Heartbeat,如果进行编译安装pacemaker的时候,就不需要安装Heartbeat了
将所有的软件包放到一个自建的目录yum中,方便安装
请根据硬件平台及操作系统类型选择对应的软件包;这里建议每个软件包都使用目前最新的版本。
使用如下命令安装:
# cd /root/cluster
# yum -y --nogpgcheck localinstall *.rpm
# cd /etc/corosync
# cp corosync.conf.example corosync.conf
接着编辑corosync.conf,添加如下内容:
service {
ver: 0
name: pacemaker
}
aisexec {
user: root
group: root
}
并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址,我们这里的两个节点在192.168.0.0网络,因此这里将其设定为192.168.0.0;如下
# corosync-keygen
将corosync和authkey复制至node2:
# scp -p corosync authkey node2:/etc/corosync/
分别为两个节点创建corosync生成的日志所在的目录:
# mkdir /var/log/cluster
# ssh node2 'mkdir /var/log/cluster'
# /etc/init.d/corosync start
查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
# grep TOTEM /var/log/messages
检查启动过程中是否有错误产生:
# grep ERROR: /var/log/messages | grep -v unpack_resources
查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/messages
如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
# ssh node2 -- /etc/init.d/corosync start
注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动;
# crm status
从上面的信息可以看出两个节点都已经正常启动,并且集群已经在正常工作状态。
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:
# crm_verify -L
# crm configure property stonith-enabled=false
使用如下命令查看当前的配置信息:
# crm configure show
从中可以看出stonith已经被禁用。
上面的crm,crm_verify命令是1.0后的版本的pacemaker提供的基于命令行的集群管理工具;可以在集群中的任何一个节点上执行。
corosync支持heartbeat,LSB和ocf等类型的资源代理,目前较为常用的类型为LSB和OCF两类,stonith类专为配置stonith设备而用;
可以通过如下命令查看当前集群系统所支持的类型:
# crm ra classes
如果想要查看某种类别下的所用资源代理的列表,可以使用类似如下命令实现:
# crm ra list lsb
# crm ra list ocf heartbeat
# crm ra list ocf pacemaker
# crm ra list stonith
# crm ra info [class:[provider:]]resource_agent
例如,我们这里可以为接下来要创建的web集群创建一个IP地址资源,以在通过集群提供web服务时使用;这可以通过如下方式实现:
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.40
通过如下的命令执行结果可以看出此资源已经在node1.a.org上启动:
# crm status
# ssh node1 -- /etc/init.d/corosync stop
查看集群工作状态:
# crm status
# crm configure property no-quorum-policy=ignore
片刻之后,集群就会在目前仍在运行中的节点node2上启动此资源了,如下所示:
# crm status
# ssh node1 -- /etc/init.d/corosync start
# crm configure rsc_defaults resource-stickiness=100
# yum -y install httpd
# echo "TestPage Ulnait
" > /var/www/html/index.html
Node2:
# yum -y install httpd
# echo "TestPage Tianlu
" > /var/www/html/index.html
而后在各节点手动启动httpd服务,并确认其可以正常提供服务。接着使用下面的命令停止httpd服务,并确保其不会自动启动(在两个节点各执行一遍):
# yum -y install httpd
# echo "TestPage Tianlu
" > /var/www/html/index.html
接下来我们将此httpd服务添加为集群资源。将httpd添加为集群资源有两处资源代理可用:lsb和ocf:heartbeat,为了简单起见,我们这里使用lsb类型:
# crm ra info lsb:httpd
接下来新建资源WebSite:
# crm configure primitive WebSite lsb:httpd
查看配置文件中生成的定义:
===================================================
此时测试为:
# crm configure rsc_defaults resource-stickiness=0