[转帖]一文读懂keepalive的工作原理

一文,读懂,keepalive,工作,原理 · 浏览次数 : 0

小编点评

**概念解释:** * **VRRP(Virtual Router Redundancy Protocol):**虚拟路由器冗余协议,是一种为了避免路由器单点故障的容错协议。 * **虚拟路由器:**多个路由器组成一个虚拟路由器,使用虚拟IP与外网交互。 * **虚拟IP:**虚拟路由器分配的IP地址,用于路由器之间通信。 * **Master和Backup路由器:**虚拟路由器中运行着Master和Backup路由器,分别为主和备份。 * **Master路由器:**负责路由器组的管理,拥有最高优先级。 * **Backup路由器:**负责备份路由器,拥有最低优先级。 * **VRRP通告报文:**虚拟路由器向外网发送的信息,用于配置路由器的IP地址。 * **VRID(Virtual Router ID):**虚拟路由器的标识,唯一标识了一个虚拟路由器。 * **VRRP认证:**虚拟路由器使用认证方式确保其合法性。 **keepalived进程:** * **启动三个进程:**主进程,监控其他子进程,负责vrrp通信checker子进程,检测服务状态。 * **监控vrrp通信:**主进程通过vrrp通信checker子进程监控虚拟路由器的通信状态。 * **发送降级通告:**如果虚拟路由器不可用,主进程发送降级通告,通知其他路由器。

正文

keepalive是基于vrrp协议实现接入层高可用组件,避免系统的单点故障。

工作原理

要想理解keepalive的原理,就需要理解vrrp协议的工作原理。

概念解释:

Vrrp(Virtual Router Redundancy Protocol),虚拟路由冗余协议,一种为了避免路由器单点故障的容错协议。

网络架构如下图:

工作原理

  • 多个路由器组成一个路由器组,即虚拟路由器。如图RouterA和RouterB组成一个虚拟路由器。
  • 虚拟路由器使用虚拟IP与外网交互(如图中VIP),虚拟MAC与内网交互(如图中VMAC)
  • 获得VIP的路由器为主路由器(Master状态),其他路由器为备份路由器(Backup状态);
  • 主路由器每隔 advertisement_intervl 秒(对应图中配置项 advert_int),向组内其他路由器发送通告消息(即心跳),告知本路由器的优先级等信息;
  • 组播的方式发送,组播地址224.0.0.18。
  • 只有主路由器会响应ARP请求,组内其他路由器会丢弃ARP请求;
  • 只有主路由器会响应对虚拟IP请求,组内其他路由器会丢弃对虚拟IP的请求;

主备切换

虚拟路由器中的Master可以切换(即VIP切换到备份路由器上),切换方式分为3种:

Master路由器退出该路由器组

  • Master路由器在vrrp消息中将本路由器的优先级设置为0,表示原Master设备声明不参与该VRRP组了;
  • Backup路由器接收到这个消息后,会等待 skew_time(偏移时间,= (256-backup_priority)/256),切换为Master状态

Master路由器降低自身优先级

  • Master路由器在vrrp消息中将本路由器的优先级降低,小于Backup路由器优先级(但不为0);
  • 这时Backup路由器会丢弃该消息;如果是抢占模式,会立即切换为Master状态;如果是非抢占模式,仍保持Backup状态;

Backup超时未收到vrrp消息

  • Backup路由器在超过一定时间(Master_down_interval=3*advert_int + skew_time)未收到Master的vrrp消息时,会切换为Master;

常见问题

当 Router A 和 Router B 无法正常通信时, 可能存在2个Master路由器,即“脑裂”。

解决方案:

  1. 核查A和B之间的网络,关闭防火墙或者配置好ip,Router之间保证网络通畅
  2. 使用2条线路连接2个路由器,一条坏了时,另一条备用
  3. 主节点编写脚本测试网络情况;如果网络不通,则关闭keepalived进程;
  4. Master路由器宕机后,立即告警,人为介入处理。

