redhatAS4.2 安装集群LVS

create in 20060812 by ghbspecial
环境描述:本文在配置LVS时使用三台linux,一台做Directorserver(192.168.0.25) ,两台做realserver(192.168.0.127 192.168.0.128),在配置lvs+heartbeat时又添加了一台(192.168.0.126)做为备份主节点,虚拟VIP:192.168.0.100
软件列表:
ipvsadm-1.24.tar.gz
libnet.tar 下载地址:http://www.packetfactory.net/libnet/   稳定版本是:1.1.2.1
e2fsprogs 可以用rpm 安装光盘
heartbeat-2.0.2.tar.gz
2.6内核已经集成IPVS内核补订了,所以不再需要重新编译内核.

配置此集群分以下几种情况

一、配置基于DR模式Lvs集群
二、配置基于隧道模式Lvs集群
三、配置基于高可用Lvs+heartbeat
四、此种配置方式可以加强LVS的主节点的高安全性前提下(主节点简称DR,备份主节点DRbak),考虑充分利用资源可以将DRbak做为realserver

一、配置基于DR模式Lvs集群

1、下载ipvsadm管理程序
http://www.linuxvirtualserver.org/software/
注意对应自己的内核版本

ipvsadm-1.24.tar.gz

tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install

注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/kernels/2.6.9-22.EL-i686/ /usr/src/linux

cd ipvsadm-1.24

make && make install

2、配置VIP脚本
[root@ns ~]#more /etc/init.d/lvsDR
#!/bin/sh
#create in 20060812 by ghb
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.128~254
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev eth0:0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr   (如果需要session保持添加-p 默认保持300秒)
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

(-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。

3、配置realserver脚本

#!/bin/bash
#description : start realserver
#create in 20060812 by ghb
VIP=192.168.0.100
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
#end
此脚本使realserver不响应arp请求,将此脚本分别在realserver上执行就可以了。

测试:分别启动realserver上的httpd服务
在realserver1 执行   echo "This is realserver1"   /var/www/html/index.html
在realserver2 执行   echo "This is realserver2"   /var/www/html/index.html

打开IE浏览器输入http://192.168.0.100   应该可以分别看到:This is realserver1 和 This is realserver1.

二、配置基于隧道模式Lvs集群

1、安装ipvsadmin方法和上面一样,在此略过

2、配置LVS directorserver 脚本

[root@ns ~]# more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

3、配置realserver

[root@localhost ~]# more /etc/init.d/tunl
#!/bin/sh
# ghb in 20060812
# description: Config realserver tunl port and apply arp patch
VIP=192.168.0.100

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo "Tunl port starting"
       ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
       /sbin/route add -host $VIP dev tunl0
       echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p

       ;;
stop)
       echo "Tunl port closing"
       ifconfig tunl0 down
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

如果有多个Virutal IP,可以使用tunl0:0,tunl0:1…。
此脚本分别在realserver上执行,目的使realserver忽略arp响应,并设定vip.

测式同样按照上面的方法测试

三、配置基于高可用Lvs+heartbeat

1、确定LVS使用DR或/tun模式,请对照上面的配置。
本例使用tun模式
Director server 端脚本文件
[root@ns ~]# more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
#RIPn=192.168.0.n
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

realserver端同样使用上面的配置文件就可以。

2、安装heartbeat
libnet.tar 下载地址:http://www.packetfactory.net/libnet/   稳定版本是:1.1.2.1
e2fsprogs 可以用rpm 安装光盘
heartbeat-2.0.2.tar.gz    下载地址: http://www.linux-ha.org/download/

2.1安装

tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install

tar zxf heartbeat-1.99.4.tar.gz
cd heartbeat-1.99.4
./ConfigureMe configure –disable-swig –disable-snmp-subagent
make
make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/

groupadd -g 694 haclient
useradd -u 694 -g haclient hacluster

配置:

主配置文件(/etc/ha.d/ha.cf)
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指名heartbeat的日志存放位置
#crm yes #支持ClusterResourceManager(集群资源管理)功能
#bcast eth1 #指明心跳方式使用以太广播方式,并且是在eth1接口上进行广播。
logfacility local0
keepalive 2#指明心跳时间为2秒(即每两秒钟在eth1上发送一次广播)。
deadtime 30#指定在30秒内没有心跳信号,则立即切换服务。
warntime 10 #指明心跳延迟的时间为十秒。当10秒钟内备份机不能联系上主机(当前活动的服务器,即无心跳信号),就会往日志中写入一个警告日志,但此时不会切换服务。

