[原创]heartbeat+脚本实现rhel4双机apache高可用集群
我是首次安装,有不足之处还请大家指正。
本来计划使用heartbeat的crm,但是苦于不知如何配置,索性自己写了个脚本,实现监听apache的功能,顺便在主节点的apache死掉后,检查其apache是否出了问题,若出问题则会弹出错误提示、退出heartbeat;否则自动重启服务(或让用户选择启动或退出)
1. 下载heartbeat
从linux-ha的邮件组中得到,需要的话,可以email我。
2. 安装: heartbeat 1.2.3
依次安装:
rpm -ivh libnet-1.1.2.1-1.rh.el.um.l.i368.rpm
rpm -ivh heartbeat-pils-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm
rpm -ivh heartbeat-stonith-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm
rpm -ivh heartbeat-1.2.3.cvs.20050927-1.rh.el.um.1.i386.rpm
3. 双机通信:
需要串口线一条;
node1: 192.168.0.25
node2: 192.168.0.252
测试:
发送端: echo hello >/dev/ttyS0
接收端: cat </dev/ttyS0
4.配置Heartbeat:
ha.cf /*主要配置文件
haresources /*资源配置文件
authkeys /*关于认证信息
● rpm -q heartbeat -d 查看上述文件的位置,并拷到/etc/ha.d下
● ha.cf的配置:
vi ha.cf
logfile /var/log//ha-log
logfacility local0
keepalive 0.5
deadtime 5
warmtime 10
initdead 20
udpport 694
baud 19200
serial /dev/ttyS0
bcast eth1
auto-failback on
node rh4.loesprite
node rh4,lin
下面是对ha.cf相关解释翻译:
keepalive 0.5
该参数指定了两次heartbeat的时间;
deadtime 2
该参数指定了等待声明主机的死亡时间;
initdead 20
该参数指定了heartbeat首次启动deadtime的时间;
serial /dev/ttyS0
该参数指定了心跳线接到哪一个端口上;
baud 19200
该参数指定串口通信的波特率
node rh4.loesprite与node rh4,lin
该参数告诉heartbeat使用哪些主机,主机名字一定要与机器uname -n下名字一致;
● haresources的配置:
vi haresources
该文件指定同步的服务以及主机叫什么,两台机器这个文件一定要一致.我们这里提
供高可用服务是Aapach服务,它对外的IP是192.168.0.25,所以它的配置文件应该是:
rh4.loesprite 192.168.0.25 httpd
● authkeys配置:
有三种认证方式: crc md5 sha1
vi authkeys
auth1
1 sha1 sha1 myAuthkeys
需要提高其权限:
chmod 600 authkeys
5. 配置另外一台机器相同的:
vi ha.cf
vi haresources
vi authkeys
chmod 600 authkeys
两台机器的haresources和authkeys应该是一致的, ha.cf都应该一致,除非心跳连不同
的串口或者网络的交叉线联接不同的网卡.
6.在主服务器上添加一个shell脚本
#MyHeartWillGoOn.sh
#!/bin/sh
check_http()
{
echo "Checking if some error occured with httpd"
/etc/init.d/httpd start
N=`netstat -tln|grep 80`
sleep 15 #设置httpd超时,若服务器性能稍差,请增大此数值
if [ ! -n "$N" ];then
{
echo "Error: Apache can't start! All stop!"
break
}
fi
/etc/init.d/httpd stop
echo "Nothing wrong!"
}
touch /var/log/loe-ha.log #此文件记录apache正常运行的时间点
while :
do
N=`netstat -tln|grep 80`
sleep 1 #设置监听周期,约1s
echo "`date`: Chief node's server is running normally." >>
/var/log/loe-ha.log
if [ ! -n "$N" ];then
{
echo "Server is not running , please wait "
/etc/init.d/heartbeat stop
wait
echo "Now the other node will get resouce."
sleep 5
check_http
wait
# 选项单,若需要用户可选,则去掉下面5行的#号即可
# echo "press Enter to Restart the server ; Or press x to Stop : "
# read M
# if [ "$M" = "x" ] ; then
# break
# fi
/etc/init.d/heartbeat start
wait
echo "The chief node is getting resouce back"
}
fi
done
7.运行
主节点:./MyHeartWillGoOn.sh
从节点:/etc/init.d/heartbeat start
8.测试
在主节点上关闭apache,则从节点可以顺利接管服务,大功告成
[ 本帖最后由 loesprite 于 2006-4-4 08:50 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
顶顶
support一下.
很多朋友向我要我写的脚本,我已经贴在一楼拉,大家只要复制下来,保存在一个XX.sh的文件里面就可以拉。
经过一段时间的使用和修改,我现在的脚本已经比较完善了,有需要的可以email我。
在脚本中我就是调用这个的,呵呵,谢啦
在/etc/rc.d/init.d下有HTTPD的脚本,负责启动、停止、监控HTTPD服务状态
[ 本帖最后由 yangze_tj 于 2006-4-4 12:20 编辑 ]
牛人,谢谢
在哪里?有些什么功能?
RHEL4下HTTPD好象有启动监控脚本哦