在vmware虚拟机中安装了两个centos5.5系统进行测试了一下,先安装keepalived ,具体安装过程可以参考http://blog.csdn.net/jiedushi/archive/2009/07/25/4379372.aspx

master主机配置如下

  1. global_defs {        ####全局定义  
  2.    notification_email {        #####指定keepalived在发生事件时(比如切换),需要发送的email对象,可以多个,每行一个  
  3.     sdj@qq.com  
  4.    }  
  5.    notification_email_from sdj@qq.com  
  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_instance VI_1 {  
  17.     state MASTER         
  18.     interface eth0  
  19.     track_interface {         
  20.        eth0            
  21.        eth1  
  22.     }  
  23. vrrp_script chk_http_port {  
  24.     #script "/opt/nginx_pid.sh"     ###监控脚本  
  25.      script "</dev/tcp/127.0.0.1/80"    ####监控本地机器80端口,可以换为其他需要监控的端口,也可以监控进程例如监控haproxy可以写为 script "killall -0 haproxy"    
  26.      interval 2               ###监控时间  
  27.       #weight -2                ###经测试keepalived 1.17版本加这个配置不能切换,最新版本1.21加上这个则可以  
  28. }  
  29.     virtual_router_id 51      #VRID标记 master和backup必须一致  
  30.     mcast_src_ip 192.168.2.113 #发送多播包的地址,如果不设置默认使用绑定的网卡的primary ip  
  31.     priority 150        
  32.     advert_int 1  
  33.     authentication {  
  34.         auth_type PASS  
  35.         auth_pass 1111  
  36.     }  
  37.    track_script {  
  38.         chk_http_port           ### 就是上面vrrp_script后面的实例名称   执行监控的服务  
  39.     }  
  40.     virtual_ipaddress {  
  41.        192.168.2.116  
  42.         }  
  43. }  
  44.  
  45. vrrp_instance VI_2 {  
  46.     state MASTER         
  47.     interface eth1  
  48.     track_interface {        
  49.        eth0            
  50.        eth1  
  51.     }  
  52.     virtual_router_id 52  
  53.     mcast_src_ip 192.168.100.113  
  54.     priority 150        
  55.     advert_int 1  
  56.     authentication {  
  57.         auth_type PASS  
  58.         auth_pass 1111  
  59.     }  
  60.     virtual_ipaddress {  
  61.        192.168.100.116  
  62.         }  


backup主机的配置如下

 

  1. global_defs {  
  2.    notification_email {  
  3.     sdj@qq.com  
  4.    }  
  5.    notification_email_from sdj@qq.com  
  6.    smtp_server 127.0.0.1  
  7.    smtp_connect_timeout 30  
  8.    router_id LVS_DEVEL  
  9. }  
  10. vrrp_sync_group VG1 {  
  11.   group {  
  12.     VI_1  
  13.     VI_2  
  14.    }  
  15. }  
  16. vrrp_instance VI_1 {  
  17.     state BACKUP         
  18.     interface eth0  
  19. track_interface {             
  20.        eth0            
  21.        eth1  
  22.     }  
  23.    track_script {  
  24.         chk_http_port           ### 就是上面vrrp_script后面的实例名称   执行监控的服务  
  25.     }  
  26.     virtual_router_id 51  
  27.     mcast_src_ip 192.168.100.114  
  28.     priority 100        
  29.     advert_int 1  
  30.     authentication {  
  31.         auth_type PASS  
  32.         auth_pass 1111  
  33.     }  
  34.  
  35. vrrp_script chk_http_port {  
  36.         #script "/opt/nginx_pid.sh"     ###监控脚本  
  37.         script "</dev/tcp/127.0.0.1/80"  
  38.         interval 2               ###监控时间  
  39.         #weight -2                ###经测试加上这个后监控失效 我的版本是keepalived 1.17  
  40. }  
  41.    virtual_ipaddress {  
  42.       192.168.100.116  
  43.         }  
  44. }  
  45. vrrp_instance VI_2 {  
  46.     state BACKUP         
  47.     interface eth1  
  48.     track_interface {             ####设置额外的监控,里面的任何一个网卡出现问题,都会进入FAULT状态  
  49.        eth0            
  50.        eth1  
  51.     }   
  52.     virtual_router_id 52  
  53.     mcast_src_ip 192.168.2.114  
  54.     priority 100        
  55.     advert_int 1  
  56.     authentication {  
  57.         auth_type PASS  
  58.         auth_pass 1111  
  59.     }  
  60.     virtual_ipaddress {  
  61.        192.168.2.116  
  62.         }  

配置完keepalived文件后  测试两个主机的VIP转移

把master主机网卡或者keepalived或者是nginx进程停止  都可以瞬间切换到backup主机

启动master主机的网卡 keepalived nginx master又抢占回vip

在业务应用如果master发生故障,切换回backup,master主机online后,又切换回到master,这样频繁的切换不能容忍的,可以设置不抢占的方法

具体方法是将master主机的state也设置为BACKUP,在state BACKUP下面加入nopreempt

backup主机不需要加入,两个主机根据priority的高低进行抢占,高的为MASTER主机