KeepAlived-学习总结(keepalived、vrrp)

文章目录

  • 官方网站
  • KeepAlived简介
  • VRRP协议
    • 相关术语
    • VRRP备份组
      • 优先级问题
      • 工作方式(分两种)
      • 认证方式(可选项,安全网络可以不设置,分三种)
      • 定时器(分两种)
    • VRRP报文
    • VRRP工作过程
    • VRRP状态机
    • VRRP选举机制
    • VRRP应用(基于IPv4)
  • Keepalived组件
  • Keepalived进程
  • Keepalvied的工作原理

官方网站

  • 主页面:https://www.keepalived.org/index.html
  • 下载页面:https://www.keepalived.org/download.html
  • 帮助文档页面:https://www.keepalived.org/documentation.html

KeepAlived简介

  • Keepalived是用C语言编写的路由软件
  • Keepalived软件起初是为LVS负载均衡设计的软件,专门用来管理并监控LVS集群系统中各个服务节点的状态。起初是根据TCP/IP参考模型的3、4、5层交换机制,来检测每个服务器的节点状态;如果某个服务器出现异常,或者工作出现故障,keepalived将检测到,并将出现故障的服务器节点从集群系统中剔除,keepalived完成的这些工作都是自动完成的,不需要人为干预,需要人工完成的只是修复出现故障的服务节点。
  • 后来又加入了可以实现高可用的VRRP功能。Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP【Virtual Router Redundancy Protocol】即虚拟路由器冗余协议的缩写。VRRP出现的目的就是为了解决静态路由单点故障问题的,通过VRRP可以实现网络不间断稳定运行。因此keepalived通过添加VRRP功能,一方面本身具有服务器状态检测和故障隔离的功能,另外一方面也具有了高可用集群的功能。

VRRP协议

  • VRRP:【Virtual Router Redundancy Protocol】虚拟路由冗余协议,是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。
  • 单点失效现象:在真实网络环境中,主机之间的通信都是依靠访问静态路由或者默认网关来完成的,然而在主机之间的路由器一旦发生故障,主机之间的通信就会失败,在这种通信模式中,路由器就成了一个单点瓶颈,即为单点失效现象
  • 如何解决单点失效:VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
  • VRRP协议的实现有VRRPv2和VRRPv3两个版本。其中,VRRPv2基于IPv4,VRRPv3基于IPv6。VRRPv2和VRRPv3在功能实现上并没有区别,只是应用的网络环境不同。

相关术语

  • VRRP备份组:VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。
  • Master路由器:虚拟路由器中承担报文转发任务的路由器。
  • Backup路由器:Master路由器出现故障时,能够代替Master路由器工作的路由器。
  • 虚拟路由器:虚拟路由器是VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。
  • 虚拟IP地址:虚拟路由器的IP地址。一个虚拟路由器可以拥有一个或多个IP地址。
  • 虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址。虚拟MAC地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC地址。
  • IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者。
  • VRID:虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器。
    KeepAlived-学习总结(keepalived、vrrp)_第1张图片
    如上图所示,Router A、Router B和Router C组成VRRP备份组,充当一个虚拟路由器。
    此虚拟路由器有自己的IP地址和MAC地址。

VRRP备份组

优先级问题

  • VRRP根据优先级来确定备份组中每台路由器的角色(Master路由器或Backup路由器)。
  • 优先级越高,则越有可能成为Master路由器。
  • 优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给特殊用途来使用,255则是系统保留给IP地址拥有者。
  • 当某一台路由器为IP地址拥有者时,其优先级始终为255。因此,当备份组内存在IP地址拥有者时,只要其工作正常,则为Master路由器。

工作方式(分两种)

  • 非抢占方式:如果备份组中的路由器工作在非抢占方式下,则只要Master路由器没有出现故障,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
  • 抢占方式:如果备份组中的路由器工作在抢占方式下,它一旦发现自己的优先级比当前的Master路由器的优先级高,就会对外发送VRRP通告报文。导致备份组内路由器重新选举Master路由器,并最终取代原有的Master路由器。相应地,原来的Master路由器将会变成Backup路由器。

认证方式(可选项,安全网络可以不设置,分三种)

