基于Pacemaker和Corosync搭建HA集群

版权声明:
本文遵循“署名非商业性使用相同方式共享 2.5 中国大陆”协议
您可以自由复制、发行、展览、表演、放映、广播或通过信息网络传播本作品
您可以根据本作品演义自己的作品
您必须按照作者或者许可人指定的方式对作品进行署名。
您不得将本作品用于商业目的。
如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许
可协议发布基于本作品的演绎作品。
对任何再使用或者发行,您都必须向他人清楚地展示本作品使用的许可协议条款。
如果得到著作权人的许可,您可以不受任何这些条件的限制。
                                                                                                                  asram

首先鄙视一下http://linux-ha.org/wiki/Main_Page网站,我从上面下载:

  • Heartbeat 3.0.3: Heartbeat-3-0-STABLE-3.0.3.tar.bz2
  • Cluster Glue 1.0.5: glue-1.0.5.tar.bz2
  • Resource Agents 1.0.3: agents-1.0.3.tar.bz2

就从来没成功过。

环境:

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

clip_image002

查看pacemaker软件信息:

#yum info pacemaker

安装corosync、 pacemaker和heartbeat

#yum install -y corosync pacemaker heartbeat

clip_image004

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

clip_image006

四、 修改crm配置和添加资源

#crm_verify –L

clip_image008

由于stonith未配置造成的错误日志

我们先进制该功能

#crm configure property stonith-enabled=false

查询目前cib状态

#crm configure show

clip_image010

为集群添加资源:

软件自带的脚本在/usr/lib/ocf/resource.d/下

[root@www ~]# ls /usr/lib/ocf/resource.d/

heartbeat pacemaker

也可以通过命令来查看

clip_image012

除此之外还有基于LSB的脚本

clip_image014

和/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

clip_image016

在另外一个节点www上查看状态:

clip_image018

将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

clip_image020

服务已经起来了

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"

clip_image022

clip_image024

服务已经起来了。

测试:

clip_image026

但是我们要注意很多时候我们服务与服务之间也是有依赖关系的,像本例中web服务应该在vip服务起来之后才启动,所以我们应该加入服务启动顺序的限制

clip_image028

五、 测试Failover

查看状态:

clip_image030

关闭web服务器上的corosync服务

clip_image032

在www服务器上查看集群状态

clip_image034

服务已经正常切换到了www服务器,再次启动web服务器上的corosync服务

clip_image036

服务又回到了web服务器上。

这里我们就发现了一个问题,资源抢占!现在只有一个虚拟ip服务切换比较快速,如果是oracle呢?所以我们要避免这种抢占,提高提高服务的时间。

clip_image038

测试

clip_image040

clip_image042

服务依旧运行在www服务器

停止apache服务观察是否能自动重新起来:

[root@web ~]# service httpd stop

使用crm_mon观察,10秒左右就可以看到Failed提示了

clip_image044

之后迅速恢复

clip_image046

参考:

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/

若干论坛的提问和答复

你可能感兴趣的:(职场,休闲,pacemaker,corosync,heartbeat3)