扩展知识

VRRP协议栈

vrrp协议栈

上述标红的几个字段是关键字段,都会出现在 keepalive 的配置文件中。

  • Version:VRRP协议版本号,RFC3768定义了版本2.
  • Type:该字段指明了VRRP报文的类型,RFC3768只定义了一种VRRP报文,那就是VRRP通告报文,所以该字段总是置为1,若收到的VRRP通告报文拥有非1的类型值,那么会被丢弃。
  • Virtual Rtr ID:也就是我们上面介绍过的VRID,一个VRID唯一地标识了一个虚拟路由器,取值范围是[1,255],所以一台路由器的接口可以同时运行最多255个VRRP实例,此字段没有缺省值,必须人为设定。
  • Priority:优先级,在一个虚拟路由器中用来选取Master路由器和Backup路由器,值越大表明优先级越高,此字段共有8个bit,取值范围[1,254],若没有人为指定,缺省值是100。其中,VRRP协议会将IP地址拥有者路由器的该字段永远设置为255,若人为指定为其它值,也不会影响VRRP协议的默认行为,即IP地址拥有者路由器的该字段总是255。另外,此字段设置为0会出现在下面这种情形中,当Master路由器出现故障后,它会立刻发送一个Priority置0的VRRP通告报文,当Backup路由器收到此通告报文后,会等待Skew time时间,然后将自己切换为Master路由器,其中Skew time=(256-Backup路由器的优先级)/256,单位为秒,例如若Backup路由器的优先级为100,那么Skew time=156/256=0.609秒,对于主路由器来说,Skew time并没有实际意义,虽然cisco的路由器也会计算并显示出来。
  • Count IP Addrs:VRRP通告报文中包含的IP地址数量,这个字段其实就是为一个VRRP虚拟路由器所分配的IP地址的数量,
  • Auth Type:认证类型字段,是一个8位的无符号整数,一个虚拟路由器只能使用一种认证类型,如果Backup路由器收到的通告报文中认证类型字段是未知的或和本地配置的不匹配,那么它将丢弃该数据包。目前支持3种认证方式:无认证,简单字符,和MD5认证。
  • Adver Int::此字段规定了Mater路由器向外发送VRRP通告报文的时间间隔,以秒为单位,取值范围是[1,255],若没有人工配置,缺省为1秒。
  • Checksum:整个VRRP报文的校验和,计算过程中,将Checksum字段置为0,计算完成后将结果填入此字段。若希望进一步了解Checksum的计算,可以查看RFC1071(CKSM)。
  • IP Address:此字段存放3个VRRP虚拟路由器的虚拟IP地址,配置了几个就封装几个,在上面的cisco实例中我们配置了三个,那么VRRP通告报文就会封装3个。
  • Authentication Data:RFC3768中规定,此字段只是为了向RFC2338兼容,在实际的封装时,全置为0.,接收方也会忽略此字段。

虚拟MAC地址

组成方式是00-00-5E-00-01-{VRID},前三个字节00-00-5E是IANA组织分配的,接下来的两个字节00-01是为VRRP协议指定的,最后的VRID是虚拟路由器标识,取值范围[1,255]。

VRID

虚拟路由器标识,在同一个VRRP组内的路由器必须有相同的VRID

其他

Keepalive内置了一个模块,可以通过配置文件操作内核,向ipvs添加规则,创建LVS。这又是另一个关键组件,就不在本节讨论了。

keepalived进程

keepalived启动时有3个进程:

  • 主进程,监控其他子进程
  • vrrp子进程,负责vrrp通信
  • checker子进程,检测服务状态;如果服务不可用,则通知vrrp子进程,发降级通告

写在最后

对于常用组件,我们不但需要知道如何用,更要知道它的底层原理,在遇到问题是可以事半功倍。希望通过本文可以让大家对keepalive有更深入的了解。

