实现网站高可用的方法有很多,如:Keepalived,LVS等等,除此之外,通过SHELL脚本也可以实现网站高可用。以下介绍通过脚本来实现网站高可用简单方法:
原理:
使用虚拟IP和服务器子IP来实现,虚拟IP用VIP表示。假如两台服务器,一主,一备,默认主服务器启子IP,即VIP。网站访问是VIP指向主服务器,当主服务器挂了时,备服务器启用子IP,即备用服务器的VIP,此时,网站访问VIP指向了备服务器。如下图:
启用子IP方法:
- 把使用的网卡cp一份命名为:旧网卡名:1,做为VIP网卡
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:1
修改VIP网卡,IP地址为VIP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
# DEVICE修改VIP地址名称,IPADDR修改为VIP地址
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33:1
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.68.125
NETMASK=255.255.255.0
#启用VIP地址
ifup ens33:1
为了实现网站主服务器宕机后,网站备用服务器VIP自动启用,这就需要脚本来实现了,把脚本在主,备服务器上都运行,当脚本检测到服务器nginx服务挂时,自动启用子IP
#auto check nginx WEB VIP
#by author ACAI
####################################
while true
do
CHECK_NGINX=$(netstat -ntlp|grep nginx|grep -aicwE80)
cd /etc/sysconfig/network-scripts/
if [ $CHECK_NGINX -ne 0 ];then
ping -c2 192.168.68.125 >/dev/null
if [ $? -ne 0 ];then
cat>ifcfg-ens33:1<<-EOF
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33:1
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.68.125
NETMASK=255.255.255.0
EOF
ifup ens33:1
date
fi
else
ifdown ens33:1
rm -rf ifcfg-ens33:1
fi
sleep 5
done