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服务也类似配置,这样就可以既实用又保证安全性了。

相关推荐