keepalived高可用性分析
博客专区 > 鸿弟 的博客 > 博客详情
keepalived高可用性分析
鸿弟 发表于11个月前
keepalived高可用性分析
  • 发表于 11个月前
  • 阅读 3220
  • 收藏 119
  • 点赞 2
  • 评论 5

腾讯云 技术升级10大核心产品年终让利>>>   

准备使用keepalived作为高可用性软件,因此针对keepalived做了一些实验,得出的结论先说一下:

1: keepalived一个作为master,另一个做为backup。当master挂了后,backup接管。但存在一个问题,当master恢复了后,master又会接管会来,这个频繁切换对于业务来说是不好的,再快的切换也会有影响。

2: keepalived进程被强制kill后,虚拟ip移除不掉,导致脑裂的现象。

 

对于对第1个结论,做的实验如下,探测设置为30s只是为了方便实验,对于生产环境不适用:

master(ip: 172.16.0.3)的配置:

vrrp_instance VI_1 {
    !state BACKUP
    state MASTER
    interface eth1
    !nopreempt
    virtual_router_id 51
    priority 100
    advert_int 30
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.254
    }
}

backup(ip: 172.16.0.1)的配置:

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 50
    advert_int 30
    !nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.0.254
    }
}

 

经抓包发现,当一开始启动的时候,vrrp包只会抓到master发出100权重的,截图如下:

模拟master的keepalived出问题后(使用kill命令杀掉keepalived进程),backup发出权重为50的vrrp包,抓包还会发现kill掉后,master会发出一个权重为0的vrrp包。如下:

此时master切换到backup成功,当master恢复的时候,我们是不想让master再去抢占的,上面说了,切换总是会有影响的。可当master恢复后(启动keepalived),还是会切换,抓包会发现master一启动,就需要重新选master了,截图如下:

对于第1个结论的解决方案是,两个配置都使用backup,然后权重高的使用nopreempt,也就是不抢占的意思,这样子,就不会有两次切换的操作了。

 

对于第2个结论,做的实验如下:

配置同上,只是这次模拟master挂掉不是使用kill命令,而是使用kill -9命令强制kill。那虚拟ip便不会删除,所以使用kill -9杀keepalived的慎重,因为还有后续的任务要处理。截图如下

得使用ip addr del 172.16.0.254/32 dev eth1把ip移除掉一下。(截图有点问题,mac地址一样,不过对实验没什么影响)

 

对于不同的脑裂的解决方案都有所不同,本来想用ping网关来检测另外一台机器,但如果使用iptables把vrrp的output禁止掉,也会脑裂,因为ping是通的,但vrrp包发不出去,另外一台虚拟ip也会起来。

后续再想了个解决方案就是使用arping看下虚拟地址会不会有arp响应,如果有arp响应的话,就把虚拟ip移除掉,就不会脑裂了。脚本如下:

#!/bin/sh
while true;do
	arping -I eth1 -c 3 -q 172.16.0.254
	if [ $? -eq 0 ];then
		ip addr del 172.16.0.254/32 dev eth1
		exit 1
	fi
	sleep 2
done
exit 2

脚本可自行修改,就当检测到虚拟ip的arp响应时,就把虚拟ip给delete掉,可以再加上kill掉keepalived。

 

共有 人打赏支持
粉丝 64
博文 51
码字总数 33082
评论 (5)
lkclkc888
第一个问题,我实验过另一种方案,两个都是backup,并且优先级都一样,增减权重也也样,这样,都存活的时候,先抢占的为master,之后,如果master挂掉,backup升级为master, 挂掉的服务重启之后,仍然为backup,而不会升级为master,因为这时候,两台服务器的优先级都相同
purple_grape
最后一个脚本给谁用呢? Master ? BACKUP ?
鸿弟

引用来自“purple_grape”的评论

最后一个脚本给谁用呢? Master ? BACKUP ?
master
whaon
为什么需要最后 一个脚本呢,那个IP是VIP,这个IP有可能在master上面,也有可能在BACKUP上面
冷絮
为什么不用双backup呢?
×
鸿弟
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: