Vgmp VRRP Group Management Protocol
由于双机热备导致设备出问题时可能会来回路径不一致,因为主备切换了
配置VGMP保证一个组内的VRRP全为master,如果有一个不是,则全部切换至slave
HRP ( Huawei Redundancy Protocol)
用于主设备出现问题时,备能快速切换至主,同时保证了主备之间的数据同步
防火墙作双机热备时只支持两台设备做,不像路由器多台设备做VRRP
备份组:两台设备的接口在同一个网段,同一个广播域内,是接口的概念不是设备的概念
VRRP通过组播地址224.0.0.18发送advertisement报文(只有一种报文)
vrrp的主备选举,切换时间,优先级
单纯的VRRP在防火墙上配置的话很可能会导致来回路径不一致的故障
VGMP(华为私有)解决了来回路径不一致的问题
建立邻居:1.组播建邻居 2.单播UDP通过端口18514建立邻居(用于心跳线上存在路由设备,非同一个网段)
UDP Header | VRRP Header | VGMP Header | DATA |
VGMP与VRRP关系:基于VRRP华为开发的私有协议,改变报文的结构,所以VRRP的功能被扩展,VRRP只是负责在VRRP备份组内交互报文起作用
VRRP名存实亡,主要是通过VGMP去实现控制管理VRRP的组
VRRP:备份组
VGMP:active组和standby组
VGMP的报文结构:
如上图所示,从 VGMP 报文封装顺序中我们可以发现,VGMP 报文是根植于 VRRP 报文的,
是由 VRRP 报文头封装的。但这个 VRRP 报文并不是标准的 VRRP 报文,是经过华为扩展
和修改的,具体有以下几点变化:
标准VRRP报文的“Type”字段只有“1”一个取值,我们增加了“2”取值。也就是说如果Type=1,就是标准的VRRP报文;如果Type=2,就是我们修改后的VRRP报文。
标准VRRP报文的“Virtual Rtr ID”字段代表VRRP备份组ID,而修改后的VRRP报文“Virtual Rtr ID”取值固定为“0”。
修改后的VRRP报文中去掉了标准VRRP报文的“IP Address”字段。
标准VRRP报文中的“Priority”字段在VRRP报文头中被修改成“Type2”字段。
双机热备
当Type2=1时,报文封装成 心跳链路探测报文。心跳链路探测报文用于检测对端设备的心跳口能否正常接收本端设备的报文,以确定是否有心跳口可以使用。
当Type2=5时,报文封装成 一致性检查报文。一致性检查报文用于检测双机热备状态下的两台防火墙是否配置了相同的策略。
当Type2=2时,VRRP报文才会进一步封装VGMP报文头,并根据VGMP报文头中
“vType”字段继续分成以下三种报文 :
VGMP 报文(VGMP Hello 报文)。VGMP Hello 报文用于两台防火墙间的VGMP组协商主备状态。这也正是我们问题的答案所在。
HRP 心跳报文(HRP Hello 报文)。HRP心跳报文用于探测对端设备是否处于工作状态。主用设备会每隔一段时间(缺省为1s)向备用设备发HRP心跳报文,用来通知主用设备处于工作状态。如果备用设备在三个周期内没有收到HRP心跳报文,则认为主用设备故障,而自身切换成主用备。
HRP 数据报文。我们还需要在VGMP报文头后继续增加HRP报文头,才能封装成HRP数据报文。HRP数据报文用于主备设备之间的数据备份,包括命令行配置的备份和各种状态信息的备份。
priority默认为65001(主)
priority默认为65000(备)
一个接口down了减2
Hrp standly-device ----主备
Hrp loadbalance-device ----负载
双机热备交换模式时上下连接都为三层路由设备时只能为负载分担模式,否则会导致一边不通。
双机热备交换模式时上下连接都为二层透明网桥时只能为主备模式,否则会产生环路,断了一边防止环路。
通过hrp track监控三层接口,且将其置为active状态作为主
VGMP三大特性:
特性 | |
监测故障
| 二层接口:监控VLAN接口,根据VLAN所加入的接口判断 三层接口:直接监测接口,IP link,BFD |
状态切换 | |
流量引导
| 三层接口:调整ospf的接口cost值,有接口出故障cost置65500 二层接口:调整VGMP组的优先级 |
监测链路故障
一共存在四种模式:
双机热备组网 | 支持场景 | 故障监控 | 流量引导 |
防火墙路由模式,上下行都为路由模式 | 主备/负载 | 接口/IP link/BFD | ospf修改cost值影响选路 |
防火墙路由模式,上下行都为交换模式 | 主备/负载 | VLAN接口 | 主用VLAN切换至备用时会down一下,再up,刷新二层Mac地址,知道新的主在哪 |
防火墙交换模式,上下行都为路由模式 | 只为负载 | 接口/IP link/BFD | ospf修改cost值影响选路 |
防火墙交换模式,上下行都为交换模式 | 只为主备 | VLAN接口 | 主用VLAN切换至备用时会down一下,再up,刷新二层Mac地址,知道新的主在哪 |
VGMP状态切换
两台防火墙之间的VGMP状态主备切换的具体交互过程及动作分以下三种情况:
因接口或链路故障引起的切换
这一类故障发生时,主设备通过VGMP报文将状态信息和本端优先级立即发送到备设备,备设备比较报文中的优先级和本机优先级,如果满足切换条件将立即切换,瞬间完成业务流量的切换。
因整机或心跳链路故障引起的切换
这种故障发生时,由于主设备无法发送状态通知消息到备机,因此只能依靠备机检测到心跳报文(VGMP Hello报文)超时才能发现故障,因此切换时间为三个心跳报文周期。
抢占流程
故障恢复后的切换流程,由于备设备处于正常转发状态,等主机故障恢复后再切换回去,因此基本上不会影响业务。
主备模式下的切换
负载分担下的主备切换
VGMP状态机
启用双机热备功能后,各VGMP组进入Initialize(初始化)状态。
1) 启用Active组后,Active组的状态由Initialize切换成Active。
2) 启用Standby组后,Standby组的状态由Initialize切换成Standby。
3) 本端VGMP组监控的接口故障时,状态由Active切换成ActiveToStandby,并发送VGMP请求报文给对端设备的VGMP组。
4) 本端VGMP组收到对端的VGMP请求报文,发现自身优先级高,则将状态由Standby切换成Acitve,并发送VGMP确认报文给对端设备的VGMP组。
5) 本端VGMP组收到对端的VGMP确认报文,确认本端需要进行状态切换,则本端的VGMP组状态由ActiveToStandby切换成Standby。
6) 对端VGMP组确认本端的VGMP组不需要进行状态切换或连续三次没有回应本端的VGMP请报文,则本端的VGMP组状态由ActiveToStandby切换成Active。
7) 本端VGMP组监控的接口故障恢复后,如果本端VGMP组优先级高于对端且配置了抢占功能,则本端VGMP组状态由Standby切换成StandbyToAcitve,并向对端发送VGMP请求报文。
8) 本端VGMP组收到对端的VGMP请求报文,发现对端优先级高,则将状态由Active切换成Standby,并发送VGMP确认报文给对端设备的VGMP组。
9) 本端VGMP组收到对端的VGMP确认报文,确认本端需要进行状态切换,则本端的VGMP组状态由StandbyToAcitve切换成Active,完成抢占过程。
10) 对端VGMP组确认本端的VGMP组不需要进行状态切换或连续三次没有回应本端的VGMP请报文,则本端的VGMP组状态由StandbyToAcitve切换成Standby。
本文出自 “hcietea” 博客,请务必保留此出处http://hcietea.blog.51cto.com/9642637/1974899
原文地址:http://hcietea.blog.51cto.com/9642637/1974899