http://dsxl.bokee.com/3369776.html
主要参考了下面两个网址:
http://linux-ha.org/GettingStarted
http://www.in-addr.de/pipermail/lvs-users/2001-September/003299.html
下面的网址有很多监控脚本可供参考
https://bugzilla.andrew.cmu.edu/cgi-bin/cvsweb.cgi/src/netsage/mon/mon.d/
整个测试都是在虚拟机中完成,两个虚拟机共享一个分区,以smb服务为例。
简单来说Heartbeat用来实现心跳和高可用性,Mon用来监控服务
SLES9上面自带了Heartbeat和Mon,RHEL4要单独安装,我测试时Heartbeat使用了tar包,其他的程序都使用了rpm包,可以从下面地址查找到:
http://rpmfind.net/linux/rpm2html/search.php?query=perl-mon&submit=Search+...&system=&arch=
注意:RHEL4下面提示缺少perl/Time-period时,直接查找perl-period即可
先配置Heartbeat:
ha.cf:
bcast eth1 -->使用网络心跳,eth1上面配置的是内部地址
keepalive 2 -->心跳的间隔设为2s
warntime 10 -->10s中不能通讯的话在日志中写入late heartbeat警告
deadtime 30 -->30s中不能通讯的话宣告节点死亡
initdead 120 -->启动时由于网络服务可能需要较长时间才能起来,因此设定了一个较长的时间来应对这种情况,至少2倍于上面的时间间隔
udpport 694 -->缺省的心跳通讯端口
auto_failback off -->设定备份模式:主备或者互备
node rhel.dsxl.com -->节点主机名,使用uname -n得到
node sles
respawn hacluster /usr/local/lib/heartbeat/ipfail -->测试参考节点是否正常,用来测试网络
ping 10.167.13.166 -->参考节点的地址
对于RHEL4,需要添加haclient用户组,然后添加hacluster用户,设定其组别为haclient
haresources:
rhel.dsxl.com 10.167.13.23 Filesystem::/dev/sdc7::/sharefolder::vfat smb
第一栏表示服务的优先节点,第二列表示虚拟服务主机所在的IP且必须在这里配置,第三列Filesystem表示加载文件系统,最后面的smb表示要启动 的服务。HA会在resource.d和/etc/init.d目录下依次寻找服务的启动脚本。HA启动时依次从左到右启动服务,关闭时依次从右到左关闭 服务。不需指定虚拟主机IP在哪个网络接口上面启动,HA会自动选择。
authkeys:
auth 1
1 crc
这种是最简单的,只使用crc校验,没有使用md5或者sha1。auth后面的数字1表示采用下面keys列表以1开头的key。对于sha1这样写:
1 sha1 key-for-sha1-any-text-you-want
设定后把authkeys的权限设为600
日至文件位于/var/log/ha-log,方便查错
配置完成后进行测试,在一边停止HA服务,看另一边是否会启动并接管资源
注意:如果使用HA管理服务,那么不要在系统本身启动服务,对于数据库尤其如此!!!!!
配置Mon
mon.cf:
在RHEL4上面,注释掉下面两行:
#authtype = pam
#userfile = /etc/mon/userfile
添加:
authtype = getpwnam
编辑其他的设定:
hostgroup servers localhost
servers:设定服务所在的一组主机的名字
watch servers -->设定要监控的主机组
service samba -->设定要监控的服务,随意
interval 5s -->设定监控的间隔
monitor tcp.monitor -p 139 localhost -->设定要监控的主机和端口
period all_the_time: wd {Sun-Sat} -->设定要监控的时间
alert test.alert -->如果服务失败,那么运行test.alert
Mon自带了很多监控脚本,对于这些我也没有深入研究
test.alert的内容为:
echo "`date` $*" >> /tmp/test.alert.log
关闭HA,开启和关闭smb服务,查看test.alert.log文件,看mon是否检测到服务的状态
如果测试正常,那么先关闭smb和mon服务,更改haresources文件:
rhel.dsxl.com 10.167.13.23 Filesystem::/dev/sdc7::/sharefolder::vfat smb mon -->在最后面增加了mon,这个一定要在最后面
更改test.alert文件,增加下面一行:
/etc/init.d/heartbeat restart
完毕后即可进行全面的测试,在系统本身只需启动heartbeat服务即可,HA监控的全部服务都不要在系统本身启动,全部由HA自动控制
观察首先启动HA的机器,会发现smb和mon都正在运行,使用mount观察加载的分区,发现/dev/sdc7已经加载。手动停止掉smb服务,在 HA的日志里面会发现mon服务被关闭,smb再次被关闭,随后HA关闭然后重新启动(很奇怪,在SLES9上面HA只能关闭,却不会自动启动,然后在命 令行下面却可以自动重启动,实在奇怪;RHEL4上面正常);再另一个节点,会发现HA会自动接管资源然后启动服务。
这方面还有很多可以做的,关于负载均衡方面,等以后再研究,目前还是以数据库为先。