为了防止非法用户构造报文攻击备份组,VRRP通过在VRRP报文中增加认证字的方式,验证接收到的VRRP报文

  • 无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。
  • 简单字符认证【Simple】:发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是真实、合法的VRRP报文;否则认为接收到的报文是一个非法报文。
  • MD5认证【MD5】:发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行摘要运算,运算结果保存在Authentication Header(认证头)中。收到VRRP报文的路由器会利用认证字和MD5算法进行同样的运算,并将运算结果与认证头的内容进行比较。如果相同,则认为接收到的报文是真实、合法的VRRP报文;否则认为接收到的报文是一个非法报文。

定时器(分两种)

  • VRRP通告报文时间间隔定时器:VRRP备份组中的Master路由器会定时发送VRRP通告报文,通知备份组内的路由器自己工作正常。用户可以通过设置VRRP定时器来调整Master路由器发送VRRP通告报文的时间间隔。如果Backup路由器在等待了3个间隔时间后,依然没有收到VRRP通告报文,则认为自己是Master路由器,并对外发送VRRP通告报文,重新进行Master路由器的选举。
  • VRRP抢占延迟时间定时器:为了避免备份组内的成员频繁进行主备状态转换,让Backup路由器有足够的时间搜集必要的信息(如路由信息),Backup路由器接收到优先级低于本地优先级的通告报文后,不会立即抢占成为Master,而是等待一定时间(即抢占延迟时间后),才会对外发送VRRP通告报文取代原来的Master路由器。

VRRP报文

  • VRRP报文:在VRRP备份组间传递的数据单元,用来检测虚拟路由器的各种参数,同时还可以用于Master路由器的选举。-
  • VVRRP报文是封装在IP报文中,通过Master路由器定时以组播的方式传送的。也就是说VRRP协议跟ICMP协议一样,工作在第三层(路由层),它是不具有端口的说法的。
  • 由于VVRRP报文是封装在IP报文中,所以根据IP的分类,分为IPv4和IPv6两种形式:即VRRPv2基于IPv4(下方图1),VRRPv3基于IPv6(下方图2)
    KeepAlived-学习总结(keepalived、vrrp)_第2张图片
    KeepAlived-学习总结(keepalived、vrrp)_第3张图片
字段 内容
Version 协议版本号:VRRPv2对应的版本号为2;VRRPv3对应的版本号为3
Type VRRP报文的类型:VRRPv2和VRRPv3报文只有一种类型,即VRRP通告报文(Advertisement),该字段取值为1
Virtual Rtr ID(VRID) 虚拟路由器号(即备份组号),取值范围1~255
Priority 路由器在备份组中的优先级,取值范围0~255,数值越大表明优先级越高
Count IP Addrs/Count IPv6 Addrs 备份组虚拟IP地址的个数;1个备份组可对应多个虚拟IP地址
Auth Type 认证类型;该值为0表示无认证,为1表示简单字符认证,为2表示MD5认证;VRRPv3不支持MD5认证
Adver Int 发送通告报文的时间间隔;VRRPv2中单位为秒,缺省为1秒;VRRPv3中单位为厘秒,缺省为100厘秒
Checksum 16位校验和,用于检测VRRP报文中的数据破坏情况
IP Address/IPv6 Address 备份组虚拟IP地址表项;所包含的地址数定义在Count IP Addrs/Count IPv6 Addrs字段。
Authentication Data 验证字;目前只用于简单字符认证,对于其它认证方式一律填0

VRRP工作过程

  1. 路由器使用VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master路由器,优先级低的成为Backup路由器。Master路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;Backup路由器则启动定时器等待通告报文的到来。
  2. 在抢占方式下,当Backup路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master路由器;否则将保持Backup状态。
  3. 在非抢占方式下,只要Master路由器没有出现故障,备份组中的路由器始终保持Master或Backup状态,Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器。
  4. 如果Backup路由器的定时器超时后仍未收到Master路由器发送来的VRRP通告报文,则认为Master路由器已经无法正常工作,此时Backup路由器会认为自己是Master路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出Master路由器,承担报文的转发功能

VRRP状态机

