Keepalived的高可用基石 - VRRP协议

一、背景

路由实现了不同子网之间的数据通信,目前比较常用的路由配置方法大概分为两种:动态路由(利用RIP、OSPF进行动态学习)和静态路由(对终端设备静态配置路由)。动态路由可以通过学习的方式获取路由表,避免了静态路由需要手动配置以及后续变更的繁琐,但同时需要额外的占用线路带宽和CPU的处理时间。VRRP技术是在静态路由上用于在目标机器不可达之后的路由能够自动变更的一种实现手段。

二、VRRP

2.1、简介

VRRP(Virtual Router Redundancy Protocol),即虚拟路由冗余协议,它是为了避免路由器出现单点故障的一种容错协议。VRRP协议的实现有VRRPv2VRRPv3两个版本,VRRPv2基于IPv4VRRPv3基于IPv6。相关RFC文件为:RFC2338 - Virtual Router Redundancy Protocol, RFC3768 - Virtual Router Redundancy Protocol (VRRP), RFC5798 - Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6

2.2、基础概念

  • VIP:Virtual IP, 即虚拟IP,是一个不与特定计算机或网络接口卡(NIC)相连的IP地址;
  • VRRP路由器:运行VRRP协议的路由器(或设备),它可能属于一个或多个虚拟路由器;
  • Master路由器:承担转发报文任务的VRRP设备;
  • Backup路由器:一组没有担转发任务的VRRP设备,当Master设备出现故障时,它们将通过竞选成为新的Master设备;
  • 虚拟路由器:由一组VRRP路由器组成,抽象成一个虚拟的路由器。它拥有一个虚拟路由器标识符(VRID)和一个(或多个)VIP
  • 虚拟MAC地址:即虚拟路由器根据VRID生成的MAC地址,一个虚拟路由器拥有一个虚拟MAC地址,当虚拟路由器回应ARP请求时,回复虚拟MAC地址,而不是接口的真实MAC地址,格式为:00-00-5E-00-01-{VRID}(VRRP for IPv4)00-00-5E-00-02-{VRID}(VRRP for IPv6)从VRID的用途可以看出VRID的取值范围是0~255
  • IP地址拥有者(IP Address Owner):如果一个VRRP路由器VIP作为真实的接口地址,则该设备是IP地址拥有者,当这台设备正常工作时,它会响应目的地址是VIP的报文,如ping、TCP连接等;
  • 优先级(Priority):用来标识虚拟路由器中各成员路由器的优先级,虚拟路由器根据优先级选举出MasterBackup

2.3、报文

VRRP协议报文用来将Master设备优先级状态通告给同一备份组的所有Backup设备。VRRP协议报文封装在IP报文中,发送到分配给VRRP的IP组播地址。

  • IP报文头中,源地址为发送报文接口的主IP地址(不是虚拟IP地址),目的地址是224.0.0.18,TTL是255,协议号是112;
  • IP报文头中,TTL必须为255,当VRRP路由器收到TTL不等于255的VRRP协议报文后,必须丢弃;

2.3.1、VRRPv2报文

  • 仅适用于IPv4网络;
  • 为了兼容早期版本(RFC2338),VRRPv2版本保留报文的认证字段,但是VRRP认证并不能提高安全性;
  • 秒级的通告报文的发送时间间隔;

VRRPv2

2.3.2、VRRPv3报文

  • 适用于IPv4和IPv6两种网络;
  • 不支持认证功能;
  • 厘秒级(100分之1秒)的通告报文的发送时间间隔;

VRRPv3

