#服务器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 &