码迷,mamicode.com
首页 > 其他好文 > 详细

【转】Nginx双机热备高可用解决方案

时间:2014-08-28 18:20:56      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:双机热备   高可用   nginx   

1.用户通过DNS查询,得到随机的VIP1和VIP2。

2.VIP1和VIP2属于热备,负载均衡,高可用

当RIP1无法访问,主机2会检测到,将VIP1的ip加到的eth0:ha2,即在任何时候都有高可用

3.shell脚本vip和rip要对应,nginx_loadbalance_vip1.sh运行于主机1,运行命令为

#nohup ./nginx_loadbalance_vip1.sh >/dev/null & 后台运行

4.对于2台机器的监控,只需监控RIP即可,同时可以写一个监控脚本运行的crontab,防止脚本意外终止

结构图

bubuko.com,布布扣

--------------------------------------------------------------------

主机1的脚本如下

cat nginx_loadbalance_vip1.sh

  1. #!/bin/bash 

  2.  

  3. LANG=C 

  4. date=$(date -d "today" +"%Y-%m-%d %H:%M:%S") 

  5. BIND_VIP1=192.168.16.238 

  6. BIND_VIP2=192.168.16.239 

  7. WEB_IP_RIP1=192.168.16.240 

  8. WEB_IP_RIP2=192.168.16.241 

  9. NETMASK=255.255.255.0 

  10. GATEWAY=192.168.16.1 

  11. BROADCAST=219.232.254.255 

  12. function_bind_vip1() 

  13.     /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} up 

  14.     /sbin/route   add -host ${GATEWAY}   dev eth0:ha1 

  15.  

  16.  

  17. function_bind_vip2() 

  18.     /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} up 

  19.     /sbin/route  add  -host ${GATEWAY}   dev eth0:ha2 

  20.  

  21. function_restart_nginx() 

  22.     kill -USR1 `cat /var/log/nginx/nginx.pid` 

  23.  

  24. function_remove_vip1() 

  25.    /sbin/ifconfig eth0:ha1 ${BIND_VIP1} broadcast ${BROADCAST} netmask ${NETMASK} down 

  26.  

  27. function_remove_vip2() 

  28.    /sbin/ifconfig eth0:ha2 ${BIND_VIP2} broadcast ${BROADCAST} netmask ${NETMASK} down 

  29.  

  30. function_vip_arping1() 

  31.    /sbin/arping -I eth0 -c 3 -s ${BIND_VIP1} ${GATEWAY} > /dev/null 2>&1 

  32.  

  33. function_vip_arping2() 

  34.    /sbin/arping -I eth0 -c 3 -s ${BIND_VIP2} ${GATEWAY} > /dev/null 2>&1 

  35.  

  36. bind_time_vip1="N"

  37. bind_time_vip2="N"

  38.  

  39.  

  40.  

  41.  

  42. while true 

  43. do 

  44.       httpcode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP1}/status.htm` 

  45.       httpcode_rip2=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://${WEB_IP_RIP2}/status.htm` 

  46. #vip1 

  47. if [ x$httpcode_rip1 == "x200" ]; 

  48. then 

  49.    if [ $bind_time_vip1="N" ]; 

  50.    then 

  51.        function_bind_vip1 

  52.        function_vip_arping1 

  53.        function_restart_nginx 

  54.        bind_time_vip1="Y" 

  55.    fi  

  56.       function_vip_arping1 

  57. else 

  58.    if [ $bind_time_vip1 == "Y" ]; 

  59.    then 

  60.         

  61.  

  62.        function_remove_vip1 

  63.        bind_time_vip1="N" 

  64.    fi 

  65. fi 

  66.  

  67. #vip2 

  68. if [ x$httpcode_rip2 == "x200" ]; 

  69. then 

  70.    if [ $bind_time_vip2="Y" ]; 

  71.    then 

  72.        function_remove_vip2 

  73.        bind_time_vip2="N" 

  74.    fi  

  75. else 

  76.    if [ $bind_time_vip2 == "N" ]; 

  77.    then 

  78.        function_bind_vip2 

  79.        function_vip_arping2 

  80.        function_restart_nginx 

  81.        bind_time_vip2="Y" 

  82.    fi 

  83.        function_vip_arping2 

  84. fi 

  85. sleep 5 

  86. done 


【转】Nginx双机热备高可用解决方案

标签:双机热备   高可用   nginx   

原文地址:http://sageliu.blog.51cto.com/8969608/1546177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!