网关冗余与负载分担
读这篇文档之前,请读者先理清有关的专业术语和名词,尤其其中的同义词和并列词。
还要知道,人们之所以把计算机中的一些非常简单的逻辑复杂化,形成一个难以理解的协议,是由于“电脑实在没人脑聪明”,cpu对逻辑语言的计算能力实在有限,所以只能把一个简单逻辑拆分成更多更简单的逻辑让计算机识别。
网关的概念在企业网中有多种含义,本章主要探索交换层(本地接入网)的网关。
首跳冗余性协议FHRP(first hop redundancy protocols)包括:
1.热备份路由器协议HSRP(hot standby router protocol)。
2.虚拟路由冗余协议VRRP(virtual router redundancy protocol)。
3.网关负载均衡协议GLBP(gateway load balancing protocol)。
它们是工作在接入层与汇聚层(交换与路由)之间的网关路由器或多层交换机上的网关协议。其中HSRP和VRRP的功能机制基本相同但只能实现网关备份,GLBP既能备份网关又能均衡负载(充分利用资源)。
先给大家普及一下需要用到的底层知识:
一般来说,一个网段就是一个子网(即使某一主类网没划分子网,它也可以看成是一子网网段)。一般一个子网内有以下设备:若干个主机,若干个二层交换机,若干个网关(它们是分层的,即交换机连接主机和网关)。可以看出,一个子网网络属于交换层,在子网中流量是通过mac地址来“寻路”的(子网内的主机之间通讯前通过发送arp广播来获取对方mac),其中交换机帮助转发流量。当主机想要与子网外的PC或服务器通讯,它不需要知道对方的mac,只要知道该子网的网关mac(由arp获得)就行,将信息流量发给网关,剩下的事情交给网关解决就行(路由到其他子网)。所以一台主机刚开始需要知道自身ip地址,对方电脑ip地址以及网关ip地址这三个基本信息才能正常通讯。
然后暂且先附上一张关于三个协议的表格(方便之后返回查看):
HSRP | VRRP(模仿HSRP) | GLBP |
思科私有RFC2281 | IEEE标准RFC3768 | 思科私有 |
UDP1985 | IP协议112(端口号) | UDP3222 |
224.0.0.2 | 224.0.0.18(通告地址) | 224.0.0.102 |
每组通常2台网关 | 最多16个网关 | 最多4个网关 |
最多16组? | 最多255组(每个路由器) | 最多1024组 |
0000.0c07.acXX | 0000.5e00.01XX(虚拟mac) | 0007.b4XX.XXYY |
1个活跃和备份(其余候选) | 1个主用,若干备用 | 1个AVG若干AVF |
一个ip一个mac | 一个ip一个mac | 一个ip多个mac |
虚拟ip与接口ip不同 | 虚拟ip可与接口ip相同 | 虚拟ip与真接口ip不同 |
可追踪接口或对象 | 只可追踪对象 | 只可追踪对象 |
默认hello 3s,hold 10s | 默认hello 1s,有skew时间 | 默认hello 3s,hold 10s |
明文认证 | 明/密文认证 | 明文认证 |
好了,先来聊聊HSRP和VRRP。理想化的情况下子网中有一台路由器充当网关,它的一个接口的ip充当网关ip。为了防止单点故障,子网中又添加了几个备用网关(处于闲置状态)。为了使故障发生后其中一个备用网关能够自动切换成主用(活跃)网关,才诞生了这两个网关冗余协议。
因为站在子网内的主机的角度,子网内只能存在一个网关,不然流量就不知道该发向哪一个网关了(不知为什么,交换层不能自动负载均衡,必须选出唯一的路径,而路由表中只要AD和metric相同就会出现负载均衡)(优先级相同就比较接口ip)。所以这个冗余机制的基本思想是:将多个路由器组合成一个虚拟网关(一个备份组),它有一个虚拟ip和一个虚拟mac。子网内的主机们只知道有一个(虚拟)网关的存在,并不知情真实网关的情况。而所有通往子网外的流量只经过这个组中的某一个路由器(竞选选出)。其余备份网关处于不工作状态但一直监听active/master的工作状态,在必要时刻替代它的角色。
HSRP与VRRP的三个重要区别:
一:HSRP组内通常只放2台网关,一台active一台standby,若不止两台,再添入的网关都保持在初始状态(可以给备份做备份,但客户难以接受);VRRP中却有一台master和若干个backup。
二:备份组正常运行时active与standby之间默认间隔3秒相互发送hello包(包含:active信息,standby信息,自身信息,认证口令,时间参数等信息)(有点类似BPDU)(组播地址映射mac地址)以维护组内关系,而master默认间隔一秒向外发送hello包,backup只接收不发送。
三:standby的默认holdtime是3*3+1=10秒(可手动改),backup的默认holdtime=3*1+(skew)秒,其中skew=(256-priority)/256(取值范围0到1,与优先级反比)。!!注意,此区别与前两个区别有重要联系,以为HSRP组中只有一台standby,holdtime到期后自觉上任,但VRRP组中有多个backup,holdtime到期后并不要竞选出某一个去上任,因为优先级最大的backup的holdtime最小!
此外HSRP默认关闭抢占而VRRP默认开启,所谓的的抢占机制就是确保备份组中优先级最大的网关成为active/master(前提是网关连接子网的接口没有出错,即可以向其他网关发送hello包)。在非抢占情况下备份网关收到active/master的hello包中更大的优先级也不会去抢占它。给一副拓扑图:
该图也适用于glbp。接下来实现网关备份的具体过程:
若这些PC的ip都在同一个子网内,那给这个子网分配一个网关备份组(组编号)将若干路由器(不同协议有数量限制)加入到这个组中给这个组分配唯一的一个虚拟ip(即该子网内随便一个主机号),系统给这个组自动分配一个虚拟mac(注:虚拟ip可以与路由器接口真实ip在同一子网,也可以是接口真实ip所在子网下再划分的子网的主机号~)。将每台PC的网关ip都手动设置成这个虚拟ip(因为在交换层“寻路”都是通过mac地址,PC解析这个ip时,备份组回复给它虚拟mac值,同时备份组告诉交换机这个虚拟mac指向active/master)(!!!二层交换机“寻路”依靠mac地址表中的三个条目:PC的mac,网关接口mac,邻居交换机接口mac),由此PC向外通讯都将数据帧中目的mac字段值写为该虚拟mac。
Active/master有两种情况被取代。第一种情况:因备份网关的holdtime到期后接任;第二种情况:Active/master所追踪的对象“挂了”导致自降优先级至小于某台开启了抢占的备份机,于是被抢占。
当然,这幅物理拓扑图可以按组划分为多幅逻辑图,即有多个子网多个备份组,一台PC只能加入一个组但一个网关可以加入到多个组中。!注:若网关是多层交换机则可以使用SVI(switch virtual interface),为每个vlan安排一个备份组,在SVI下设置ip。
!!补充实验:
问题描述:子网内只有一个多层交换机充当网关,要实现网关的链路冗余,即使用EC将连接多层交换机的两个接口捆绑在一起(路由器貌似做不到)。拓扑图:
这是用Packet Tracer模拟实验的截图,可以看出,子网中只有vlan1但出现了“环路”,其实是因为EC逃避了stp计算(注:EC只能在交换网中玩儿)。
GLBP。GLBP除了提供冗余还可以让组中所有成员共同承担流量的转发。它的具体思想如下:
前期与HSRP一样,将多个物理网关加入到一个备份组中。组中的成员都叫AVF(active virtual forwarder)(顾名思义,所有AVF都负责转发数据),其中某一个AVF还叫做AVG(active virtual gateway)(竞选而来)。该组有一个虚拟ip但有多个虚拟mac地址:AVG给每个AVF分配一个虚拟mac。当备份组对应的子网内的某个PC解析虚拟ip时,AVG返回其中的一个虚拟mac。
这里有一个简单易懂的循环负载分担算法:当收到一个个PC发来的arp时,AVG在自己的虚拟mac列表中按顺序循环的分发这些地址给PC,以保证每个AVF所负责的PC数量相同(或相差不超过一台)。
其实用HSRP或VRRP也能实现负载分担,方法是:将多个物理网关共同加入到多个组,每个组虚拟ip都属于同一个子网,物理网关在不同组有不同角色,为每个PC分配不同的网关ip(其实一个子网可以有多个网关,关键看给PC设置的网关ip,但一个PC只能有一个对应网关)。但这个方法配置工作量很大,因此才出现了GLBP。
!!!补充知识:
【1】 FHRP的配置都是在接口下(除了多层交换机的svi)。网关因此知道,这个接口连接的是该接口ip所在的子网。
【2】 FHRP的认证机制是为了防止恶意网关加入到某个备份组中。和动态路由协议的认证原理相同,都是相互hello时自动进行的。
【3】 当某vlan生成树的根桥与该vlan热备份组的active/master不是同一台多层交换机时,可能会产生次优路径(同理于没有备份组只有唯一网关的子网)。
【4】 数据流量从互联网回来的时候,可能从active/master走也可能从备份网关走(假如它们都将子网宣告进路由协议)。
以上就是FHRP机制原理详解。若发现遗漏或错误之处,还请自行纠正。欲求更多信息请登录思科官网查询。(www.cisco.com)