initdead 120   #With some configurations, the network takes some time to start working after a reboot. This is a separate   "deadtime" to   handle that case. It should be at least twice the normal deadtime.
udpport 694#Use port number 694 for bcast or ucast communication. This is the default, and the official IANA registered port number.

baud 19200
serial /dev/ttyS0
mcast eth0 225.0.0.1 694 1 0

# 当主节点恢复后,是否自动切回
auto_failback on

# stonith用来保证共享存储环境中的数据完整性
#stonith baytech /etc/ha.d/conf/stonith.baytech

# watchdog能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。
# 如果使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文件,输入"insmod softdog"加载模块。
# 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。
# 生成设备文件:"mknod /dev/watchdog c 10 130" 。
#watchdog /dev/watchdog

node ns.ghb.com #Mandatory. Hostname of machine in cluster as described by uname -n.
node nsbak.ghb.com

# 默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
# 所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
# 可以通过ipfail插件,设置’ping nodes’来解决这一问题。详细说明参考hearbeat文档。
#ping 192.168.136.1 172.16.0.1
ping_group group1 192.168.0.25 192.168.0.126
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root

# 其他一些插件可以在/usr/lib/heartbeat下找到
#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient

资源文件(/etc/ha.d/haresources):
ns.ghb.com IPaddr::192.168.0.127/24/eth0 httpd
#设置ns.ghb.com为主节点,集群服务器的ip地址为192.168.0.100 netmask 为255.255.255.240集群的服务有httpd

认证文件(/etc/ha.d/authkeys),选取一种认证方式,这个文件的权限必须是600

auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password

chmod 600 /etc/ha.dauthkeys

vi /etc/hosts
添加两台机器的名字,做好名字到IP的对应

使用同样的方法配置节点2
备份节点192.168.0.126 上的heartbeat和apache的配置与节点1要完全相同,lvs配置也要相同。

2.2
上面的安装配置仅是对于heartbeat的,还并没有与LVS整合
完装完毕进行测试,关闭主节点机器,另一台自动接管,主节点恢复后自动接管回服务。如果以上测试没有问题,那么开始和lvs整合。

配置Ldirectord
Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。

配置(/etc/ha.d/ldirectord.cf):
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.100:80
       real=192.168.0.127:80   gate
       real=192.168.0.128:80 gate
       fallback=127.0.0.1:80 gate
       service=http
       request="test.html"
       receive="Test Page"
       virtualhost=www.funbsd.net
       scheduler=rr
       #persistent=600
       #netmask=255.255.255.255
       protocol=tcp
在每个Real Server的中添加监控页:
echo "Test Page" >> /var/www/html/test.html  

修改heartbeat的资源文件/etc/ha.d/haresources
ns.ghb.com 192.168.0.100 tunlvs ldirectord httpd

现在可以在主节点192.168.0.25上启动heartbeat

/etc/init.d/heartbeat start

在备份节点也启动heartbeat   /etc/init.d/heartbeat start

测试:关闭主节点,备份节点将自动接管directorserver服务。(主节点正常时用ifconfig 是可以看tunl接可口的,而备份节点用ifconfig 命令是看不到的,只有在接管主节点服务后才是可以见的)

至此第三部分配置完毕。

四、考虑充份使用资源,将备份节点也做为realserver.

在主备director server 上都要做如下配置
1.director server 需要在脚本文件中将添加realserver,我们预先设置所有机器为realserver。

#!/bin/sh
# description: start LVS of   Directorserver
VIP=192.168.0.100
RIP1=192.168.0.127
RIP2=192.168.0.128
RIP3=192.168.0.25
RIP4=192.168.0.126
GW=192.168.0.1

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo " start LVS   of DirectorServer"
   # set the Virtual   IP Address
   /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
   /sbin/route add -host $VIP dev tunl0
   #Clear IPVS table
   /sbin/ipvsadm -C
   #set LVS
   /sbin/ipvsadm -A -t $VIP:80 -s rr
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
   /sbin/ipvsadm -a -t $VIP:80 -r $RIP4:80 -i
   #Run LVS
   /sbin/ipvsadm
   #end

       ;;
stop)
       echo "close LVS Directorserver"
       ifconfig tunl0 down
       /sbin/ipvsadm -C
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

2.修改/etc/ha.d/ldirectord.cf
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

# A sample virual with a fallback that will override the gobal setting
virtual=192.168.0.100:80
       real=192.168.0.126:80   gate
       real=192.168.0.127:80   gate
       real=192.168.0.128:80   gate
       real=192.168.0.25:80   gate
       fallback=127.0.0.1:80 gate
       service=http
       request="test.html"
       receive="Test Page"
       virtualhost=www.funbsd.net
       scheduler=rr
       #persistent=600
       #netmask=255.255.255.255
       protocol=tcp

