VRRP协议是什么
VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。
VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。
VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
VRRP基本概念
概念 |
解释 |
VRRP路由器(VRRP Router) | 运行VRRP的设备,它可能属于一个或多个虚拟路由器。 |
虚拟路由器(Virtual Router) | 由VRRP管理的抽象设备,又称为VRRP备份组,被当作一个共享局域网内主机的缺省网关。 它包括了一个虚拟路由器标识符和一组虚拟IP地址。 |
虚拟IP地址(Virtual IP Address) | 虚拟路由器的IP地址,一个虚拟路由器可以有一个或多个IP地址,由用户配置。 |
IP地址拥有者(IP Address Owner) | 如果一个VRRP路由器将虚拟路由器的IP地址作为真实的接口地址,则该设备是IP地址拥有者。 当这台设备正常工作时,它会响应目的地址是虚拟IP地址的报文,如ping、TCP连接等。 |
虚拟MAC地址 | 是虚拟路由器根据虚拟路由器ID生成的MAC地址。 一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}。 当虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是接口的真实MAC地址。 |
主IP地址(Primary IP Address) | 从接口的真实IP地址中选出来的一个主用IP地址,通常选择配置的第一个IP地址。 VRRP广播报文使用主IP地址作为IP报文的源地址。 |
Master路由器(Virtual Router Master) | 是承担转发报文或者应答ARP请求的VRRP路由器,转发报文都是发送到虚拟IP地址的。 如果IP地址拥有者是可用的,通常它将成为Master。 |
Backup路由器(Virtual Router Backup) | 一组没有承担转发任务的VRRP路由器,当Master设备出现故障时,它们将通过竞选成为新的Master。 |
抢占模式 |
在抢占模式下,如果Backup的优先级比当前Master的优先级高,将主动将自己升级成Master。 |
VRRP报文
VRRP控制报文只有一种:VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。
因为这份笔记的主要目的是理解keepalived的原理,所以只介绍部分相关字段。
Virtual Rtr ID(VRID):虚拟路由器ID,取值范围是1~255。
Priority:发送报文的VRRP路由器在虚拟路由器中的优先级。取值范围是0~255,其中可用的范围是1~254。0表示设备停止参与VRRP,用来使备份路由器尽快成为主路由器,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100。
Count IP Addrs:VRRP广播中包含的虚拟IP地址个数。
IP Address(es):虚拟路由器IP地址,地址个数是Count IP Addrs的值。
Master路由的选举
备份组中路由器的优先级:
- VRRP根据优先级来确定备份组中每台路由器的角色(Master路由器或Backup路由器)。优先级越高,则越有可能成为Master路由器。
- 当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。
VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器主动放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则该VRRP路由器被称为该IP地址的所有者;IP地址所有者自动具有最高优先级:255。因此,当备份组内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
备份组中路由器的工作方式:
- 非抢占方式:如果备份组中的路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
- 抢占方式:如果备份组中的路由器工作在抢占方式下,它一旦发现自己的优先级比当前的Master路由器的优先级高,就会对外发送VRRP通告报文。导致备份组内路由器重新选举Master路由器,并最终取代原有的Master路由器。相应地,原来的Master路由器将会变成Backup路由器。Backup路由器接收到VRRP通告报文后,只会将自己的优先级与通告报文中的优先级进行比较,不会比较IP地址,只有自己的优先级大于通告报文中的优先级时,才会抢占成为Master。
初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级:
- 如果VRRP报文中Master路由器的优先级高于自己的优先级,则路由器保持在Backup状态;
- 如果VRRP报文中Master路由器的优先级低于自己的优先级,采用抢占工作方式的路由器将抢占成为Master状态,周期性地发送VRRP报文,采用非抢占工作方式的路由器仍保持Backup状态;
- 如果在一定时间内没有收到VRRP报文,则路由器切换为Master状态。
由于路由器上备份组的配置不一致、网络故障等原因造成备份组中存在多个Master路由器时,这些Master路由器会根据优先级和IP地址选举出一个Master:优先级高的路由器成为Master;优先级低的成为Backup;如果优先级相同,则IP地址大的成为Master。
VRRP定时器
VRRP定时器分为两种:VRRP通告报文间隔时间定时器和VRRP抢占延迟时间定时器。
1)VRRP通告报文时间间隔定时器
VRRP备份组中的Master路由器会定时发送VRRP通告报文,通知备份组内的路由器自己工作正常。
用户可以通过设置VRRP定时器来调整Master路由器发送VRRP通告报文的时间间隔。如果Backup路由器在等待了3个间隔时间后,依然没有收到VRRP通告报文,则认为自己是Master路由器,并对外发送VRRP通告报文,重新进行Master路由器的选举。
2)VRRP抢占延迟时间定时器
为了避免备份组内的成员频繁进行主备状态转换,让Backup路由器有足够的时间搜集必要的信息(如路由信息),Backup路由器接收到优先级低于本地优先级的通告报文后,不会立即抢占成为Master,而是等待一定时间——抢占延迟时间后,才会对外发送VRRP通告报文取代原来的Master路由器。
Master路由器状态的通告
Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。
Master路由器主动放弃Master地位(如Master路由器退出虚拟路由器)时,会发送优先级为0的VRRP报文,致使Backup路由器快速切换变成Master路由器。这个切换的时间称为Skew time,计算方式为:(256-Backup路由器的优先级)/256,单位为秒。
当Master路由器发生网络故障而不能发送VRRP报文的时候,Backup路由器并不能立即知道其工作状况。Backup路由器等待一段时间之后,如果还没有接收到VRRP报文,那么会认为Master路由器无法正常工作,而把自己升级为Master路由器,周期性发送VRRP报文。如果此时多个Backup路由器竞争Master路由器的位置,将通过优先级来选举Master路由器。Backup路由器默认等待的时间称为Master_Down_Interval,取值为:(3×VRRP报文的发送时间间隔)+Skew time,单位为秒。
在性能不够稳定的网络中,Backup路由器可能因为网络堵塞而在Master_Down_Interval期间没有收到Master路由器的报文,而主动抢占为Master位置,如果此时原Master路由器的报文又到达了,就会出现虚拟路由器的成员频繁的进行Master抢占现象。为了缓解这种现象的发生,特制定了延迟等待定时器。它可以使得Backup路由器在等待了Master_Down_Interval后,再等待延迟等待时间。如在此期间仍然没有收到VRRP报文,则此Backup路由器才会切换为Master路由器,对外发送VRRP报文。
如果Backup路由器监视Master路由器采用的是具有快速检测功能的BFD技术。在Backup设备上使用该技术监视Master路由器的状态,一旦Master路由器发生故障,Backup就可以自动切换成为新的Master路由器,将切换时间缩短到毫秒级。
VRRP工作原理
参与虚拟路由器的每一台VRRP路由器,都只有3种VRRP状态:初始状态(Initialize)、主控状态(Master)、备份状态(Backup)。
VRRP的工作过程为:
1)路由器使能VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master路由器,优先级低的成为Backup路由器。Master路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;Backup路由器则启动定时器等待通告报文的到来。
2)在抢占方式下,当Backup路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master路由器;否则将保持Backup状态。
3)在非抢占方式下,只要Master路由器没有出现故障,备份组中的路由器始终保持Master或Backup状态,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
4)如果Backup路由器的定时器超时后仍未收到Master路由器发送来的VRRP通告报文,则认为Master路由器已经无法正常工作,此时Backup路由器会认为自己是Master路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出Master路由器,承担报文的转发功能。
VRRP协议状态机-初始状态(Initialize)
如果本地优先级为255,也就是说自己是IP拥有者路由器,那么接下来它会:
1)发送VRRP通告报文
2)广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。
3)启动一个Adver_Timer计时器,初始值为Advertisement_Interval(缺省是1秒),当该计时器超时后,会发送下一个VRRP通告报文
4)本地VRRP进程将自己切换为Master路由器
如果本地优先级不是255,,那么接下来它会:
1)设置Master_Down_Timer计时器等于Master_Down_Interval,也就是主路由器死亡时间间隔,如果此计时器超时,那么Backup路由器就会宣布主路由器死亡。其中Master_Down_Interval = (3*Advertisement_Interval)+ Skew_time举例来说,一个VRRP实例(也就是一个VRRP虚拟器)的优先级是100,报文发送间隔是1秒,那么Master_Down_Interval = 3*1s + (256-100)/256s = 3.609秒。
2)本地VRRP进程将自己切换为Backup路由器。
VRRP协议状态机-备份状态(Backup)
备份路由器是为了监控Master路由器的状态,如果一个VRRP路由器处于此状态,那么它会:
1)不响应对虚拟IP地址的ARP请求报文。
2)丢弃帧头目的MAC地址是虚拟MAC的帧。
3)丢弃IP头中目的IP地址是虚拟IP的IP包。
如果此时该VRRP路由器收到了一个shutdown事件,那么它会:
1)取消Master_Down_Timer。
2)转换为初始状态(Initialize state)。
如果Master_Down_Timer超时,那么该VRRP路由器会执行:
1)发送一个VRRP通告报文。
2)广播免费ARP请求报文,内部封装是虚拟MAC和虚拟IP的对应,有几个虚拟IP地址,那么就发送几个免费ARP请求报文。
3)设置Adver_Timer计时器为Advertisement_Interval(缺省为1秒)。
4)切换到Master状态。
如果该Backup状态的VRRP路由器收到了一个VRRP通告报文:
- 当该VRRP通告报文的优先级字段为0时,那么路由器会将当前的Master_Down_Timer 设置为Skew_Time。
- 如果优先级不为0,并且大于或等于本地优先级,那么本地路由器会重置Master_Down_Timer计时器并保持Backup状态。
- 如果优先级不为0,并且小于本地优先级,如果开启了抢占模式(Preempt mode),那么该Backup路由器等待指定的抢占延迟时间后将自己切换为Master路由器;并执行Master路由器的所有动作;例如:vrrp 1 preempt delay minimum 10,表示等待10秒后切换自己为Master。
- 如果优先级不为0,并且小于本地优先级,如果没有开启抢占模式(Preempt mode),那么本地路由器保持Backup状态。
VRRP协议状态机-主控状态(Master)
当路由器处于Master状态时,会进行下面的动作:
- 响应对虚拟IP地址的ARP请求。
- 转发目的MAC地址是虚拟MAC的数据帧。
- 拒绝目的IP地址是虚拟IP的数据包,除非它是IP地址拥有者(也就是优先级是255的那个路由器)。
如果处于Master状态的VRRP进程收到了一个shutdown事件,那么它会:
1)取消Adver_Timer计时器。
2)发送一个优先级字段置零的VRRP通告报文。
3)切换为初始状态(Intialize state)。
如果Adver_Timer计时器超时,那么:
1)发送一个VRRP通告报文。
2)重置Adver_Timer计时器。
如果收到了一个VRRP报文且其优先级为0,那么:
1)发送一个VRRP通告报文。
2)重置Adver_Timer计时器。
如果收到了一个VRRP报文且其优先级高于本地优先级,或者收到的VRRP报文优先级等于本地优先级但是主IP地址高于本地的主IP地址,那么:
1)取消Adver_Timer计时器。
2)设置Master_Down_Timer计时器为Master_Down_Interval。
3)切换为Backup状态。
原文地址:http://blog.51cto.com/billy98/2064252