2.3.3、报文字段含义

  • Version:长度4比特,指VRRP协议版本,VRRPv2此字段为2,VRRPv3此字段为3;
  • Type:长度4比特,定义了VRRP报文的类型,本版本的协议仅定义了一个报文类型:
    • 1:Advertisement 带有未知类型的报文必须被丢弃;
  • Virtual Rtr ID8:长度8比特,虚拟路由器标识(VRID)字段标识了此报文所报告状态的虚拟路由器。可配置的范围是1–255。没有缺省值;
  • Priority:长度8比特,申明了发送此报文的VRRP路由器的优先级。值越高优先级越高。如果VRRP路由器是虚拟路由器地址的IP地址所有者,那么其优先级必须为255。备用作用的VRRP路由器的优先级必须在1–254之间。缺省的VRRP路由器优先级为100。优先级值0 用于指示当前虚拟路由器的主路由器停止参与VRRP组。主要用于触发备用路由器快速地迁移到主路由器,而不用等待当前主路由器超时;
  • Count IP Addrs:长度8比特。在此VRRP通告中包含的IP地址的数量;
  • Auth Type:长度8比特,用于标识要用到的认证方法。在一个虚拟路由器组内认证类型是唯一的。如果报文携带未知的认证类型或者该认证类型和本地配置的认证方法不匹配,那么该报文必须被丢弃。目前定义的认证方法有:
    • 0(No Authentication) : 表明VRRP协议报文的交换不需要认证。在发送VRRP协议报文时,Authentication Data 字段将被置为0,而在接收协议报文时,Authentication Data 字段被忽略;
    • 1(Simple Text Password): 表示明文认证方式。
    • 2(IP Authentication Header):表示MD5认证方式;
  • Adver Int:长度8比特,VRRP通告间隔时间,单位为秒(默认为1秒),这个字段主要用于错误配置路由器时的故障定位和解决;
  • Checksum:长度16比特,16位校验和,用于检测VRRP报文中的数据破坏情况;
  • IP Address:长度32比特,VRRP备份组的虚拟IPv4地址或者虚拟IPv6地址;
  • Authentication Data:长度32比特,VRRP报文的认证字,目前只有明文认证和MD5认证才用到该部分,对于其它认证方式,一律填0;

2.4、工作原理

2.4.1、状态机

  • 初始状态(Initialize):该状态下VRRP处于不可用的状态,在此状态下设备不会对VRRP报文做任何处理,通常刚配置VRRP时或设备检测到故障时会进入该状态。收到接口startup(启动)的状态,如果设备的优先级为255(表示该设备为虚拟路由器IP地址拥有者),则直接成为Master设备。如果设备的优先级小于255,则会先切换到Backup状态
  • 活动状态(Master):处于该状态下的设备为Master设备,Master设备会做如下工作:
    • 定时发送VRRP通告报文,时间间隔为Advertisement_Interval
    • 以虚拟MAC地址相应对虚拟IP地址的ARP请求;
    • 转发目的MAC地址为虚拟MAC地址的IP报文;
    • 抢占模式下,如果收到比自己优先级大的VRRP报文,或者跟自己优先级相等,且本地接口IP地址小于源端接口IP地址时,则转变为Backup状态;
    • 收到Shutdown(关闭)消息后,则立即转变为初始状态(Initialize)
  • 备份状态(Backup):处于该状态下的设备接收Master发送的VRRP通告报文,判断Master是否正常。如果一定时间间隔没有收到VRRP通告报文,即Master_Down_Interval(Master_Down_Interval = 3 * Advertisement_Interval + Skew_time 超时,则判断为Master故障。
    • 接收Master发送的VRRP通告报文,判断Master是否正常;
    • 对虚拟IP的ARP请求不做响应;
    • 丢弃目的MAC地址为虚拟路由器MAC地址的IP报文;
    • 丢弃目的IP地址为虚拟路由器IP地址的IP报文;
    • 如果收到优先级比自己高,或与自己相等的VRRP报文,则重置Master_Down_Interval定时器(不进一步比较IP地址);
    • 如果收到优先级比自己小的VPPR报文,且优先级为0时,(表示原Master设备声明不参与该VRRP组了),定时器时间设置为Skew_time(偏移时间,Skew_time= (256 - priority)/256)
    • 如果收到优先级比自己小的VPPR报文,且优先级不为0时,丢弃该报文,立即转变为Master状态;
    • Master_Down_Interval定时器超时,立即转变为Master状态;
    • 收到Shutdown(关闭)消息后,则立即转变为初始状态(Initialize)

三、参考地址

Author: bugwz
Link: https://bugwz.com/2020/06/20/keepalived-vrrp/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.