3、将realserver的启动脚本加入到主节点,和备份节点中,并且这个脚本的启动级必须先于heartbeat,关闭级必须后于heartbeat

chkconfig   tunl   on 添加到系统启动

4、创建closetunl启动脚本,为启动director server 做准备
more /etc/init.d/closetunl
#!/bin/sh
# create in 200608 ghb
# description: close tunl0 and arp_ignore
VIP=192.168.0.100

. /etc/rc.d/init.d/functions

case "$1" in
start)
       echo "start director server and close tunl"
       ifconfig tunl0 down
       echo 1 > /proc/sys/net/ipv4/ip_forward
       echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
       ;;
stop)
       echo "start Real Server"
       ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
       /sbin/route add -host $VIP dev tunl0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p

       ;;
*)
       echo "Usage: lvs {start|stop}"
       exit 1
esac

chmod 755 /etc/init.d/closetunl
5、修改/etc/ha.d/haresources
ns.wdxc.com closetunl 192.168.0.100   tunlvs ldirectord httpd

启动:首先启动/etc/init.d/tunl 之后再启动/etc/init.d/heartbeat 这样资源文件里面启动脚本都可以启动来了。

6、测试
http://192.168.0.100   应该可以轮到四台机器上

配置完毕

   总结,上面就是本人在本配置LVS+heartbeat过程,本过程还没涉及到共享存储这块,我觉得集群整套方案,共享存储是相当重要的部分,简易实现通 过NFS也可以实现共享存储,但是在要求更大,更快时,可以要考虑其的存储方式如SAN等。还有就是后端数据库之间的负载,同步问题等,本人将在下一步解 决关于共享存储,数据库负载方面的问题。也希望大家可以给出一些方案或是想法,大家共同讨论一下,共同学习,共同进步。

中小型企业级服务器配置技术文档

中小型企业级服务器配置技术文档
作者:管志成
E-mail:guancheng1987@hotmail.com
unix/Linux系统工程师
WEB高可用性机群服务器配置方案
基本图形:
www1 www2
VIP:10.0.0.1 10.0.0.1
公网192.168.0.201 192.168.0.202
私有192.168.1.1 198.168.1.2
首先下载libnet.tar.gz,heartbeat-2.0.7.tar.gz
1 按顺序现装libnet再装heartbeat
[root@www1 ~]#tar –zxvf libnet.tar.gz –C /usr/local/src/
[root@www1 ~]#cd /usr/local/src/libnet/
[root@www1 libnet]# ./configure
[root@www1 libnet]#make
[root@www1 libnet]#make install
都是源码包,解压开后分别执行:
[root@www1 ~]#tar –zxvf heartbeat-2.0.7.tar.gz –C /usr/local/src/
[root@www1 ~]#cd /usr/local/src/ heartbeat-2.0.7/
[root@www1 heartbeat-2.0.7]#./ConfigureMe configure
[root@www1 heartbeat-2.0.7]#make
[root@www1 heartbeat-2.0.7]#make install
安装完毕。
2软件的配置
Heartbeat软件的安装目录为/etc/ha.d,其中的README.config对配置文件进行了说明,共有三个主要的配置
文件:ha.cf,haresources,authkeys。
当你安装完毕之后配置文件会在这个目录/usr/share/src/ heartbeat-2.0.7/doc/下你需要把文件拷到/etc/ha.d/。
[root@www1 doc]#cp ha.cf /etc/ha.d/
[root@www1 doc]#cp haresources /etc/ha.d/
[root@www1 doc]#cp authkeys /etc/ha./
3.1 配置ha.cf文件
#debugfile /var/log/ha-debug该文件保存heartbeat的调试信息
logfile /var/log/ha-log heartbeat的日志文件
logfacility local0
keepalive 2 心跳的时间间隔,默认时间单位为秒
deadtime 5 超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime 3 超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中
initdead 10在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍。
udpport 694 设置广播通信使用的端口,694为默认使用的端口号。
udp eth1 发送heartbeat网卡
baud 19200 设置串行通信的波特率
#serial /dev/ttyS0 # Linux 选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cua/a # Solaris
#bcast eth0 # Linux
#bcast eth1 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solaris
ucast eth1 192.168.1.2
auto_failback on heartbeat的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给从节点并由从节点运行服务。在该选项设为on的情况下,一旦主节点恢复运行,则自动获取
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
watchdog /dev/watchdog
node www1.linux-tiantang.org.cn node来检测网络连接。
node www2.linux-tiantang.org.cn
#ping 10.10.10.254
#ping_group group1 10.10.10.254 10.10.10.253
#hbaping fc-card-name
#respawn userid /path/name/to/run
#respawn hacluster /usr/lib/heartbeat/ipfail
#apiauth client-name gid=gidlist uid=uidlist
#apiauth ipfail gid=haclient uid=hacluster
#hopfudge 1
#deadping 30
#hbgenmethod time
#realtime off
#debug 1

