#服务器1上IP:61.1.1.4
/sbin/ifconfig eth0:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route -host 61.1.1.2 dev eth0:1
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1
#服务器2上IP:61.1.1.5
/sbin/ifconfig eth0:1 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route -host 61.1.1.3 dev eth0:1
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1
#若服务器1故障则有两种方案
#第一种方案:在服务器2上执行以下命令(手动)
/sbin/ifconfig eth0:2 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route -host 61.1.1.2 dev eth0:2
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1
#第二种方案:编写shell脚本nginx_ha1.sh(自动)
#!/bin/sh 部署在服务器1上可以防止服务器2故障
LANG=C
date=$(date -d "today" + "%Y-%m-%d %H:%M:%S")
function_bind_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netnask 255.255.255.192 up
/sbin/route add -host 61.1.1.2 dev eth0:ha1
}
function_bind_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 61.1.1.255 netnask 255.255.255.192 up
/sbin/route add -host 61.1.1.3 dev eth0:ha2
}
function_restart_nginx()
{
kill -USR1 `cat path/nginx.pid`
}
/*当服务器1上的检测程序发现自身的Nginx无法访问时停止绑定虚拟IP61.1.1.2*/
function_remove_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.192 down
}
/*当服务器2上的检测程序发现自身的Nginx无法访问时停止绑定虚拟IP61.1.1.3*/
function_remove_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.192 down
}
function_vip1_arping1()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 > /dev/null 2>&1
}
function_vip1_arping2()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 > /dev/null 2>&1
}
bind_time_vip1="N";
bind_time_vip2="N";
while true
do
httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.4`
httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.5`
if [x$httpcode_rip1 == "x200"];
then
if [$bind_time_vip1 == "N"];
then
function_bind_vip1
function_vip_arping1
function_restart_nginx
bind_time_vip1 = "Y"
fi
function_vip_arping1
else
if [$bind_time_vip1 == "Y"];
then
function_remove_vip1
bind_time_vip1 = "N"
fi
fi
if [x$httpcode_rip2 == "x200"];
then
if [$bind_time_vip2 == "Y"];
then
function_remove_vip2
bind_time_vip2 = "N"
fi
else
if [$bind_time_vip2 == "N"];
then
function_bind_vip2
function_vip_arping2
function_restart_nginx
bind_time_vip2 = "Y"
fi
function_vip_arping2
fi
sleep 5
done
#在Nginx负载均衡服务器1将脚本驻留后台运行
nohup /bin/sh ./nginx_ha1.sh 2>&1 > /dev/null &
##############################################################################################
#!/bin/sh 部署在服务器2上可以防止服务器1故障
LANG=C
date=$(date -d "today" + "%Y-%m-%d %H:%M:%S")
function_bind_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.3 broadcast 61.1.1.255 netnask 255.255.255.192 up
/sbin/route add -host 61.1.1.3 dev eth0:ha1
}
function_bind_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.2 broadcast 61.1.1.255 netnask 255.255.255.192 up
/sbin/route add -host 61.1.1.2 dev eth0:ha2
}
function_restart_nginx()
{
kill -USR1 `cat path/nginx.pid`
}
/*当服务器1上的检测程序发现自身的Nginx无法访问时停止绑定虚拟IP61.1.1.2*/
function_remove_vip1()
{
/sbin/ifconfig eth0:ha1 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.192 down
}
/*当服务器2上的检测程序发现自身的Nginx无法访问时停止绑定虚拟IP61.1.1.3*/
function_remove_vip2()
{
/sbin/ifconfig eth0:ha2 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.192 down
}
function_vip1_arping1()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.3 61.1.1.1 > /dev/null 2>&1
}
function_vip1_arping2()
{
/sbin/arping -I eth0 -c 3 -s 61.1.1.2 61.1.1.1 > /dev/null 2>&1
}
bind_time_vip1="N";
bind_time_vip2="N";
while true
do
httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.5`
httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://61.1.1.4`
if [x$httpcode_rip1 == "x200"];
then
if [$bind_time_vip1 == "N"];
then
function_bind_vip1
function_vip_arping1
function_restart_nginx
bind_time_vip1 = "Y"
fi
function_vip_arping1
else
if [$bind_time_vip1 == "Y"];
then
function_remove_vip1
bind_time_vip1 = "N"
fi
fi
if [x$httpcode_rip2 == "x200"];
then
if [$bind_time_vip2 == "Y"];
then
function_remove_vip2
bind_time_vip2 = "N"
fi
else
if [$bind_time_vip2 == "N"];
then
function_bind_vip2
function_vip_arping2
function_restart_nginx
bind_time_vip2 = "Y"
fi
function_vip_arping2
fi
sleep 5
done
#在Nginx负载均衡服务器2将脚本驻留后台运行
nohup /bin/sh ./nginx_ha2.sh 2>&1 > /dev/null &
Nginx双热机备份
精选 转载下一篇:iptables
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
4.带头节点的双链表的实现(C语言)
双链表基本运算的代码实现,前插、后插操作
双链表 头结点 插入操作 删除操作 -
Nginx安全配置
nginx版本号隐藏
nginx 版本号 安全