高可用集群架构 — N+1 模型

目录

前言

本地是对论文《服务器池的高可用 N+1 冗余结构模型》的学习记录,详细请浏览论文。

高可用集群架构

  • 一主多备架构:同一时间只有一个 Master 节点提供服务,多个 Slave 备份节点用于替换。
  • 多活架构:同一时间有多个处于 ACTIVE 状态的节点提供服务,通常结合负载均衡策略使用。

高可用集群模型模型

  • N+1 模型:有 N 个在工作,1 个空闲作为冗余。
  • N/N 模型:N 个节点中同时运行 N 个服务。

N+1 模型

服务器机群的高可用性需要靠双前端负载分配器和后端服务器池来保障,经典案例为:HAProxy + Keepalived 架构。双前端结构消除了前端单一故障点隐患,后端服务器池屏蔽了服务器的故障所引起的服务中断的情况。双前端结构是高可用机群应用最广泛的模型,许多早期的服务器都采用这种方式保证服务器可靠运行。为追求更高的可靠性,还会扩展到 3 个或更多的节点,例如:3 节点仲裁架构。

高可用系统会将某故障服务器上的工作迁移到其他节点,以保证为客户继续提供服务。服务迁移的前提就是能够及时准确地发现失效节点,即心跳检测机制。常见的心跳检测方案有信任度模型、投票模型和邻居模型,目的在于提出对多于 2 个节点的服务器池的心跳检测机制。

  • 投票模型:在运行时是一种全连通状态,网络通信量较大,不适合大型机群的应用;
  • 邻居模型:系统中只通过逻辑相邻的 2 个节点的状态就可以确定检测节点是否失效。
  • 分布式多机心跳模型:在服务器机群中利用选举机制选出一个主节点,用于检测其他从节点的健康状况。 分布式多级心跳模型的优势在于将机群服务器间复杂的全连通检测模式转变成主从模式,减少了服务器和网络资源占用。

但是,这些服务器池的容错机制建立在降低系统整体服务处理能力的基础上,故障服务器的工作量通过负载分配算法重新分配到其他可用的服务器上,这样既加重了服务器池的负载,也增加了可用服务器故障的可能性。

N+1 冗余服务器池的高可用系统可以改进服务器池的上述缺陷。N+1 模型利用了备份机不参与系统正常运行的优势,备份机总是处于初始状态,因此,由备份机接管故障服务器等于快速地重启了故障的服务器,从一定程度上说相当于对服务器系统进行了再生操作。N+1 模型通常适用于服务器池规模较小且部署在同一网段的局域网内的情况。

在典型的高可用服务器机群结构的基础上,N+1 高可用服务器池增加了一个冗余节点,为后端服务器池做冗余备份。冗余节点在 N+1 冗余结构中作为控制端出现, 服务器池中的服务器被动读取控制端的状态,进而及时调整自身动作,并接受控制端的服务检测。后端服务器通过心跳信号不断向冗余节点通告自身的健康情况,同时冗余节点也主动地发起应用层检测,这样做的目的是能够准确地了解服务器池的故障状况。

在这里插入图片描述

N+1 高可用服务器池的软件主要分布在冗余节点和服务 器池上,按照功能划分为 7 个模块:

  1. 服务检测模块,在传输层对应用服务进行检测,通过检测 TCP 连接同步是否有同步回复数据包返回,来验证基于连接的 Web 应用服务是否正常。
  2. 多元定时器模块,负责设定和维护服务器池中所有服务器的心跳超时定时器,用单定时器模拟多定时器的功能。
  3. 心跳检测模块,用于不断地接收后端服务器的心跳信息,以判断服务器池的运行状况。
  4. 节点状态发布模块,它不停地向服务器池广播冗余节点当前的运行状态,通知所有后端服务器,让它们知道服务器池是否有故障存在,进而调整它们的运行状态。
  5. 冗余节点状态检测模块,与节点状态发布模块的功能相对应,随时接收冗余节点状态的变更,以便对所在服务器的心跳信息进行调整,使之能在恢复功能后立刻重新加入服 务器池。
  6. 故障处理模块,用来处理后端服务器的故障,在发现某个服务器在一段时间内没有心跳信号,或者在应用服务端口的连接请求没有回应时,它将激活冗余节点上的备份服务, 接替故障的服务器继续提供服务,相应地也将冗余节点从冗余态切换成为替换态。
  7. 故障处理模块,用来处理后端服务器的故障,在发现某个服务器在一段时间内没有心跳信号,或者在应用服务端口的连接请求没有回应时,它将激活冗余节点上的备份服务, 接替故障的服务器继续提供服务,相应地也将冗余节点从冗余态切换成为替换态。

