VRRPd介绍及测试

对VRRP协议的实现有vrrpd、keepalived、freevrrpd,这里对vrrpd的开源项目进行测试,可以在这里下载:vrrpd-1.0源码,VRRPd的官方文档介绍.VRRPd是基于rfc2338的VRRPv2协议的实现,它在Linux平台下运行。在测试之前,先对VRRP协议简单介绍一下。

1 VRRP协议详解

本文只针对vrrpd介绍相关内容,关于vrrp协议具体可参考rfc2338官方文档,
下面关于vrrp协议技术详解部分参考于:https://blog.csdn.net/u013982161/article/details/51192337

VRRP是一种容错协议,多用于双机备份,它保证当主设备出现故障时,由另一台设备来代替出现故障的设备进行工作,从而保持网络通信的连续性和可靠性。
vrrp路由器指运行vrrp的路由器,是物理实体;虚拟路由器是指vrrp协议创建的,是逻辑概念。一组vrrp路由器协同工作,共同构成一台虚拟路由器。

1.1 vrrp具有如下优点
  • 简化网络管理。在具有多播或广播能力的局域网(如以太网)中,借助vrrp能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。
  • 适应性强。vrrp报文封装在IP报文中,支持各种上层协议。
  • 网络开销小。vrrp只定义了一种报文——vrrp通告报文,并且只有处于Master状态的路由器可以发送vrrp报文。
1.2 相关术语
  • 虚拟路由器:由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当做默认网关。
  • VRID:虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器。
  • Master路由器:虚拟路由器中承担报文转发任务的路由器。
  • Backup路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器。
  • 虚拟IP地址:虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址。
  • IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者。
  • 虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址。虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP请求而使用的时虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址。
  • 优先级Priority:vrrp根据优先级来确定虚拟路由器中每台路由器的地位。
  • 非抢占方式:如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
  • 抢占方式:如果Backup路由器工作在抢占方式下,当它收到vrrp报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态。
1.3 vrrp工作过程
1.3.1 主设备
  1. 根据优先级选举出主设备,主设备通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备,从而承担报文转发任务;
  2. 主设备周期性地发送通告报文,以公布其配置信息(优先级等)和工作状态;
  3. 如果主设备停用或出现故障,会发送优先级为0的通告报文,致使从设备快速切换为主设备;
  4. 设备状态切换时,主设备由一台设备换成另外一台设备。新的主设备只是简单地发送一个携带虚拟MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的设备中的ARP相关信息。由于切换的时间非常短,网络中的设备感知不到主设备已经切换为另外一台设备。
1.3.2 从设备

从设备会监控主设备的状态,当主设备出现故障时,从设备代替主设备工作。从设备接收到主设备发送的通告报文,并按照以下规则依次进行处理:

  1. 如果该通告报文的优先级字段为0,那么设备会在规定时间内切换为主设备状态;
  2. 如果优先级不为0,并且大于或等于本地优先级,那么从设备会重置定时器并保持从设备状态;
  3. 如果优先级不为0,并且小于本地优先级,那么由从设备的工作模式(抢占模式和非抢占模式)决定是否重新选举接管主设备。
  4. 当主设备发生网络故障而不能发送通告报文时,从设备不能立即知道其工作状况。从设备等待一段时间之后,还没有接收到通告报文,则会认为主设备无法正常工作,再把自己变为主设备。若干此时多个从设备竞争主设备的位置,将通过优先级来选举主设备。
1.3.3 其他

vrrp优先级的取值范围为0-255,可配置的范围是1-254,优先级0为系统保留给路由器放弃Master位置时使用,255则是系统保留给IP地址拥有者使用。当路由器为IP地址拥有者时,其优先级始终为255。因此,当虚拟路由器内存在IP地址拥有者时,只要其工作正常,则为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报文。