与[转帖]一文读懂keepalive的工作原理相似的内容:

[转帖]一文读懂keepalive的工作原理

keepalive是基于vrrp协议实现接入层高可用组件,避免系统的单点故障。 工作原理 要想理解keepalive的原理,就需要理解vrrp协议的工作原理。 概念解释: Vrrp(Virtual Router Redundancy Protocol),虚拟路由冗余协议,一种为了避免路由器单点故障的

[转帖]一文读懂GaussDB(openGauss) 的六大关键技术特性

https://www.314idc.com/article/5238906720560318 发布日期:2022-07-29 07:43:22 浏览量 :254 GaussDB(openGauss)是深度融合华为在数据库领域多年的经验,结合企业级场景需求,推出的新一代企业级分布式数据库,支持集中式

[转帖]一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍

https://www.jianshu.com/p/9e150d72ffc9 本文分为两个部分,第一是详细讲解Redis6的--bigkeys选项相关源码是怎样实现的,第二部分为自己对--bigkeys源码的优化项目redis-bigkey-online的介绍。redis-bigkey-online

[转帖]一文读懂Linux内核中的并发和竞争

https://zhuanlan.zhihu.com/p/561865798 内核中的并发和竞争简介 在早期的 Linux内核中,并发的来源相对较少。早期内核不支持对称多处理( symmetric multi processing,SMP),因此,导致并发执行的唯一原因是对硬件中断的服务。这种情况处

[转帖]一文读懂美国的出口管制

https://zhuanlan.zhihu.com/p/568211990 一年多前小白写过一文读懂什么是制裁?,这篇出口管制的文章其实也是酝酿了很久,终于跟小白的粉丝们见面了,喜欢请记得点赞收藏哦♥️♥️♥️。 简单来说,出口管制主要管制美国的物项,不能“落入”某些不符合美国经济外交国家安全利益

[转帖]一文读懂容器存储接口 CSI

https://zhuanlan.zhihu.com/p/470093908 作者 | 惠志来源 | 阿里巴巴云原生公众号 导读:在《一文读懂 K8s 持久化存储流程》一文我们重点介绍了 K8s 内部的存储流程,以及 PV、PVC、StorageClass、Kubelet 等之间的调用关系。接下来本

[转帖]一文读懂 K8s 持久化存储流程

https://zhuanlan.zhihu.com/p/128552232 作者 | 孙志恒(惠志) 阿里巴巴开发工程师 导读:众所周知,K8s 的持久化存储(Persistent Storage)保证了应用数据独立于应用生命周期而存在,但其内部实现却少有人提及。K8s 内部的存储流程到底是怎样的

[转帖]一张图读懂阿里云数据库架构与选型

https://www.cnblogs.com/zhoujinyi/p/16289252.html 背景 阿里云RDS已经发展超过十年,在演进的过程中,其架构和规格已经变得比较复杂,本文尝试通过一张架构图,较为完整的概况RDS所支持的主要的架构类型、规格,帮助开发者从高可用、成本、可靠性等角度选择适

[转帖]一文带你搞懂xxl-job(分布式任务调度平台)

https://zhuanlan.zhihu.com/p/625060354 前言 本篇文章主要记录项目中遇到的 xxl-job 的实战,希望能通过这篇文章告诉读者们什么是 xxl-job 以及怎么使用 xxl-job 并分享一个实战案例。 那么下面先说明什么是 xxl-job 以及为什么要使用它。

【转帖】读懂什么是RDMA

一.什么是RDMA 1.RDMA主要体现 2.如何理解RDMA和TCP技术的区别? 3.使用RDMA的好处包括: 二.什么是RoCE? 1. RDMA协议包含: Infiniband(IB) 2. 为什么RoCE是目前主流的RDMA协议? RoCEv1 RoCEv2 RoCE,无损先行 一.什么是R