我们知道,为了实现不同 LAN 之间的通信,需要配置 L3 路由。通常指定路由方法有两种:
我们现在只来分析静态路由的缺点,因为 VRRP 技术就是使用在静态路由上的。对于静态路由而言,会为机器配置默认网关。如果作为默认网关的路由器出现故障,所有使用该网关为下一跳的主机的通信都会中断。
为了解决如上图所示的 路由单路故障 问题,首先考虑的是添加一个主从路由器。如下图,当 RouterA 故障的时,所有的及其都会将默认网关切换到 RouterB 上。这样就实现了路由器的备份,而这种实现的技术基于 VRRP 虚拟路由器冗余协议。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是由 IETF(Internet Engineering Task Force,因特网工程任务组)推出,用来解决局域网主机访问外部网络的可靠性问题。VRRP 协议有 VRRPv2 和 VRRPv3 两个版本。VRRPv2 基于 IPv4,VRRPv3 基于 IPv6。VRRP 协议在 Linux 上的软件实现是 Keepalived。
VRRP 是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。使用 VRRP 的优势在于:既不需要改变组网情况,也不需要在主机上配置任何动态路由或者路由发现协议,就可以获得更高可靠性的缺省路由。
如下图所示: 有两个路由器,从两个路由器中选举出一个路由器作为主路由器,其他的都是备份路由器,主路由器负责发转发数据报,而备份路由器处于空闲状态,当主路由器出现故障后,备份路由器会成为主路由器,代替主路由器实现转发功能。
VRRP 路由器(VRRP Router):所有运行 VRRP 协议的路由器就叫做 VRRP 路由器,它可能属于一个或多个虚拟路由器。
虚拟路由器(Virtual Router):虚拟路由器是 VRRP 备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个一样,你可以理解为在一个组中:主路由器+所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的 IP 地址和 MAC 地址。如果虚拟 IP 和备份组中的某台路由器的 IP 相同的话,那么这台路由器称为 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}。 VRID 为 VRRP 组的编号,范围是 0~255. 当虚拟路由器回应 ARP 请求时,使用虚拟 MAC 地址,而不是接口的真实 MAC 地址。
主 IP 地址(Primary IP Address):虚拟路由器的 IP 地址可以是备份组所在网段中未被分配的 IP 地址,也可以和备份组内的某个路由器的接口 IP 地址相同。从接口的真实 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。
如下图所示: RA、RB 和 RC 都是 VRRP 路由器,他们构成了一个 VRRP 备份组,RA 为主路由器,RB 和 RC 为备份路由器,这三台路由器从外界来看就像一台一样,这样构成一个虚拟路由器 Router Group,虚拟路由器有一个虚拟的 IP 地址为 10.1.1.1(RA 主路由器的 IP)。RA 是 IP 地址拥有者,也是主路由器。
VRRP 将局域网的一组路由器构成一个备份组,相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的 IP 地址,并不需知道具体某台设备的 IP 地址,将网络内主机的缺省网关设置为该虚拟路由器的 IP 地址,主机就可以利用该虚拟网关与外部网络进行通信。
VRRP 将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
如图所示,虚拟路由器的组网环境如下:
VRRP 协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于活动状态的设备才可以转发那些发送到虚拟 IP 地址的报文。
Initialize:设备启动时进入此状态,当收到接口 Startup 的消息,将转入 Backup 或 Master 状态(IP 地址拥有者的接口优先级为 255,直接转为 Master)。在此状态时,不会对 VRRP 报文做任何处理。
Master:当路由器处于Master状态时,它将会做下列工作:
Backup:当路由器处于 Backup 状态时,它将会做下列工作:
路由器使能 VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为 Master 路由器,优先级低的成为 Backup 路由器。Master 路由器定期发送 VRRP 通告报文,通知备份组内的其他设备自己工作正常;Backup 路由器则启动定时器等待通告报文的到来。
在抢占方式下,当 Backup 路由器收到 VRRP 通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为 Master 路由器;否则将保持 Backup 状态。
在非抢占方式下,只要 Master 路由器没有出现故障,备份组中的路由器始终保持 Master 或 Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为 Master 路由器。
如果 Backup 路由器的定时器超时后仍未收到 Master 路由器发送来的 VRRP 通告报文,则认为 Master 路由器已经无法正常工作,此时 Backup 路由器会认为自己是 Master 路由器,并对外发送 VRRP 通告报文。一个 VRRP 组里有多台备份路由器时,短时间内可能产生多个Master,此时,路由器会将收到的 VRRP 报文中的优先级与本地优先级做比较。从而选取优先级高的设备做 Master。备份组内的路由器根据优先级选举出 Master 路由器,承担报文的转发功能。
虚拟路由器状态切换时,Master 路由器由一台设备切换为另外一台设备,新的 Master 路由器只是简单地发送一个携带虚拟路由器的 MAC 地址和虚拟 IP 地址信息的免费 ARP 报文,这样就可以更新与它连接的主机或设备中的 ARP 相关信息。网络中的主机感知不到 Master 路由器已经切换为另外一台设备。
VRRP 使用选举机制来确定路由器的状态,运行 VRRP 的一组路由器对外构成了一个虚拟路由器,其中一台路由器处于 Master 状态,其他处于 Backup 状态。所以主路由器又叫做 Master 路由器,备份路由器又叫做 Backup 路由器。
优先级选举:
如下图所示: 虚拟 IP 为 10.1.1.254,在 VRRP 组中没有 IP 地址拥有者,则比较优先级,很明显 RB 和 RA 的优先级要大于 RC,则比较 RA 和 RB 的 IP 地址,RB 的 IP 地址大。所以 RB 为组中的主路由器。
VRRP 协议只使用 VRRP 通告报文。VRRP 通告报文使用 IP 组播数据包进行封装,组播地址为 223.0.0.18,IANA 给其分配的协议号为 112。VRRP 通告报文的 TTL 值必须是 255,如果 VRRP 路由器接受到 TTL 值不为 255 的 VRRP 通告报文,必须丢弃。VRRP 组中的主路由器会定期发送通告报文,备份路由器接受,他们通过这种方式来交流选举。
在一个 VRRP 组中,主路由器承担数据转发任务的同时,备份路由器的链路将处于空闲状态,这必然造成了带宽资源的浪费。为了避免这种浪费,可以使用 VRRP 负载均衡。
VRRP 并不具备对流量进行监控的机制,它的负载均衡只是通过使用多个 VRRP 组来实现的。VRRP 负载均衡是通过实现将路由器加入到多个 VRRP 组实现的,使 VRRP 路由器在不同的组中担任不同的角色。
如上图所示:RA 为组 35 的主路由器,同时又是组 36 的备份路由器。 RB 为组 36 的主路由器,同时又是组 35 的备份路由器。在正常状态下,PC1 和 PC2 走 RA,PC3 和 PC4 走 RB,但是两个路由器一旦出现故障,就将网关切换到备份路由器。RA 和 RB 可以说是相辅相成的。
负载分担方式具有以下特点:
这样,以达到分担数据流,而又相互备份的目的。
对于安全程度不同的网络环境,可以在报头上设定不同的认证方式和认证字。VRRP 提供了三种认证方式:
VRRP 可以监视所有接口的状态。当被监视的接口 Down 或 Up 时,该路由器的优先级会自动降低或升高一定的数值,使得备份组中各设备优先级高低顺序发生变化,VRRP 路由器重新进行 Master 竞选。
RFC3768 并没有规定虚拟 IP 地址应不应该 Ping 通。不能 Ping 通虚拟 IP 地址,会给监控虚拟路由器的工作情况带来一定的麻烦;能够 Ping 通虚拟 IP 地址可以比较方便的监控虚拟路由器的工作情况,但是带来可能遭到 ICMP 攻击的隐患。控制 Ping 通虚拟 IP 地址的开关命令,用户可以选择是否打开。
VRRP 通告报文时间间隔定时器:VRRP 备份组中的 Master 路由器会定时发送 VRRP 通告报文,通知备份组内的路由器自己工作正常。用户可以通过设置 VRRP 定时器来调整 Master 路由器发送 VRRP 通告报文的时间间隔。如果 Backup 路由器在等待了 3 个间隔时间后,依然没有收到 VRRP 通告报文,则认为自己是 Master 路由器,并对外发送 VRRP 通告报文,重新进行 Master 路由器的选举。
VRRP 抢占延迟时间定时器:为了避免备份组内的成员频繁进行主备状态转换,让 Backup 路由器有足够的时间搜集必要的信息(如路由信息),Backup 路由器接收到优先级低于本地优先级的通告报文后,不会立即抢占成为 Master。而是等待一定时间(抢占延迟时间)后,才会对外发送 VRRP 通告报文取代原来的 Master 路由器。
要启用 VRRP,最基本的配置就是要创建 VRRP 组,并为 VRRP 组配置虚拟 IP 地址。需要在主路由器和备份路由器上进行配置。
Vrrp group-number ip ip-address [secondary]
如果希望指定某台路由器成为主路由器,可以手工调整其优先级。优先级的配置在没有 IP 地址拥有者的情况下。想让哪台路由器成为主路由器就在哪台路由器上配置。
Vrrp group-number priority number
如上图所示:RA 为主路由器,RB 为备份路由器,但是当 RA 上的接口 S0 发生故障时,RA 依然从接口 E0 发送通告报文,声明自己为主路由器,但是 RA 实际上已经不能进行转发了。也就是说路由器网路中不能判定路由器接口是否发生了故障。
VRRP 接口跟踪机制就是检测接口故障的一种机制。配置了接口跟踪机制的路由器,当自己的接口发生故障时会将自己的路由器优先级降低,从而使自己从主路由器变为备份路由器,然后原来的备份路由器此时将成为主路由器。
Vrrp group-nunmber track interface [priority-decrement]
抢占模式:指当原来的路由器从故障中回复并接入到网络层后,配置了 VRRP 抢占模式的路由器将夺回原来属于自己的角色(主路由器),如果没有配置,回复之后将保持备份路由器的状态。
推荐使用启用抢占模式,在主路由器中配置该命令:
vrrp group-number preempt {delay [Delay-time]}
VRRP 定时器可以修改通告报文的发送时间,在主路由器上配置:
vrrp group-number timers advertise vrrp-advertise-interval
配置此命令的路由器会学习发送通告报文时间,进而计算出失效间隔,否则默认 3s。这条命令对于上面的配置 VRRP 定时器,在主路由器中配置了发送时间间隔,那么在备份路由器上就需要配置定时学习功能来计算失效间隔,因为失效间隔是发送时间的 3 倍。
vrrp group-number times learn
VRRP 简单的讲,就是利用心跳信息实现高可用。主节点不断的向备用节点广播信息,信息包含自己的心跳和优先级。不光如此,还可以在主节点上安装一个监控,来监控其他资源,如果这些资源运行正常,就可以给其他客户端发送心跳信息(包含优先级),一旦监控的资源出现问题了,就降低自己的优先级(降低后的优先级要低于备用节点的优先级,自己设置)。这时候,备用节点可以在主节点未出现故障的时候,就抢占主节点的资源(工作在抢占模式的备用节点)。备用节点发现自己的优先级比主节点的优先级高,就触发一次选举。将主节点变为备用节点,备用节点变为主节点。主节点拥有 VIP。
https://blog.51cto.com/zhaoyuqiang/1166840
http://wangshengzhuang.com/2017/06/05/%E8%BF%90%E7%BB%B4%E7%9B%B8%E5%85%B3/Keepalived/VRRP(Virtual%20Router%20Redundancy%20Protocol)%20%E8%99%9A%E6%8B%9F%E8%B7%AF%E7%94%B1%E5%99%A8%E5%86%97%E4%BD%99%E5%8D%8F%E8%AE%AE%E7%AE%80%E4%BB%8B/