一文详解Keepalived
1. 介绍
**单点故障:**单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用。
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,
它与HeartBeat、RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,与HeartBeat相比,Keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成,
Keepalived是系统高可用最简单的方式,为以后理解系统架构打下基础。
2. 网络基础知识(IP网络层、TCP传输层、HTTP应用层)
- 首先主机A将自己的IP地址和路由表里的子网掩码作“与运算”; (route -a netstat -n)
- 如果找到,则将包发给下一跳(最长匹配) (无类域间路由(CIDR)编址方案、ABCD分类IP)
- 如果没找到,则将包发给默认路由。
- 继续1、2,直到知道HostB
- 发送ARP包,查找Mail Server IP -> MAC
- 如果发生错误,回传ICMP数据包:ping、tracert
3. VRRP简介
VRRP即虚拟路由冗余协议(Virtual Router Redundancy Protocol),它是为了避免路由器出现单点故障的一种容错协议。
如图1所示,我们把多个运行着VRRP协议的路由器抽象成一个虚拟路由器(从外边来看,就像只有一个真实的路由器在工作),组成虚拟路由器的一组路由器会有一个会成为Master路由器,其余的会成为Backup路由器。
正常情况下,会由Master完成该虚拟路由器的工作。Master一旦出现故障,从Backup中选出一个成为Master继续工作,从而避免路由器单点问题。
在详细介绍VRRP协议之前,先弄清楚几个概念。
3.1 相关术语
3.1.1 VIP
VIP(Virtual IP)即虚拟IP,是一个不与特定计算机或网络接口卡相连的IP地址。
3.1.2 VRRP路由器
运行VRRP协议的路由器(或设备)。它可能属于一个或多个虚拟路由器。
3.1.3 虚拟路由器
由一组VRRP路由器组成,抽象成一个虚拟的路由器。它拥有一个虚拟路由器标识符(VRID)和一个VIP。
3.1.4 虚拟MAC地址
即虚拟路由器根据VRID生成的MAC地址。
一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}。
当虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是接口的真实MAC地址。
3.1.5 IP地址拥有者(IP Address Owner)
如果一个VRRP路由器将VIP作为 真实的接口地址,则该设备是IP地址拥有者。
当这台设备正常工作时,它会响应目的地址是VIP的报文,如ping、TCP连接等。
3.1.6 优先级(Priority)
用来标识虚拟路由器中各成员路由器的优先级。
虚拟路由器根据优先级选举出Master和Backup。
3.2 VRRP是如何工作的
当路由器配置了VRRP(VRID、VIP、优先级等信息)后,它就成了一台VRRP路由器,即组成某个虚拟路由器的一个成员路由器。
3.2.1 VRRP的工作流程
- Master选举:从VRRP组中选举一个Master,其余为Backup
- 各设备协调工作:Master负责虚拟路由器的工作,Backup负责监听Master的状态
- 故障转移:Master出现故障,回到步骤1
3.2.2 VRRP协议定义了3种状态机:
分别为初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。
3种状态相互之间的转换:
- 初始状态(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状态。
3.2.3 Master选举
VRRP根据优先级来确定虚拟路由器中每台设备的角色,Master设备或Backup设备。优先级越高,则越有可能成为Master设备。
Master选举过程如下:
- 初始创建的VRRP设备都工作在Initialize状态,当VRRP设备在收到VRRP接口Startup的消息后,如果此设备的优先级等于255(也就是所配置的虚拟路由器IP地址是本设备VRRP接口的真实IP地址),将会直接切换至Master状态,并且无需进行下面的Master选举。否则,会先切换到Backup状态,待Master_Down_Interval定时器超时后再切换至Master状态。(开始的时候并没有Master设备,则这个Master_Down_Interval定时器一定会超时)
- 首先切换至Master状态的VRRP设备通过VRRP通告报文的交互获知虚拟设备中其他成员的优先级,然后根据以下规则进行Master的选举。
1).如果收到的VRRP报文中的优先级高于或等于自己的优先级,则当前Backup设备保持Backup状态。
2).如果VRRP报文中Master设备的优先级低于自己的优先级,当采用抢占方式下(缺省为抢占方式),则当前Backup设备将切换至Master状态;当采用非抢占方式时,当前Backup设备仍保持Backup状态。 - 当有多个VRRP设备同时切换至Master状态,通过VRRP通告报文的交互进行协商后,优先级较低的VRRP设备将切换至Backup状态,优先级最高的VRRP设备成为最终的Master设备;优先级相同时,再根据VRRP设备上VRRP备份组所在接口主IP地址大小进行比较,IP地址较大的成为Master设备。
3.2.4 Master与Backup协调工作
Master设备会周期性的发送VRRP通告报文,在VRRP备份组中公布其配置信息(优先级等)和工作状态。Backup设备通过接收到Master设备发来的VRRP报文的情况来判断Master设备是否工作正常。
- 当Master设备主动放弃Master地位(如Master设备退出备份组)时,会发送优先级为0的VRRP通告报文,使Backup设备快速切换成Master设备(当有多台Backup设备时也要进行Master选举),而不用等到Master_Dwon_Interval定时器超时。这个切换的时间称为Skew_time,计算方式为:(256 -Backup设备的优先级)/256,单位为秒。
- 当Master设备发生网络故障而不能发送VRRP通告报文的时候,Bac