keepalived实现vip的原理剖析
keepalived实现vip的原理:vrrp + gratuitous arp
1、vrrp
vrrp更多细节参考:vrrp技术白皮书
相关术语:
VRRP工作过程
VRRP的工作过程为:
1、虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送欺骗ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任 务;(假如路由器的优先级一样,就根据主机的IP地址大小进行选择,IP地址大的是master)
2、Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
3、如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;因为可能会有多个Backup路由器。
4、虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的欺骗ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
5、Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:
Master路由器的选举;
Master路由器状态的通告;
Master路由器的选举
VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。优先级越高,则越有可能成为Master路由器。
初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级:
1、如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;
2、如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为Master状态,周期性地发送VRRP报文,采用非抢占工作方式的路由 器仍保持Backup状态;
3、如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。
VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
Master路由器路由通告原理
1、Master设备周期性地发送VRRP通告报文,在VRRP备份组中公布其配置信息(优先级等)和工作状况。Backup设备通过接收到VRRP报文的情况来判断Master设备是否工作正常。
2、当Master设备主动放弃Master地位(如Master设备退出备份组)时,会发送优先级为0的通告报文,用来使Backup设备快速切换 成Master设备,而不用等到Master_Down_Interval定时器超时。这个切换的时间称为Skew time,计算方式为:(256-Backup设备的优先级)/256,单位为秒。
3、当Master设备发生网络故障而不能发送通告报文的时候,Backup设备并不能立即知道其工作状况。等到 Master_Down_Interval定时器超时后,才会认为Master设备无法正常工作,从而将状态切换为Master,从而对外发送vrrp报文。
Master_Down_Interval作用:
避免由于网络抖动而引起选主颠簸,当网络抖动时,可能那时候backup设备没收到master报文,
就切为master开始竞争选主,然后待会master的报文又到了,又要切换回来
2、gratuitous arp
如何解决VIP从一个master迁移到另一个另一个backup的问题?
因为当VIP在master点时,此时局域网内的客户端存储的是VIP所在的master的MAC地址,而当master宕机,VIP迁移到backup节点时,局域网内的客户端保留的VIP所对应的MAC地址依然是master的MAC地址,这时局域网内的客户端向外发送信息时还是会去找master。
解决办法:arp欺骗:
每一主机在局域网中都会自动不断接收网络中的各种广播信息,尤其是arp的解析广播信息,并且收到一个arp解析广播信息后,主机都会与自己的arp缓存做比对。例如一个主机在局域网内广播1.1.1.1对应的MAC地址是多少,1.1.1.1这个主机收到广播后就会广播响应,此时在同一局域网内的其他主机也可以收到主机1.1.1.1的回应,其他主机就会把1.1.1.1的回应广播与自己arp缓存进行对比,如果MAC不一致,这个主机就做修改。鉴于此方法,任何时刻当VIP从一个主机迁移到另一个主机时,那么转移到的主机(A)就来一个自问自答的arp广播,即主机(比如是A)会广播问:A主机IP对应的MAC地址是什么,这时A再回答具体是什么,那么在同一个局域网中的其他主机听到这个arp广播后就会自动更新A的IP所对应的MAC地址
gratuitous arp:就是自问自答的arp广播包
在使用keepalived的过程中,当backup提升为master时,都会出现如下日志(192.168.122.17 为vip):
Sending gratuitous ARPs on eth0 for 192.168.122.17
Keepalived是怎样来使用gratuitous arp来处理IP漂移的呢?
1、默认配置下,当keepalived启动时,会发送gratuitous arp,间隔时间5s,每次发送5个arp。
默认配置:
# delay for second set of gratuitous ARPs after transition to MASTER.
# in seconds, 0 for no second set.
# (default: 5)
vrrp_garp_master_delay
# number of gratuitous ARP messages to send at a time after
# transition to MASTER.
# (default: 5)
vrrp_garp_master_repeat
2、当master收到一个优先级更低的vrrp通告时,master也会发送gratuitous arp,默认每间隔1s发送一次,每次发送5个gratuitous arp。相关的配置如下:
# 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
综合分析
现在我们可以知道keepalived是怎么工作:
通过vrrp协议做主备之间的心跳,当发生切换备获得浮动IP时,发送ARP包告诉其他机器现在VIP对应的mac地址已经变成了备机的网卡的mac地址。这时如果有新的机器要和VIP通信时,找到的就是备机,从而实现的高可用。