两台Linux服务器,一台为主机(IP:)对外提供了一定的网络服务,另一台从机(IP:)能提供相同的服务,但ip地址没有对外部公开客户端连接的都是这个ip地址,如果主机故障,则会使网络服务暂时中断,时间越长造成损失越大由于没有采用双机热备技术,考虑自己用Linux脚本来实现简单的浮动ip技术,当主机故障时从机获取这个ip,暂时替代主机提供服务,当主机恢复时,从机自动释放这个ip
实现:
利用单个网卡绑定多个ip地址的技术和crontab自动执行技术
为主机的网卡多绑定一个静态ip,如 ,这个地址是便于从机判断的,为从机的网卡多绑定一个动态ip,,它在主机故障时将会被脚本修改为
在从机添加一个脚本 ,使用crontab技术让这个脚本每分钟执行一次,这个脚本的作用是判断主机的地址32能否ping通,一旦不通则将让自己的网卡多余那个ip地址改为,如果主机恢复,则将这个地址改回为
步骤:
一、为主机多绑定一个静态ip
在
/etc/sysconfig/network-scripts目录里面创建一个名为
ifcfg-eth0:1的文件,内容为:
DEVICE=eth0:1
IPADDR=
NETMASK=
ONBOOT= yes
二、在从机上建立脚本
c1=`ping -c 1 | grep Unreachable | wc -l`
c2=`ping -c 10 | grep Unreachable | wc -l`
c3=`ping -c 10 | grep Unreachable | wc -l`
c4=`/sbin/ifconfig |grep |wc -l`
if [ $c1 -gt 0 ] ;then
if [ $c2 -gt 9 ] ;then
if [ $c3 -gt 9 ] ;then
/sbin/ifconfig eth0:1 netmask
echo "float ip to 30"
fi
fi
echo "can not connect"
else
if [ $c4 -gt 0 ] ;then
/sbin/ifconfig eth0:1 netmask
echo "reset ip"
fi
echo "connection is ok"
fi
用chmod +x
让它可以执行,脚本的内容为
c1=$(ping -c 1|grep Unreachable|wc -l)
if [ $c1 -gt 0 ] then
c2=$(ping -c 10|grep Unreachable|wc -l)
if [ $c2 -gt 9 ] then
c3=$(ping -c 10|grep Unreachable|wc -l)
if [ $c3 -gt 9 ] then
/sbin/ifconfig eth0:1 netmask
echo "float ip to 22"
fi
fi
echo "can not connect"
else
c4=$(/sbin/ifconfig|grep |wc -l)
if [ $c4 -gt 0 ] then
/sbin/ifconfig eth0:2 netmask
echo "reset ip"
fi
echo "connection is ok"
fi
其中关键的命令为
/sbin/ifconfig eth0:1 netmask
/sbin/ifconfig eth0:2 netmask
用这个方法来动态修改
IP
,动态
IP
在电脑重启会消失
从机上建立crontab
让后加上这样的一行并保存
* * * * * /root/ > /dev/null 2>&1
小提示
在测试时,你可以先将这句话改为
* * * * * /root/
这样你可以用
mutt
收到很多邮件,用户跟踪脚本执行情况