一:为什么需要浮动IP
现在有一个场景,在一台Linux上部署一个web应用,应用跑在tomcat里面,linux网卡上的ip是115.239.100.120,大致就是如下的部署关系:
用户通过输入IP地址就能访问这个应用了,但是天有不测风云,有时候因为一些原因,服务会挂掉。于是开发人员就
想了一个办法,在另外一个Linux上,部署同样的一个应用,这样这个服务挂了,另外一个顶上,于是架构就变成了下面
这个样子:
如果用户访问100.120访问不了,就访问100.121就行了,但是这样引入了一个问题,用户需要记住两个IP,很不方便!
所以这个时候就需要浮动IP了。
二:浮动IP是什么
上面我们搭建了两个一模一样的服务,但是用户需要记住两个IP,实在是太麻烦了,于是我们可以采用另外一个策略,
我们给其中一个机器在添加一个IP,让用户访问这个IP, 一个网卡是可以 添加多个IP的。
例如上面,我们给100.120主机添加一个100.80的IP,用户访问115.239.100.80这个IP,如果这台机器的服务挂了,我们就将
这个ip转移到100.121这个机器上,这样对于用户而言,他们始终访问的就只是一个IP而已。
在上面的场景中:115.239.100.80这个ip就是浮动IP,他会随着主机服务挂掉而转移到另外一个能够提供相同服务的主机上,
对于用户而言,他们始终觉得服务是正常的。一般而言,在高可用集群中使用的比较多,例如LVS(LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。--百度百科)集群等
其实一个高可用集群一般而言都有浮动IP的,如果没有,机器宕机了还怎么玩?
三:如何配置
(1)主要技术点:利用单个网卡可以绑定多个IP地址的技术。(2)在主服务器配置浮动IP在主服务器上拷贝eth0为eth0:1,并做修改:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
编辑文件ifcfg-eth0:1:
vim /etc/sysconfig/network-scripts/ifcfg-eth0:1
修改DEVICE为eth0:1,NM_CONTROLLED设置为no,IPADDR改为浮动IP地址10.xx.1.212,去掉网关信息,修改完如下:
DEVICE="eth0:1"BOOTPROTO="static"ONBOOT="yes"NM_CONTROLLED="no"TYPE="Ethernet"IPADDR="10.xx.1.212"NETMASK="255.255.255.0"
或者:
DEVICE=eth0:1IPADDR=10.xx.1.212NETMASK=255.255.255.0ONBOOT=yes
然后启动该网卡,验证是否生效:
ifup eth0:1
查看是否有浮动IP地址:
ip addr或者ip a
接着访问浮动IP地址10.xx.1.212,能访问成功,即和主服务器10.xx.1.22访问的一样,则说明配置成功。(3)在从服务器上配置浮动IP配置步骤和主服务器完全一样,eth0:1的IP地址同样设置成浮动IP:10.xx.1.212,在启动网卡测试之前,需在"主服务器"关闭浮动IP:
ifdown eth0:1
然后在"从服务器"启动eth0:1
ifup eth0:1
测试步骤也和"主服务器"一样。(4)其他服务配置浮动IP如果还有其他从服务器,配置步骤如步骤“2”。(5)写脚本完成浮动IP的自动开启和关闭利用crontab自动执行技术,定时检查IP地址的状态,并启动eth0:1或者关闭eth0:1。a:从服务器脚本
在root目录下,生成脚本文件
touch slaveFloatIP.sh
编写脚本
vim slaveFloatIP.sh
复制下面的的代码进去:
MASTER_IP="10.xx.1.22" FLOAT_IP="10.xx.1.212" c1=$(/usr/bin/ping $MASTER_IP -c 1|grep Unreachable|wc -l) c2=$(/usr/bin/ping $FLOAT_IP -c 1|grep Unreachable|wc -l) c3=$(/usr/sbin/ip addr|grep eth0:1) if[ $c1 -gt 0 -o $c2 -gt 0 ] then /usr/sbin/ifup eth0:1 elif [ $c1 -eq 0 -a $c2 -eq 0 -a "$c3" ] then /usr/sbin/ifdown eth0:1 fi
说明:
ping主服务器IP地址或者ping浮动IP地址,如果ping不通,说明主服务器挂掉了或者没启动浮动IP,则在从机上启动浮动IP。
当主服务器再上线,即能够ping通主服务器且能ping通浮动IP地址,则在从机上关闭浮动IP。
备注:如果还有其他从服务器,只需拷贝该脚本。b:主服务器脚本 ,在root目录下,生成脚本文件
touch masterFloatIP.sh
编写脚本
vim masterFloatIP.sh
复制下面的的代码进去:
FLOAT_IP="10.xx.1.212" c=$(/usr/bin/ping $FLOAT_IP -c 1|grep Unreachable|wc -l) if [ $c -gt 0 ] then /usr/sbin/ifup eth0:1 fi
说明:ping不通浮动IP地址,则启动eth0:1
(6)使用crontab每隔5秒自动执行脚本
使用crontab -e命令
进入文件编辑界面,“主服务器”配置如下:
* * * * * /root/masterFloatIP.sh* * * * * sleep 5; /root/masterFloatIP.sh* * * * * sleep 10; /root/masterFloatIP.sh* * * * * sleep 15; /root/masterFloatIP.sh* * * * * sleep 20; /root/masterFloatIP.sh* * * * * sleep 25; /root/masterFloatIP.sh* * * * * sleep 30; /root/masterFloatIP.sh* * * * * sleep 35; /root/masterFloatIP.sh* * * * * sleep 40; /root/masterFloatIP.sh* * * * * sleep 45; /root/masterFloatIP.sh* * * * * sleep 50; /root/masterFloatIP.sh* * * * * sleep 55; /root/masterFloatIP.sh
“从服务器”配置也是一样的,脚本路径改为 /root/slaveFloatIP.sh
四:总结
到这里就完成了浮动IP的配置和主从服务器自动开启浮动IP。
完成后就可以通过浮动IP地址访问,服务器集群内只要有一台服务器正常运行,web就能访问,实现了web高可用。
本文参考一下文章完成:
1):https://blog.csdn.net/readiay/article/details/53538085
2):https://blog.csdn.net/weixin_40006394/article/details/80451269