Linux · 2015-03-13

keepalived双机热备服务高可用

keepalived+nginx,场景适用于非高并发,但又偏核心业务

VIP: 192.168.3.111
Node1: 192.168.3.171
Node2: 192.168.3.175

						用户
						||
						ISP
						||
				Virtual IP [192.168.3.111]
				|				|
Node1[192.168.3.171]		Node2[192.168.3.175]
Node1配置文件:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
vrrp_script check_nginx {               
        script "/usr/bin/killall -0 nginx"
        interval 1 #每秒钟检查一次
        weight 2 #每次priority增加2 如果状态正常的话
}                                         
vrrp_instance VI_1 {
        interface eth1
        state MASTER
        virtual_router_id 51
        priority 101 #Master为101,Slave为100
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        track_script {
                check_nginx
        }
        virtual_ipaddress {
                192.168.3.111 dev eth1
        }
}

Node2配置文件:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
vrrp_script check_nginx {
        script "/usr/bin/killall -0 nginx"
        interval 1
        weight 2
}
vrrp_instance VI_1 {
        interface eth1
        state BACKUP
        virtual_router_id 51
        priority 100
        authentication {
            auth_type PASS
            auth_pass 123456
        }
        track_script {
                check_nginx
        }
        virtual_ipaddress {
                192.168.3.111 dev eth1
        }
}
Note:
停止Nginx或Keepalived本身,两台都会切换;
在负载较高的服务器上,如果没有对“服务”进行冗余而频繁切换IP是不严谨的,nopreempt可以防止来回抢占IP;
nopreempt需要state为BACKUP模式下才允许,并且给它们相同的route_id,两台间优先级较高的将优先取得VIP;

/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1