VRRP备份组中的路由器规定了3种状态:

  • INITIALIZE:即路由器初始态
    • 设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。
    • 设备处于在此状态时,不会对VRRP报文做任何处理。
  • MASTER:即路由器处于主用状态,也就是在VRRP备份组中真正起作用的路由器;当路由器处于Master状态时,它将会做下列工作:
    • 设置定时通告定时器,定期发送VRRP通告报文
    • 用VRRP虚拟MAC地址响应路由器IP地址的ARP请求
    • 转发目的MAC是VRRP虚拟MAC的数据包
    • 如果是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,否则丢弃
    • 当收到shutdown的事件时删除定时通告定时器,发送优先值级为0的通告包,转初始化状态
    • 如果定时通告定时器超时时,发送VRRP通告报文
    • 收到VRRP通告报文时,如果优先值为0,发送VRRP通告报文:否则,判断数据的优先级是否高于本机,或相等而且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;否则的话,丢弃该通告包
  • BACKUP:即路由器处于备用状态,是MASTER的备份路由器;当路由器处于Backup状态时,它将会做下列工作:
    • 接收Master发送的VRRP报文,判断Master的状态是否正常
    • 对虚拟IP地址的ARP请求,不做响应
    • 丢弃目的MAC地址为虚拟MAC地址的IP报文
    • 丢弃目的IP地址为虚拟IP地址的IP报文
    • Backup状态下如果收到比自己优先级小的报文时,丢弃报文,不重置定时器;如果收到优先级和自己相同的报文,则重置定时器,不进一步比较IP地址
    • 当Backup接收到MASTER_DOWN_TIMER定时器超时的事件时,才会转为Master
    • 当接收到接口的Shutdown事件时,转为Initialize
      KeepAlived-学习总结(keepalived、vrrp)_第4张图片

VRRP选举机制

VRRP使用选举机制来确定路由器的状态(Master或Backup)

  1. 虚拟路由器和VRRP备份组中路由器都有自己的lP地址(虚拟路由器的lP地址可以和VRRP备份组内的某个路由器的接口地址相同)。如果VRRP组中存在lP地址拥有者,即虚拟地址与某台VRRP路由器的地址相同时,IP地址拥有者将成为主路由器,并且拥有最高优先级255。
  2. 如果VRRP备份组中不存在IP地址拥有者。VRRP路由器将通过比较优先级来确定主路由器。
    路由器可配置的优先级范围为1~254,默认情况下VRRP路由器的优先级为100。
  3. 当优先级相同时,VRRP将通过比较IP地址来进行选举,lP地址大的路由器将成为主路由器。
  4. 当组内的备份路由器一段时间(Master_Down_Interval)内没有接收到来自主路由器的报文,则将自己转为主路由器。一个VRRP组里有多台备份路由器时,短时间内可能产生多个Master,此时,路由器将会将收到的VRRP报文中的优先级与本地优先级做比较。从而选取优先级高的设备做Master。

VRRP应用(基于IPv4)

  1. 主备备份
    主备备份方式表示转发任务仅由Master路由器承担。当Master路由器出现故障时,才会从其他Backup路由器选举出一个接替工作。主备备份方式仅需要一个备份组,不同路由器在该备份组中拥有不同优先级,优先级最高的路由器将成为Master路由器
    KeepAlived-学习总结(keepalived、vrrp)_第5张图片
    根据上图,初始情况下,Router A为Master路由器并承担转发任务,Router B和Router C是Backup路由器且都处于就绪监听状态。如果Router A发生故障,则备份组内处于Backup状态的Router B和Router C路由器将根据优先级选出一个新的Master路由器,这个新Master路由器继续向网络内的主机提供路由服务。

  2. 负载分担
    在路由器的一个接口上可以创建多个备份组,使得该路由器可以在一个备份组中作为Master路由器,在其他的备份组中作为Backup路由器。负载分担方式是指多台路由器同时承担业务,因此负载分担方式需要两个或者两个以上的备份组,每个备份组都包括一个Master路由器和若干个Backup路由器,各备份组的Master路由器各不相同。同一台路由器可以同时加入多个VRRP备份组,在不同备份组中有不同的优先级。
    KeepAlived-学习总结(keepalived、vrrp)_第6张图片
    根据上图:
    备份组1:对应虚拟路由器1:Router A作为Master路由器,Router B和Router C作为Backup路由器。
    备份组2:对应虚拟路由器2:Router B作为Master路由器,Router A和Router C作为Backup路由器。
    备份组3:对应虚拟路由器3:Router C作为Master路由器,Router A和Router B作为Backup路由器。
    为了实现业务流量在Router A、Router B和Router C之间进行负载分担,需要将局域网内的主机的缺省网关分别设置为虚拟路由器1、2和3。在配置优先级时,需要确保三个备份组中各路由器的VRRP优先级形成交叉对应。