2 VRRPd测试
2.1 安装VRRPd
[root@localhost vrrpd]# cat INSTALL
1. uncompress the source
2. cd in the directory
3. type 'make'
4. if everything is ok, there is now a file 'vrrpd' in the directory
5. copy vrrpd in your path (e.g /usr/sbin) and vrrpd.8 in your man path
   (e.g. /usr/man/man8)

it requires to be run as root.
2.2 命令参数含义
[root@localhost vrrpd]# ./vrrpd -h
vrrpd version 1.0
Usage: vrrpd -i ifname -v vrid [-f piddir] [-s] [-a auth] [-p prio] [-m ifname] [-c delta] [-nhD] ipaddr
  -h       : display this short inlined help
  -n       : Dont handle the virtual mac address
  -D       : Go to background, daemonize
  -i ifname: the interface name to run on
  -v vrid  : the id of the virtual server [1-255]
  -s       : Switch the preemption mode (Enabled by default)
  -a auth  : set the authentification type
             auth=(none|pass/hexkey|ah/hexkey) hexkey=0x[0-9a-fA-F]+
  -p prio  : Set the priority of this host in the virtual server (dfl: 100)
  -f piddir: specify the directory where the pid file is stored (dfl: /var/run)
  -d delay : Set the advertisement interval (in sec) (dfl: 1)
  -m ifname: Interface(s) to monitor for failure
             Use " " for multiple interfaces
  -c delta : Set the delta to decrease priority by (dfl: 50)
  -l name  : use this name is syslog messages (helps in case several vrid run)
  ipaddr   : the ip address(es) of the virtual server
2.3 初始化设备

配置命令:vrrpd -i ifname -v VRID -n -p prio VIP
注:一个设备上可添加多个虚拟IP
启动之前要将防火墙关闭,不然影响主设备发送通告报文systemctl stop firewalld
on server1:vrrpd -i ens33 -v 3 -n -p 220 192.168.44.3(Master)
on server2:vrrpd -i ens33 -v 3 -n -p 200 192.168.44.3(Backup)
ip addr show查看

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3b:21:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.44.128/24 brd 192.168.44.255 scope global noprefixroute dynamic ens33
       valid_lft 1478sec preferred_lft 1478sec
    inet 192.168.44.3/32 scope global ens33:vr3
       valid_lft forever preferred_lft forever
    inet6 fe80::230f:34:f1c8:67dc/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0@NONE:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default 
    link/ether 52:54:00:30:1a:c2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic@NONE:  mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 500
    link/ether 52:54:00:30:1a:c2 brd ff:ff:ff:ff:ff:ff

看到ens33接口增加了一条VRID=3,IP地址为192.168.44.3的virtual server。

2.4 状态转换分析
  1. init->Master
    条件:优先级=255,即接口IP与虚拟IP相等
    动作:将主设备的所有虚拟IP(除与接口IP相等的虚拟IP外)启动,发送通告报文、免费ARP报文(源IP地址:物理接口IP地址;目的IP地址:组播地址),设置定时器adv_int,切换成主状态
  2. init->Backup
    条件:0<优先级<255
    动作:设置延迟定时器Master_Down_Interval=3*adv_int + skew_time
    ,切换成从设备
  3. Master->Backup
    条件:优先级>本地优先级&&抢占模式
    动作:设置延迟定时器,取消adv_int定时器,切换成slave状态
  4. Master down机
    动作:发送prio=0的通告报文,删除pidfile、statefile等文件,删除该设备上的所有虚拟IP地址
  5. Backup->Master
    if 收到prio=0的报文: 设置skew_time=(255-prio)/255的定时器,等待时间后,重新竞选主设备。切换成主设备过程中,也是将该设备的所有虚拟IP启动,发送通告报文、免费ARP报文,设置定时器adv_int,切换成主设备。
    else if 延迟定时器超时: 启动虚拟IP,切换成主设备
3 结语

作者第一次写文,有很多不充分的地方,有什么问题也欢迎大家留言~~

你可能感兴趣的:(VRRPd介绍及测试)