在vmware虚拟机中安装了两个centos5.5系统进行测试了一下,先安装keepalived ,具体安装过程可以参考http://blog.csdn.net/jiedushi/archive/2009/07/25/4379372.aspx
master主机配置如下
- global_defs { ####全局定义
- notification_email { #####指定keepalived在发生事件时(比如切换),需要发送的email对象,可以多个,每行一个
- sdj@qq.com
- }
- notification_email_from sdj@qq.com
- smtp_server 127.0.0.1 #####指定发送email的smtp服务器
- smtp_connect_timeout 30
- router_id LVS_DEVEL #######运行keepalived的机器的一个标识
- }
- vrrp_sync_group VG1 {
- group {
- VI_1
- VI_2
- }
- }
- vrrp_instance VI_1 {
- state MASTER
- interface eth0
- track_interface {
- eth0
- eth1
- }
- vrrp_script chk_http_port {
- #script "/opt/nginx_pid.sh" ###监控脚本
- script "</dev/tcp/127.0.0.1/80" ####监控本地机器80端口,可以换为其他需要监控的端口,也可以监控进程例如监控haproxy可以写为 script "killall -0 haproxy"
- interval 2 ###监控时间
- #weight -2 ###经测试keepalived 1.17版本加这个配置不能切换,最新版本1.21加上这个则可以
- }
- virtual_router_id 51 #VRID标记 master和backup必须一致
- mcast_src_ip 192.168.2.113 #发送多播包的地址,如果不设置默认使用绑定的网卡的primary ip
- priority 150
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- track_script {
- chk_http_port ### 就是上面vrrp_script后面的实例名称 执行监控的服务
- }
- virtual_ipaddress {
- 192.168.2.116
- }
- }
-
- vrrp_instance VI_2 {
- state MASTER
- interface eth1
- track_interface {
- eth0
- eth1
- }
- virtual_router_id 52
- mcast_src_ip 192.168.100.113
- priority 150
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.100.116
- }
- }
backup主机的配置如下
- global_defs {
- notification_email {
- sdj@qq.com
- }
- notification_email_from sdj@qq.com
- smtp_server 127.0.0.1
- smtp_connect_timeout 30
- router_id LVS_DEVEL
- }
- vrrp_sync_group VG1 {
- group {
- VI_1
- VI_2
- }
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- track_interface {
- eth0
- eth1
- }
- track_script {
- chk_http_port ### 就是上面vrrp_script后面的实例名称 执行监控的服务
- }
- virtual_router_id 51
- mcast_src_ip 192.168.100.114
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
-
- vrrp_script chk_http_port {
- #script "/opt/nginx_pid.sh" ###监控脚本
- script "</dev/tcp/127.0.0.1/80"
- interval 2 ###监控时间
- #weight -2 ###经测试加上这个后监控失效 我的版本是keepalived 1.17
- }
- virtual_ipaddress {
- 192.168.100.116
- }
- }
- vrrp_instance VI_2 {
- state BACKUP
- interface eth1
- track_interface { ####设置额外的监控,里面的任何一个网卡出现问题,都会进入FAULT状态
- eth0
- eth1
- }
- virtual_router_id 52
- mcast_src_ip 192.168.2.114
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.2.116
- }
- }
配置完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主机