Keepalived组件

KeepAlived-学习总结(keepalived、vrrp)_第7张图片
看图:由下自上,由左至右

  • Kernel Sapce:内核空间(2部分)

    • IPVS:keepalived起初本就是给lvs开发的
    • NETLIKN:Netlink 是一种进程间通信机制,用于内核与用户空间通信的机制;Netlink是一种异步全双工的通信方式,它支持由内核态主动发起通信,内核为Netlink通信提供了一组特殊的API接口,用户态则基于socket API,内核发送的数据会保存在接收进程socket 的接收缓存中,由接收进程处理。同时Netlink具有非常好的高级路由框架和子系统功能。
      User Space:用户空间(4部分)
  • Control Plane:控制平台,通过编写配置文件keepalived.conf完成对Keepalived配置;控制平台含有自主设计的编译器设对配置文件进行解析。配置文件是以关键字为内容的树形结构设置的。

  • Core componets :核心组成模块(7部分)

    • IPVS wrapper:该模块用来实现IPVS功能,负责将设置好的IPVS规则发送的内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。
    • Netlink Reflector:与 IPVS wrapper功能类似,是负责与内核Netlink通信的模块。通过配置keepalived中的网络设置,然后与内核Netlink通信,实现真实IP地址和接口的设置与监视。同时利用子系统还可以设置VRRP的VIP。另一方面,根据内核Netlink消息传递广播的特性,可以将端口消息实时反馈给用户数据中。
    • Checkers:这是Keepalived最基础的功能,也是最主要的功能,可以实现对服务器运行状态检测和故障隔离。此模块也是由核心父进程监控下独立运行的Healthchecking子进程。
    • SMTP:发送管理通知邮件的模块
    • System call:该模块提供了根据系统脚本启动额外功能的特性。Checkers模块中主要用于MISC检查器中。 在VRRP Stack模块中,它提供了在协议状态转换期间启动额外脚本的功能。 该模块运行在分支进程中,不会影响全局调度计时器。
    • Watchdog:是计算机可靠领域中极为简单又非常有效的检测工具,Keepalived正是通过它对Healthchecking子进程和VRRP子进程进行监控的。
    • VRRP Stack:这是keepalived后来引用VRRP功能,可以实现HA集群中主备切换功能。负责完成负载均衡器之间的高可用性;此功能;与IPVS功能是分开的,可以单独使用,因为VRRP实现的进程的是通过核心父进程监控下独立运行的子进程。
  • SchedulerI/OMultiplexer:是一个I/O复用分发调度器,它负载安排Keepalived所有内部的任务请求;因为Keepalived是一个单一进程,所以需要将所有事件都安排在同一进程中。

  • Memory Mngt:该模块是一个内存管理机制,提供了访问内存(例如内存分配,重新分配,释放等)一些通用方法。

Keepalived进程

keepalived在运行时,会启动3个进程,分别为:
父进程与2个子进程

  • 父进程:核心进程,负责主进程的启动,维护和全局配置文件的加载,同时监控子进程
  • 子进程:Healthchecking,负责健康检查
  • 子进程:VRRP,负责VRRP协议的实现
  • keepalived进程格式:
    PID
    111 Keepalived <-- Parent process monitoring children
    112 _ Keepalived <-- VRRP child
    113 _ Keepalived <-- Healthchecking child

Keepalvied的工作原理

Keepalived工作在TCP/IP参考模型的三层、四层、五层:

  • 网络层(3):是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。
  • 传输层(4):Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。
  • 应用层(5):可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

你可能感兴趣的:(Linux运维-企业实战)