对于中、小型企业,如果没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并 且可以通过Nginx + Keepalived实现Nginx 负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去。以下内容为第三次更新了,下面将其安装步骤详细说明下:

 

 一、安装nginx,上一篇已经有安装步骤,请看上一篇文章

 

 

二、安装keepalived

keepalived 下载地址:http://www.keepalived.org/software/
wget
http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
tar zxvf keepalived-1.2.2.tar.gz
cd keepalived-12.2./configure --prefix=/usr/local/keepalived
make
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cd /etc/keepalived/

 

主配置文件

vim keepalived.conf

 

   
   
   
   
  1. global_defs {        ####全局定义    
  2.    notification_email {        #####指定keepalived在发生事件时(比如切换),需要发送的email对象,可以多个,每行一个    
  3.     [email protected]    
  4.    }    
  5.    notification_email_from [email protected]    
  6.    smtp_server 127.0.0.1          #####指定发送email的smtp服务器    
  7.    smtp_connect_timeout 30    
  8.    router_id LVS_DEVEL          #######运行keepalived的机器的一个标识    
  9. }    
  10. vrrp_sync_group VG1 {    
  11.   group {    
  12.     VI_1    
  13.     VI_2    
  14.    }    
  15. }    
  16. vrrp_script chk_nginx {    
  17.         script    "/etc/chk_nginx.sh"     ###监控脚本    
  18.         interval 2      ###监控时间    
  19.         #weight -2      
  20.    
  21. }    
  22. vrrp_instance VI_1 {    
  23.     state MASTER           
  24.     interface eth0     
  25. #    track_interface {    
  26. #       eth0    
  27. #       eth1    
  28. #   }    
  29.     virtual_router_id 51      #VRID标记 master和backup必须一致    
  30.     mcast_src_ip 192.168.2.113   
  31.     #发送多播包的地址,如果不设置默认使用绑定的网卡的primary ip    
  32.     priority 150          
  33.     advert_int 1    
  34.     authentication {    
  35.         auth_type PASS    
  36.         auth_pass 1111    
  37.     }    
  38.    track_script {    
  39.         chk_nginx         ### 就是上面vrrp_script后面的实例名称   执行监控的服务    
  40.     }    
  41.     virtual_ipaddress {    
  42.        192.168.2.116    
  43.         }    
  44. }    
  45.     
  46. vrrp_instance VI_2 {    
  47.     state BACKUP           
  48.     interface eth0  
  49.     tual_router_id 52    
  50.     mcast_src_ip 192.168.100.113    
  51.     priority 149       
  52.     advert_int 1    
  53.     authentication {    
  54.         auth_type PASS    
  55.         auth_pass 1111    
  56.     }    
  57. #    track_interface {    
  58. #       eth0    
  59. #       eth1    
  60. #    }    
  61.     virtual_ipaddress {    
  62.        192.168.100.117    
  63.         }    
  64. }    

另一主的配置文件

 

 

   
   
   
   
  1. global_defs { ####全局定义
  2. notification_email { #####指定keepalived在发生事件时(比如切换),需要发送的email对象,可以多个,每行一个
  3. 123.com
  4. }
  5. notification_email_from [email protected]
  6. smtp_server 127.0.0.1 #####指定发送email的smtp服务器
  7. smtp_connect_timeout 30
  8. router_id LVS_DEVEL #######运行keepalived的机器的一个标识
  9. }
  10. vrrp_sync_group VG1 {
  11. group {
  12. VI_1
  13. VI_2
  14. }
  15. }
  16. vrrp_script chk_nginx {
  17. script "/etc/chk_nginx.sh" ###监控脚本
  18. interval 2 ###监控时间
  19. #weight -2
  20. }
  21. vrrp_instance VI_1 {
  22. state BACKUP
  23. interface eth0
  24. # track_interface {
  25. # eth0
  26. # eth1
  27. # }
  28. virtual_router_id 51 #VRID标记 master和backup必须一致
  29. mcast_src_ip 192.168.2.112
  30. #发送多播包的地址,如果不设置默认使用绑定的网卡的primary ip
  31. priority 149
  32. advert_int 1
  33. authentication {
  34. auth_type PASS
  35. auth_pass 1111
  36. }
  37. virtual_ipaddress {
  38. 192.168.2.116
  39. }
  40. }
  41. vrrp_instance VI_2 {
  42. state MASTER
  43. interface eth0
  44. tual_router_id 52
  45. mcast_src_ip 192.168.100.112
  46. priority 150
  47. advert_int 1
  48. authentication {
  49. auth_type PASS
  50. auth_pass 1111
  51. }
  52. track_script {
  53. chk_nginx ### 就是上面vrrp_script后面的实例名称 执行监控的服务
  54. }
  55. # track_interface {
  56. # eth0
  57. # eth1
  58. }
  59. virtual_ipaddress {
  60. 192.168.100.117
  61. }
  62. }

###以上配置在写的时候一定要注意有空格的地方一定要加上(很多小的细节一定要注意)

下面是 自己定义监控nginx的脚本 chk_nginx.sh

 

   
   
   
   
  1. vim  chk_nginx.sh  
  2. #!/bin/bash  
  3. url="http://192.168.100.1/index.html" 
  4. status=$(/usr/bin/curl -s --head "$url"|awk '/HTTP/ {print $2}')  
  5. if[ "$status" != "200" ]; then  
  6. /etc/init.d/keepalived stop  
  7. fi