Linux下服务器心跳集群脚本
Linux的优势我想大家都知道,就是作为服务器,它非常高效稳定。然后对于一些24*7的服务器系统来说,即使系统非常稳定,也不能保证服务器时时刻刻 都在运行,比如断电,服务进程异常停止,受到攻击崩溃点情况。为了解决这些问题,现在比较流行两台或者多台服务器集群,一台作为主服务器,令一台作为备用 服务器,当主服务器的服务停止后,备用服务器立刻能够接管起主服务器的工作。
通过研究,发现Linux下的这种工具很丰富。有免费的,也有收费的,比如Linux-HA,cman(也是不错的软件,通过图形界面来管理服务器节点)。还看到一个日本人开发的集群套件,单价几百万日元,当然这是因为收费的大多数原因是他们提供技术支持。
既然如此,到底这些集群软件是怎么实现的呢?其实并不复杂。
我写个简单的脚本来示范一下集群软件的工作原理,一台服务器是否在工作,我们可以形象地解释它有没有“心跳”
#!bin/bash
#description: I have created a cluster with two computers
#One is the master with IP--192.168.0.1
#The other one is the slave with IP--192.168.0.2
#The float_ip is 192.168.0.111
while true
do
ping 192.168.0.111 -c3 #&>/dev/null
result=$?
sleep 3
if [ $result -ne 0 ]
then
wget -t3 http://192.168.0.1 -O /dev/null #&>/dev/null
[ $? -ne 0 ] && ifconfig eth0:1 192.168.0.111
fi
&& echo "Master apache service is down">>/var/log/ha.log
if [ $result -eq 0 ]
then
ifconfig eth0:0|grep $float_ip
[ $? -ne 0 ] && ifconfig eth0:1 down
fi
done
首先让主服务器开启网站服务,然后备用服务器关闭网站服务,运行如上脚本,然后slave会去ping master的IPI,并把结果存入变量。光能ping通主机并不能保证网站服务还是可用的,于是我们用抓包软件抓取master的一张,若成功了,隔
三秒后再去重复以上步骤,ping不通slave就直接新建一个浮动ip,并开启httpd服务若ping的通而抓不到包则slave也接管服务,并将master上的httpd服务当掉的消息存入日志。
当主服务器重新开机后,备用服务器应该把ip还给主服务器。于是当重新ping通master并抓包成功后,slave放弃浮动ip
并停止服务。
基本工作原理就是这样,区别在于集群软件用的相互之间测试心跳的途径不同,我用的是较为简单的icmp协议和测试服务
相结合的办法。简单实用,但是要考虑防火墙的具体配置情况,仅让192.168.0.2的icmp能通过,不让其他主机有机可趁于是
在master上配置防火墙。
iptables -I INPUT -p icmp --snat 192.168.0.2 -j accept
iptables -I INPUT -P icmp -j drop
对于基于TCP协议80端口的httpd服务也类似配置,这样就可以既实用又保证安全性了。