#apiauth ipfail uid=hacluster
#apiauth ccm uid=hacluster
#apiauth cms uid=hacluster
#apiauth ping gid=haclient uid=alanr,root
#apiauth default gid=haclient

#msgfmt classic/netstring

# use_logd yes/no

#conn_logd_time 60

#compression bz2

#compression_threshold 2
3.2 配置haresources文件

www1.linux-tiantang.org.cn 10.0.0.1 http
假设ha.cf文件中node选项设置的两个主机名分别为www1和www2,则根据上述配置,双机系统的主节点为www1,从节点为www2,启动服务为httpd
httpd是apache的启动脚本,heartbeat将从下面目录中寻找这些启动脚本:
/usr/etc/ha.d/resource.d
/usr/etc/rc.d/init.d

3.3 配置authkeys文件
auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!
共有三种可用的鉴权方式:crc、md5和sha1。三种方式安全性依次提高,但同时占用的系
统资源也依次扩大。crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。
最后,该authkeys文件的文件许可权应该设为600(即-rw——-),命令为:
chmod 600 authkeys
注意:上述三个配置文件设置完毕后,应该复制到/etc/ha.d目录下
总结
heartbeat安装完成后,自动在/etc/rc.d/init.d/目录下生成启动脚本heartbeat,启动heartbeat可以使用命令
/etc/rc.d/init.d/heartbeat start
此外还可以使用stop、restart、reload、status等控制参数。

本人使用linux heartbeat 的一些经验

硬件:2台hpe800,一条心跳线用于串口信息的检测,一条交叉线用于UDP协议的通讯。双网卡,一块用于连接交叉线,一块用于连接交换机。
软件:REDHAT 7.3(MANDRAKE 8.2测试也通过),heartbeat-0.4.9.1-1.i386.rpm
其它准备:HPE800(1),主机名:CLUSTER-101-SERVER ,IP地址:192.9.100.101
HPE800(2),主机名:CLUSTER-101-SERVER ,IP地址:192.9.100.101
虚拟主机名:CLUSTER-SERVER ,IP地址:192.9.100.100
从http://www.linux-ha.org 网站下载最新的Heartbeat 软件包,目前的版本为heartbeat-0.4.9.1,分别解压:rpm –ivh heartbeat-0.4.9.1-1.i386.rpm。
首先配置第一台hpe800 ,解压后得到目录/etc/ha.d, 主要配置三个文件/etc/ha.d/ha.cf、/etc/ha.d/haresources、/etc/ha.d/authkeys
我主要配置的http 与 smb的HA集群,三个文件的主要配置如下:
/etc/ha.d/ha.cf
# If any of debugfile, logfile and logfacility are defined then they
# will be used. If debugfile and/or logfile are not defined and
# logfacility is defined then the respective logging and debug
# messages will be loged to syslog. If logfacility is not defined
# then debugfile and logfile will be used to log messges. If
# logfacility is not defined and debugfile and/or logfile are not
# defined then defaults will be used for debugfile and logfile as
# required and messages will be sent there.
#
# File to wirte debug messages to
debugfile /var/log/ha-debug
#
#
# File to write other messages to
#
logfile /var/log/ha-log
#
#
# Facility to use for syslog()/logger
#
logfacility local0
#
#
# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
#
# Very first dead time (initdead)
#
# On some machines/OSes, etc. the network takes a while to come up
# and start working right after you’ve been rebooted. As a result
# we have a separate dead time for when things first come up.
# It should be at least twice the normal dead time.
#
initdead 120
#
# hopfudge maximum hop count minus number of nodes in config
#hopfudge 1
#
# serial serialportname …
serial /dev/ttyS0
#
#
# Baud rate for serial ports…
#
baud 19200
#
# What UDP port to use for communication?
#
udpport 694
#
# What interfaces to heartbeat over?
#
udp eth1
#
# Set up a multicast heartbeat medium
# mcast [dev] [mcast group] [port] [ttl] [loop]
#
# [dev] device to send/rcv heartbeats on
# [mcast group] multicast group to join (class D multicast address
# 224.0.0.0 – 239.255.255.255)
# [port] udp port to sendto/rcvfrom (no real reason to differ
# from the port used for broadcast heartbeats)
# [ttl] the ttl value for outbound heartbeats. this effects
# how far the multicast packet will propagate. (0-255)
# [loop] toggles loopback for outbound multicast heartbeats.
# if enabled, an outbound packet will be looped back and
# received by the interface it was sent on. (0 or 1)
#
#
mcast eth1 225.0.0.1 694 1 1
#
# Watchdog is the watchdog timer. If our own heart doesn’t beat for
# a minute, then our machine will reboot.
#
watchdog /dev/watchdog
#
# "Legacy" STONITH support
# Using this directive assumes that there is one stonith
# device in the cluster. Parameters to this device are
# read from a configuration file. The format of this line is:
#
# stonith <stonith_type> <configfile>
#333
# NOTE: it is up to you to maintain this file on each node in the
# cluster!
#
#stonith baytech /etc/ha.d/conf/stonith.baytech
#
# STONITH support
# You can configure multiple stonith devices using this directive.
# The format of the line is:
# stonith_host <hostfrom> <stonith_type> <params…>
# <hostfrom> is the machine the stonith device is attached
# to or * to mean it is accessible from any host.
# <stonith_type> is the type of stonith device (a list of
# supported drives is in /usr/lib/stonith.)
# <params…> are driver specific parameters. To see the
# format for a particular device, run:
# stonith -l -t <stonith_type>
#
#
# Note that if you put your stonith device access information in
# here, and you make this file publically readable, you’re asking
# for a denial of service attack ;-)
#
#
#stonith_host * baytech 10.0.0.3 mylogin mysecretpassword
#stonith_host ken3 rps10 /dev/ttyS1 kathy 0
#stonith_host kathy rps10 /dev/ttyS1 ken3 0
#
# Tell what machines are in the cluster
# node nodename … — must match uname -n
node cluster-101-server
node cluster-102-server

