首先鄙视一下http://linux-ha.org/wiki/Main_Page网站,我从上面下载:
就从来没成功过。
环境:
2台服务器:
主机名 |
系统 |
IP |
www |
RHEL 5.1 |
192.168.1.13 |
web |
CentOS 5.5 |
192.168.1.14 |
一、 安装HA集群软件
先安装EPEL
RHEL/CentOS 5.3 for i386:
#su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'
安装Cluster Labs repository :
#wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
查看包含的软件仓库:
#yum repolist
查看pacemaker软件信息:
#yum info pacemaker
安装corosync、 pacemaker和heartbeat
#yum install -y corosync pacemaker heartbeat
RedHat请修改yum的配置文件
二、 准备工作
配置主机名:
#uname -n
#dnsdomainname
#vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=test1
GATEWAY=192.168.1.2
应用主机名:
#source /etc/sysconfig/network
#hostname $HOSTNAME
配置主机信任关系:
#ssh-keygen -t dsa -f ~/.ssh/id_dsa -N “”
#cp .ssh/id_dsa.pub .ssh/authorized_keys
#scp -r .ssh test2:
三、 配置Corosync
#vi /etc/corosync/corosync.conf
interface {
ringnumber: 0
# The following values need to be set based on your environment
bindnetaddr: 192.168.1.0 #内部网段
mcastaddr: 226.94.1.1 #组播地址
mcastport: 4000 #组播端口
}
#vi /etc/corosync/server.d/pcmk
service {
# Load the Pacemaker Cluster Resource Manager
ver: 0
name: pacemaker
}
将配置同步到另外一台服务器
# for i in /etc/corosync/corosync.conf /etc/corosync/service.d/pcmk;do scp $i www:$i ; done
启动Corosync:
#/etc/init.d/corosync start
检查日志判断Corosync启动和初始化成员节点
# grep -e "corosync.*network interface" -e "Successfully read main 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
启动另外一节点Corosync:
#ssh test2 -- /etc/init.d/corosync start
通过crm查询2个节点状态:
crm status
四、 修改crm配置和添加资源
#crm_verify –L
由于stonith未配置造成的错误日志
我们先进制该功能
#crm configure property stonith-enabled=false
查询目前cib状态
#crm configure show
为集群添加资源:
软件自带的脚本在/usr/lib/ocf/resource.d/下
[root@www ~]# ls /usr/lib/ocf/resource.d/
heartbeat pacemaker
也可以通过命令来查看
除此之外还有基于LSB的脚本
和/etc/init.d/下的脚本一致
添加虚拟IP
#crm
crm(live)# configure
crm(live)configure# primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=192.168.1.20 cidr_netmask=32 op monitor interval=10s
crm(live)configure#verify
crm(live)configure#commit
crm(live)configure#show
在另外一个节点www上查看状态:
将apache添加到资源里,这里我们分别使用基于LSB格式的脚本和OCF格式
LSB:
[root@www ~]# crm
ccrm(live)# configure
crm(live)configure# primitive website lsb:httpd op monitor interval=20s
crm(live)configure#commit
服务已经起来了
OCF:
由于默认apache脚本是基于apache2的,所以有可能需要修改一下,删除线表示修改过的
#: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}
. ${OCF_FUNCTIONS_DIR}/usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
HA_VARRUNDIR=${HA_VARRUN}
#######################################################################
#
# Configuration options - usually you don't need to change these
#
#######################################################################
#
IBMHTTPD=/opt/IBMHTTPServer/bin/httpd
HTTPDLIST="/sbin/httpd /usr/sbin/httpd /usr/sbin/apache /sbin/httpd /usr/sbin/httpd /usr/sbin/apache $IBMHTTPD"
MPM=/usr/share/apache/find_mpm
if
[ -x $MPM ]
then
HTTPDLIST="$HTTPDLIST `$MPM 2>/dev/null`"
fi
# default options for http clients
# NB: We _always_ test a local resource, so it should be
# safe to connect from the local interface.
WGETOPTS="-O- -q -L --no-proxy --bind-address=127.0.0.1"
CURLOPTS="-o - -Ss -L --interface lo"
LOCALHOST="http://localhost"
HTTPDOPTS="-DSTATUS"
DEFAULT_IBMCONFIG=/opt/IBMHTTPServer/conf/httpd.conf
DEFAULT_NORMCONFIG="/etc/httpd/conf/httpd.conf"
服务已经起来了。
测试:
但是我们要注意很多时候我们服务与服务之间也是有依赖关系的,像本例中web服务应该在vip服务起来之后才启动,所以我们应该加入服务启动顺序的限制
五、 测试Failover
查看状态:
关闭web服务器上的corosync服务
在www服务器上查看集群状态
服务已经正常切换到了www服务器,再次启动web服务器上的corosync服务
服务又回到了web服务器上。
这里我们就发现了一个问题,资源抢占!现在只有一个虚拟ip服务切换比较快速,如果是oracle呢?所以我们要避免这种抢占,提高提高服务的时间。
测试
服务依旧运行在www服务器
停止apache服务观察是否能自动重新起来:
[root@web ~]# service httpd stop
使用crm_mon观察,10秒左右就可以看到Failed提示了
之后迅速恢复
参考:
Clusters_from_Scratch.pdf http://clusterlabs.org/mwiki/images/9/9d/Clusters_from_Scratch.pdf
The Linux-HA User's Guide Edition 0.9.2 http://www.linux-ha.org/doc/
若干论坛的提问和答复