一般来说keepalived failover它自动实现了的,不用什么设置,在vip和本机真实ip不同的情况下,这个默认的实现方式是能够工作的,但是当vip就是本机真实ip的时候,默认的设置就不能工作了,看了一下文档,估计就是vrrp的包发不出去,一般使用keepalived 都有内外网两个网卡,其实我们只要设置一下vrrp发的网卡和使用ip,就可以解决这个问题。
这个是master的配置,vip就是eth0上面的真实ip。
vrrp_instance LVS_GZ80 {
state MASTER
interface eth0
mcast_src_ip 172.31.31.80
lvs_sync_daemon_inteface eth1
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass ooxx
}
virtual_ipaddress {
x.x.55.80
}
}
下面就是backup机的设置
vrrp_instance LVS_GZ229 {
state BACKUP
interface eth0
mcast_src_ip 172.31.31.229
lvs_sync_daemon_inteface eth1
virtual_router_id 55
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass ooxx
}
virtual_ipaddress {
x.x.55.80
}
}
这样子设置,当master的keepalived服务fail了以后,我们能看到backup马上抢到了vip(也是master的真实ip),并且backup机器进入master state,log如下:
Oct 24 13:18:03 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) Transition to MASTER STATE
Oct 24 13:18:04 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) Entering MASTER STATE
Oct 24 13:18:04 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) setting protocol VIPs.
Oct 24 13:18:04 localhost Keepalived_healthcheckers: Netlink reflector reports IP x.x.55.80 added
Oct 24 13:18:04 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) Sending gratuitous ARPs on eth0 for x.x.55.80
当master的keepalived重新起来的时候,vrrp包能发送到backup机上面,backup就把vip重新让出来了。
backup上面可以看到如下log
Oct 24 13:18:22 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) Received higher prio advert
Oct 24 13:18:22 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) Entering BACKUP STATE
Oct 24 13:18:22 localhost Keepalived_vrrp: VRRP_Instance(LVS_GZ229) removing protocol VIPs.
如果没有这样设置的话,当master重新抢到ip之后,backup机并不能从master state进入backup state,在master上的keepalived服务再次fail了以后(master并不是死机,只是服务死了,master仍然占用vip),backup认为自己一直在master状态,并不会发gratuitous ARP包,这样到vip的请求还是回到原来的master。
这种情况下,典型的就是切换恢复以后不能看到上面的log,backup机器仍然运行在master模式。
October 30th, 2008 14:23:16
上面说的,你实现了吗?没有任何问题吗?
October 30th, 2008 14:26:29
我这样做时,不成功。
启动keepalived后,vip在两边都有,都绑定在两边。出现挣用。
October 30th, 2008 14:27:29
yhc_hai@hotmail.com
有空可以探讨一下。
November 1st, 2008 10:19:38
我的服务器是这样子的,eth0接外网,其中一台的真实ip是vip,eth1接内网,内网是交换机,主机之间都是同一个内网的,然后广播的keepalived包就按内网的来发,如果还是抢ip的话你看看priority 有没有设置错,master的应该priority比较大,而且先开master再开backup,应该就不会抢了。
November 10th, 2008 17:04:20
我的机器环境和你一样的,优先没有设置错误。
你的master机器只直接把vip配置上吗?先到ifcfg-eth0文件里面?
November 10th, 2008 17:05:54
我的机器环境和你一样的,优先没有设置错误。
你的master机器是直接把vip配上吗?就是说直接把vip配置到ifcfg-eth0文件里面?启动时机器,但不启动keepalived,机器的eth0就有vip这个ip吗?
November 10th, 2008 17:51:11
我的机器是这样的
eth0就一个ip,是lvs的真实ip也是vip
eth1是内网的ip
开机的时候不启动keepalived,eth0也会有vip的,因为这个本来就是它的ip,设置好了的,debian在/etc/network/interfaces
redhat好像就是ifcfg-eht0之类的。sysconfig里面好像。
December 25th, 2008 18:59:38
sb了吧 哈哈
July 5th, 2009 15:35:50
你好:
你的BACKUP 上的ETH1 和MASTER上的都是用同一个IP 吗 /
就是设置的VIP?? 我好象不成功 啊
July 19th, 2009 13:37:19
我的设置是这样的:
lvs master : eth0 外网ip + vip(s) / eth1 192.168.x.1 / lo 127.0.0.1
lvs backup : eth0 外网ip + vip(s) / eth1 192.168.x.2 / lo 127.0.0.1
负载均衡后台: eth0 外网ip / eth1 192.168.x.3-254 / lo 127.0.0.1 + vip(s)
每个内网ip和外网ip都不一样,而vip就是一个(或一堆)相同的虚拟ip
lvs master 和 backup 在lvs生效的时候就会自动把vip加到eth0里面的了。
eth0是在公网交换机上面,eth1是在内网交换机上面
一般lvs只有大访问量的时候才会用到,所以最好隔离公网和内网交换机,内网的可以搞到千兆,那样子从lvs到后台机器的速度就可以保证了。。
另外所有 【负载均衡后台】 都要设置sysctl.conf
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
保证不会响应vip的arp请求。