服务器池 N+1 冗余结构功能模块如下图所示:
在这里插入图片描述

N+1 模型关键技术

单进程多定时器的设计

在 N+1 服务器池模型中,冗余节点负责周期性地监测服务器池的 N 个服务器的状态。冗余节点的管理控制软件必须具备并行地接收所有服务节点心跳信息的能力,这样就要求该软件为每个服务节点建立和管理一个心跳定时器,通过定时器对其进行生存状态的监测。

冗余节点快速切换技术

冗余节点主要接管的资源是故障服务器的 IP 地址,故障切换的速度直接取决于 IP 地址的接管速度,因此,冗余节点快速切换的研究就是对 IP 地址接管的研究。

IP 接管的问题主要在于 ARP 的缓存功能。ARP 协议为每台主机设置临时地址映射缓存表,用于保存网络地址与物理地址的映射,方便以后取用。正是这个 ARP 缓存表给 IP 地址接管带来了麻烦。如果服务器主机故障致使无法提供服务,这时即使冗余节点动态配置了 IP 地址,也会由于其它主 机 ARP 缓存表没有及时更新而继续向故障主机发送服务请求,以至于等到 ARP 缓存表中的相应表项老化时才能真正完成 IP 接管。

解决上述问题可以从 ARP 协议本身的特点着手。ARP 协议的常见数据包有 2 种:Request 和 Reply。Request 请求指定 IP 地址的物理地址,Reply 返回 IP 地址的物理地址。请求包与回复包不需要成对地出现,ARP 协议这种特点的典型应用是 Gratuitous ARP,是指没有 Request 请求的 Reply 回复包。接收端可以无条件地接收目的地址是广播物理地址的 Reply 包,并对 ARP 缓存表做相应的更新操作。请求端也可以发送请求自身 IP 地址的 Request 包,接收端将根据 ARP Request 包的原物理地址更新 ARP 缓存表。

基于 Gratuitous ARP 的服务器池冗余结构的快速故障切换和故障恢复步骤如下图:
在这里插入图片描述

冗余节点端的管理控制软件和服务器端的代理软件均采用 Gratuitous ARP 机制加速冗余节点的 IP 接管操作和故障服务器的恢复。

服务器池多级检测机制

节点监控检测的项目包括:

  • 服务器健康状态
  • 服务进程健康状态
  • 心跳链路监控状态

因此,多级检测手段并存是十分必要的,心跳检测和应用服务检测共同构成了多级检测机制:

  • 当服务节点的心跳信号始终存在,并且其应用服务也能正常工作时,服务节点处于正常态。
  • 当心跳信号不存在,但服务仍能正常提供时,服务节点处于非冗余态。
  • 当心跳信号始终存在,应用服务不正常时,服务节点处于不可服务态。
  • 当心跳信号和服务都不工作时,服务节点处于非连通态。

服务节点和冗余节点的状态转换如下图所示:
在这里插入图片描述

冗余节点在 4 种状态之间转换,其中:接管态和归还态属于临时状态。当服务器池没有失效节点时,冗余节点处于冗余态,为服务器池做冗余备份。如果检测到服务器池有失效节点,冗余节点立刻执行接管操作,这时它进入接管状态,持续到接管操作完成。接下来,进入替换态,冗余节点接管失效服务器的工作。如果失效服务器恢复正常,冗余节点将把工作还给那个服务器,使冗余节点在切换过程中处于归还态。服务器重新加入服务器池,冗余节点又恢复到冗余态。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章