数仓集群管理:单节点故障RTO机制分析

摘要:大规模分布式系统中的故障没法避免。发生单点故障时,集群状态和业务是如何恢复的?

本文分享自华为云社区《GaussDB (DWS) 集群管理系列:单节点故障RTO机制分析(集群状态恢复篇)》,原文做者:CloudGanker 。架构

1、前言

GaussDB(DWS)产品采用分布式架构设计。集群管理(高可用)须要在稳定性和灵敏性之间作好平衡。并发

集群发生单节点故障(如宕机、断网、下电等)时,端到端业务恢复的RTO (Recovery Time Objective)流程和指标,主要包含两大过程:集群状态恢复(CM Server主备倒换,DN/GTM主备倒换)和业务恢复(CN可正常执行业务)。分布式

本文关注集群状态恢复部分,剩余部分后续单独分析。架构设计

参考连接:设计

GaussDB (DWS) 集群管理系列:CM组件介绍(架构和部署形态)
GaussDB (DWS) 集群管理系列:CM组件介绍(核心功能)3d

2、假设条件和关键配置参数

一般状况下故障CN自动剔除的触发时间较长(默认10分钟),所以本文不涉及CN剔除和实例修复的流程,也不讨论CN故障时DDL业务的中断。orm

假设以下:server

  1. 除明确故障外(如节点已经宕机),连接可在超时时间内成功创建(即创建连接时间按超时时间计算)
  2. 消息传递不消耗时间
  3. DN/GTM执行failover时间不超过 T_{\rm failover}Tfailover​ (一般小于5秒)

关键配置参数以下:
【CM侧配置参数】实例心跳超时instance_heartbeat_timeout(默认30秒), 后续用 T_{\rm hb}Thb​ 表示。blog

说明:因为C/C++语言中乘法和除法不知足结合律,本文涉及运算均为整数运算。部署

3、集群拓扑示例

忽略CN的部署,如下图所示的三节点集群为例:

  • 两个cm_server实例,主备分别部署在节点1和节点2
  • 两个GTM实例,主备分别部署在节点1和节点2
  • 一组DN实例,主备从分别部署在节点1,节点2和节点3
  • 每一个节点上均部署cm_agent组件

4、总体流程分析

当节点1故障,集群将短期处于不可用状态,而后自动恢复至降级状态,随后可在CN上正常执行业务。所以,RTO流程的讨论可分为四个阶段。

1)单节点故障发生,集群处于不可用状态,cm_server/GTM/DN处于无主状态

2)cm_server备机升主,GTM/DN等待仲裁

3)GTM/DN备机(并行)升主,集群恢复至降级状态

4)CN连接至GTM和DN,正常执行业务

以故障发生时刻为0时刻点,下面逐个分析每一个阶段并计算相关时间。

5、CM Server备机升主

单节点故障发生后,集群管理组件出于稳定性考虑,并不会马上感知故障状态。两个cm_server实例之间通讯时,根据心跳判断对方的存活状态。若是两者间心跳超时,则进入以下的自仲裁流程(对端连接均指与另外一个cm_server的连接)。

6、DN/GTM备机升主

集群管理的仲裁采用被动触发的形式。每一个cm_agent检测所在节点的实例状态,并按期上报(固定间隔1秒)至主cm_server;主cm_server综合各实例状态进行仲裁,而后将必要的仲裁结果发送至相关cm_agent;cm_agent收到仲裁结果,执行相应的命令。

以某个主 DN 故障为例,一次典型的仲裁流程包括:

① CM Agent 1探测DN主实例并发现故障
② CM Agent 1持续上报实例故障信息至CM Server
③ CM Server执行仲裁流程,选择DN备机升主
④ CM Server下发升主命令至CM Agent 2
⑤ CM Agent 2对实例执行升主操做

对于单节点故障,DN和GTM实例的仲裁可同时进行,分步骤的时间以下:

7、小结

将CM Server自仲裁和DN/GTM仲裁的时间相加,即为集群状态恢复的耗时(单位:秒)

用户可根据自身状况,经过调整instance_heartbeat_timeout参数选择合适的RTO指标。

 

点击关注,第一时间了解华为云新鲜技术~

相关文章
相关标签/搜索