一般在网络中,都会考虑网络的健壮性,之前我给web服务器做负载均衡的时候,也会给调度器做一个冗余,用到的也是常用的VRRP虚拟路由冗余协议。做冗余是为了保障单个节点出现故障时,有另一个backup顶替上去使得服务不会出现瘫痪,给用户带来不好的体验。
这里说的主要是网路设备的冗余,但其实原理都相似的:
在交换网络中,主要两大类冗余:
为了防止核心层断电导致网络的大规模瘫痪,通常情况下会采取双电源的冗余,由芯片来控制电源进行负载均衡。
引擎的冗余:交换引擎是交换机的核心,所以在核心层通常也会扩展引擎。
设备的堆叠:常见的交换机扩展,分清级联和堆叠的区别:
静态路由的冗余:前面说过静态路由,配置过浮动路由。就是地址一条权重更低的路由,当主路由出问题的时候换到设置好的权重低的路由,这就是静态路由的冗余。
动态路由因为本身会根据网络自动学习调整,所有无需冗余,只需要设计一条备用线路就行。
网关是一个网段到另一个网段的大门,通常有两种方式配置:
这里我们说一下网关的冗余,如果网关的设备出问题了,那么这个网段所有的主机都不能和外界通信了。
通常我们会创建一个虚拟的网关(IP),而在这个虚拟的网关背后,有两个真正的网关(ip),外界看到是虚拟的ip,而真正工作的其实还是背后的其中一个。
实现这个功能的协议有:
VRRP工作流程
:
在 VRRP 中有三种状态:
他们的简单工作过程是这样的:
对终端有一个虚拟网关,终端设置网关时便设置为虚拟网关的 IP 地址,而在虚拟网关后有多台设备,Master 设备作为主要工作者,他会告诉所有设备此时他是领导者,他的 IP 地址、Mac 地址是多少,只要发到虚拟网关的数据包都发送给他,由他转发。一旦 Master 故障了,Backup 马上接替工作告知其他设备,今天它是领导,所有发往虚拟网关的数据包都给他。
具体的工作流程是这样的:
1.开启功能
在设备启动了 VRRP 功能之后,设备进入初始化的状态。当连接其他设备的接口处于 UP 的状态之后,设备会先查看自己的优先级值,若是小于 255 则首先将自己切换到 Backup 的备份状态。
2.切换第一个状态
在启动了 VRRP 之后有一个 Master_Down_Interval 计时器也随之启动开始计时(因为主路由一旦启动便会主动的为备用路由发送消息,告知它还是正常的,若是备用路由有一段时间没有收到这样的消息了,他就会发包去询问主路由的情况如何,而这个计时器便是计算这个时间间隔所用的),在 VRRP 中该时间的默认值为 3 秒,计时器一旦超时了便会认为网络中的 Master 的失效了、不工作了、偷懒了或者是故障了。
3.选举 Master
同一个工作组的其他设备收到 VRRP 的通告之后就会获取报文中的信息由此来做这样的判断(假设其他设备处于 Backup 的状态,下文讨论 Master 的状态):
收到的报文中设备的优先级高于自己的优先级,并且自己此时本就是 Backup 的状态,便保持状态不变
收到的报文中设备的优先级低于自己的优先级,便去检查自己是否开启了抢占模式:
若是自己开启了抢占模式,那么将自己切换成 Master 的状态
若是自己没有开启抢占模式,并且此时自己又是 Backup 的状态,那么则保持状态
一般在配置时有先后顺序,首先配置的设备按照这样的过程便成为了 Master。但是若是同一个工作组中有多台设备,而设置又是同时配置,那么此时会出现这样的特殊情况,一开始大家都没有收到 Master 的通过(因为大家都处于 Backup 的状态),所以大家都切换成 Master 的状态,然后相互发送通告。
通告中 Master 设备的优先级高于自身设备的优先级,则将自己修改为 Backup 的状态;
通告中 Master 设备的优先级低于自身设备的优先级,保持状态,不做任何的改变;
通告中 Master 设备的优先级与自身设备的优先级相同,那么便对比 Master 的 IP 地址:
若是对方 IP 地址大于自己的 IP 地址那么将自己切换成 Backup 的状态
若是对方 IP 地址小于自己的 IP 地址那么将保持自己的 Master 状态
当然这里还有这样的一种特殊情况就是虚拟网关的 IP 地址就是他自身的 IP 地址,那么经过初始化状态状态之后直接将自己切换为 Master 状态。
4.发送通告
作为 Master 的设备会非常的繁忙,他们会做这样的人一些事情:
只要发送向虚拟 IP 地址的 ARP 请求都会转发给他,由他做出响应。
如果发送向虚拟 IP 地址的 IP 数据报文请求,他会直接丢包,因为是虚拟 IP 地址,是逻辑意义上的一台设备,但是若是这个虚拟 IP 地址就是其本身的 IP 地址,他会以自己的身份去响应。
在局域网中是通过数据帧传递消息,通过 MAC 地址找到这台虚拟网关设备,需要通过他转发数据与其他网络通信,Master 负责转发数据
最后 Master 还有最重要的事情需要做,就是定时的向其他设备发送通告,在通告中富含有设备的优先级情况以及自己的工作状态,其他的备用设备收到通告之后由此来判断设备能否胜任工作。
其中这个定时的时间间隔叫做 Advertisement_Interva 通告区间。有个 Timer 来计时,一旦超时就发送通告然后重置 Timer,如此反复。其默认值是一秒。
5.Master 的变化
当 Master 因为负载过高或者其他等等的情况会主动放弃 Master 的状态,此时 Master 发送的通告中会将自己的优先级设置为 0。这样备份设备收到数据包之后就会将自己切换成 Master。而通过这样情况来切换成 Master 的时间叫做 Skew time。这个时间的值:Skew time=(256-备份设备的优先级值)/256
还有一种情况也就是 Master 设备真的出故障了,没办法工作了。Backup 设备中的 Master_Down_Interval 计时器超时了,便知道主设备无法工作了,因为他都没有办法给我发送报文了肯定是出事了,所以会将自己切换成 Master。而上文中说它的默认值是 3s。
VRRP配置网关冗余:
r1(config)#inter e0/1
r1(config-if)#ip address 202.205.1.1 255.255.255.0
r1(config-if)#no shutdown
r1(config-if)#exit
r1(config)#inter lo 0
r1(config-if)#ip address 202.203.1.1 255.255.255.0
r1(config-if)#no shutdown
r1(config-if)#exit
r1(config)#inter e0/0
r1(config-if)#ip address 202.204.1.1 255.255.255.0
r1(config-if)#no shutdown
r1(config-if)#exit
配置ospf路由:
r1(config)#router ospf 10
r1(config-router)#network 202.203.1.0 0.0.0.255 area 0
r1(config-router)#network 202.204.1.0 0.0.0.255 area 0
r1(config-router)#network 202.205.1.0 0.0.0.255 area 0
r2
r2(config)#inter e0/0
r2(config-if)#ip address 202.204.1.2 255.255.255.0
r2(config-if)#no shutdown
r2(config-if)#inter e0/1
r2(config-if)#ip address 192.168.1.2 255.255.255.0
r2(config-if)#no shutdown
r2(config-if)#exit
r2(config)#router ospf 10
r2(config-router)#network 202.204.1.0 0.0.0.255 area 0
r2(config-router)#network 192.168.1.0 0.0.0.255 area 0
r3
r3(config)#inter e0/0
r3(config-if)#ip address 202.205.1.2 255.255.255.0
r3(config-if)#no shutdown
r3(config-if)#exit
r3(config)#inter e0/1
r3(config-if)#ip address 192.168.1.3 255.255.255.0
r3(config-if)#no shutdown
r3(config-if)#exit
r3(config)#router ospf 10
r3(config-router)#network 202.205.1.0 0.0.0.255 area 0
r3(config-router)#network 192.168.1.0 0.0.0.255 area 0
pc1
pc1(config)#inter e0/0
pc1(config-if)#no switch
pc1(config-if)#ip address 192.168.1.4 255.255.255.0
pc1(config-if)#no shutdown
pc1(config-if)#exit
pc1(config)#no ip routing
pc1(config)#ip default-gateway 192.168.1.2
配置之后,此时是可以ping通r1的环回地址,但是当r2出问题之后,pc便ping不通了,这就是单点故障。
配置 VRRP
r2
r2(config)#inter e0/1
r2(config-if)#vrrp 1 ip 192.168.1.1
r2(config-if)#vrrp 1 priority 100
r2(config-if)#vrrp 1 preempt
r2(config-if)#no shutdown
r2(config-if)#exit
r3
r3(config)#int e0/1
r3(config-if)#vrrp 1 ip 192.168.1.1
r3(config-if)#vrrp 1 priority 80
r3(config-if)#vrrp 1 preempt //开启抢占模式
r3(config-if)#no shutdown
r3(config-if)#exit
在pc上重新设置网关:
pc1(config)#inter e0/0
pc1(config-if)#ip default-gateway 192.168.1.1
开启了抢占模式之后,一旦原 Master 设备回复正常能在第一时间将自己修改为 Master,把当前替补的设备踢回 Backup 的状态。
查看vrrp:
r3#show vrrp