码迷,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. { 

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

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

  16. } 

  17.  

  18.  

  19. function_bind_vip2() 

  20. { 

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

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

  23. } 

  24.  

  25. function_restart_nginx() 

  26. { 

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

  28. } 

  29.  

  30. function_remove_vip1() 

  31. { 

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

  33. } 

  34.  

  35. function_remove_vip2() 

  36. { 

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

  38. } 

  39.  

  40. function_vip_arping1() 

  41. { 

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

  43. } 

  44.  

  45. function_vip_arping2() 

  46. { 

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

  48. } 

  49.  

  50. bind_time_vip1="N"; 

  51. bind_time_vip2="N"; 

  52.  

  53.  

  54.  

  55.  

  56. while true 

  57. do 

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

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

  60. #vip1 

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

  62. then 

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

  64.    then 

  65.        function_bind_vip1 

  66.        function_vip_arping1 

  67.        function_restart_nginx 

  68.        bind_time_vip1="Y" 

  69.    fi  

  70.       function_vip_arping1 

  71. else 

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

  73.    then 

  74.         

  75.  

  76.        function_remove_vip1 

  77.        bind_time_vip1="N" 

  78.    fi 

  79. fi 

  80.  

  81. #vip2 

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

  83. then 

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

  85.    then 

  86.        function_remove_vip2 

  87.        bind_time_vip2="N" 

  88.    fi  

  89. else 

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

  91.    then 

  92.        function_bind_vip2 

  93.        function_vip_arping2 

  94.        function_restart_nginx 

  95.        bind_time_vip2="Y" 

  96.    fi 

  97.        function_vip_arping2 

  98. fi 

  99. sleep 5 

  100. done 


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

标签:双机热备   高可用   nginx   

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

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