/etc/ha.d/haresources
#
#just.linux-ha.org 135.9.216.110
#
#——————————————————————-
#
# Assuming the adminstrative addresses are on the same subnet…
# A little more complex case: One service address, default subnet
# and netmask, and you want to start and stop http when you get
# the IP address…
#
#just.linux-ha.org 135.9.216.110 http
#——————————————————————-
#
# A little more complex case: Three service addresses, default subnet
# and netmask, and you want to start and stop http when you get
# the IP address…
#
#just.linux-ha.org 135.9.216.110 135.9.215.111 135.9.216.112 httpd
#——————————————————————-
#
# One service address, with funny subnet and bcast addr
# Stop and start httpd service with the subnet address
#
#just.linux-ha.org 135.9.216.3/4/135.9.216.12 httpd
#
#——————————————————————-
#
# An example where a shared filesystem is to be used.
# Note that multiple aguments are passed to this script using
# the delimiter ‘::’ to separate each argument.
#
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2

cluster-101-server 192.9.100.100 httpd smb

/etc/ha.d/authkeys
# Authentication file. Must be mode 600
#
#
# Must have exactly one auth directive at the front.
# auth send authentication using this method-id
#
# Then, list the method and key that go with that method-id
#
# Available methods: crc sha1, md5. Crc doesn’t need/want a key.
#
# You normally only have one authentication method-id listed in this file
#
# Put more than one to make a smooth transition when changing auth
# methods and/or keys.
#
#
# sha1 is believed to be the "best", md5 next best.
#
# crc adds no security, except from packet corruption.
# Use only on physically secure networks.
#
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!

很重要的一点,一定要去确保两台机器的配置文件一样,包括smb.conf等需要集群的配置文件,如果有共享存储的话还要注意很多问题,具体我没有测试过,也没有相关的硬件设备。
现在可以开始测试,首先关闭两台机器需要集群的服务,因为heartbeat 启动时会自动服务打开(测试的时候会有几秒钟的滞后)。
/etc/rc.d/init.d/httpd stop
/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/heartbeat start

ok, 配置已经完成,服务也应该起来,如果没有的话,注意检查/var/log/messages里面的信息。
可以开始测试了:
为了清楚,把web服务器的主文件,/var/www/html/index.html 修改成可以区分两台机器的页面,例如可以把内容改为:cluster-101-server 与cluster-102-server
在别的机器里输入:http://192.9.100.100 (虚拟的地址)
可以看到cluster-101-server ,想办法让cluster-101-server死机,大概3-5秒,可以看到页面变成cluster-102-server,服务成功的转换了,等cluster-101-server服务起来后,页面又切换到
cluster-101-server,几乎没有延时。这样就提高了系统的高可用性。

忘记了一点:一定要修改文件authkeys的属性,否则服务起不来。
chmod 600 /etc/ha.d/authkeys