keepalived开启garp_master_refresh的重要性
转自:【博客625】keepalived开启garp refresh的重要性_lulu的云原生笔记的博客-CSDN博客
现象: 多次重启主机后,vip切换正常,但主机无流量
1、场景
1-1、对keepavlied master机器热迁移后出现vip不通,过后恢复
原因:机器迁移后网关那边的arp表没有刷新,流量还是转发到老的端口,但是机器已经迁移到别的端口了,于是网络不通。因为keepalied默认情况下是发vrrp在实现主备切换,然后garp只在master选中的时候播出去或者收到低优先级的vrrp报文的时候播出去,然后不会再定时播了,网关那边arp表过期的时候会主动发grap来问,master回复,这样就能知道master是谁
1-2、由于交换机故障,keepalived 故障转移到备份实例,但是vip不通
原因:由于交换机故障,keepalived 故障转移到备份实例,备份实例发送了无偿 ARP,但因为交换机故障没有收到,当交换机恢复时(几分钟后)VIP 无法访问,因为交换机没有刷新 ARP 表(ARP 表到期时间设置为 4h)。由于交换机已经拥有此前vip对应的转移前的节点的MAC,因此它没有发送 ARP 请求,导致VIP 无法访问,也就是keepalived转移后,mac没有被交换机学到,直到我们重新启动了新 GARP 的 keepalived 实例才能重新宣告恢复
2、根因:garp没有及时刷新
默认情况下,不会定时刷新grap,grap是什么时候播的:
keepalied默认情况下是发vrrp在实现主备切换,然后garp只在master选中的时候播出去或者收到低优先级的vrrp报文的时候播出去,然后不会再定时播了
网关那边arp表过期的时候会主动发grap来问,master回复,这样就能知道master是谁
网关arp老化机制:
每台主机或设备上都维护着一个高速缓存,这是ARP高效运行的一个关键。在这个高速缓存中,存放主机或设备最近学习到的IP地址到MAC地址的映射关系,即动态ARP表项。
主机或设备每次发送报文时,会先在本地高速缓存中查找目的IP地址所对应的MAC地址。如果高速缓存中有对应的MAC地址,主机或设备不会再发送ARP请求报文,而是直接将报文发至这个MAC地址;如果高速缓存中没有对应的MAC地址,主机或设备才会广播发送ARP请求报文,进行ARP地址解析。
一方面由于高速缓存的容量限制,另一方面为了保证高速缓存中ARP表项的准确性,设备会对动态ARP表项进行老化和更新。
动态ARP表项的老化参数有:老化超时时间、老化探测次数和老化探测模式。设备上动态ARP表项到达老化超时时间后,设备会发送老化探测报文(即ARP请求报文),如果能收到ARP应答报文,则更新该动态ARP表项,本次老化探测结束;如果超过设置的老化探测次数后仍没有收到ARP应答报文,则删除该动态ARP表项,本次老化探测结束。
设备发送的老化探测报文可以是单播报文,也可以是广播报文。缺省情况下,设备只在最后一次发送ARP老化探测报文是广播模式,其余均为单播模式发送。当对端设备MAC地址不变时,可以配置接口以单播模式发送ARP老化探测报文。
当接口Down时设备会立即删除相应的动态ARP表项。
3、解决办法:定时广播garp
推荐设置:
garp_master_delay 1
garp_master_refresh 5
其它garp设置:
# delay for second set of gratuitous ARPs after transition to MASTER
vrrp_garp_master_delay 10 # seconds, default 5, 0 for no second set
# number of gratuitous ARP messages to send at a time after transition to MASTER
vrrp_garp_master_repeat 1 # default 5
# delay for second set of gratuitous ARPs after lower priority advert received when MASTER
vrrp_garp_lower_prio_delay 10
# number of gratuitous ARP messages to send at a time after lower priority advert received when MASTER
vrrp_garp_lower_prio_repeat 1
# minimum time interval for refreshing gratuitous ARPs while MASTER
vrrp_garp_master_refresh 60 # secs, default 0 (no refreshing)
# number of gratuitous ARP messages to send at a time while MASTER
vrrp_garp_master_refresh_repeat 2 # default 1
# Delay in ms between gratuitous ARP messages sent on an interface
vrrp_garp_interval 0.001 # decimal, seconds (resolution usecs). Default 0.
# Delay in ms between unsolicited NA messages sent on an interface
vrrp_gna_interval 0.000001 # decimal, seconds (resolution usecs). Default 0.