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

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

一、前言

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

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

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

参考链接:

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

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

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

假设如下:

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

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

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

三、集群拓扑示例

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

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

四、整体流程分析

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

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

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

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

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

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

五、CM Server备机升主

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

六、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实例的仲裁可同时进行,分步骤的时间如下:

七、小结

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

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

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

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

  1. etcd mysql集群_Etcd单节点扩容为三节点集群

    Etcd单节点扩容为三节点集群 参考文档 http://www.cnblogs.com/breg/p/5728237.html 开始环境是单节点,存储数据一段时间后发现需要集群高可用环境,幸亏etcd ...

  2. rabbitmq基础5——集群节点类型、集群基础运维,集群管理命令,API接口工具

    文章目录 一.集群节点类型 1.1 内存节点 1.2 磁盘节点 二.集群基础运维 2.1 剔除单个节点 2.1.1 集群正常踢出正常节点 2.1.2 服务器异常宕机踢出节点 2.1.3 集群正常重置并 ...

  3. Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)

    Docker 集群管理 Docker 集群管理 镜像仓库管理 DockerHUb仓库管理 什么是DockerHUb 账号注册和登陆 Docker客户端登录 管理镜像 推送镜像 仓库镜像测试 regis ...

  4. 向基于Linux的Oracle RAC 10g集群添加新节点

    在多数业务中,Oracle真正应用集群 (RAC) 配置的主要业务要求是整个系统中数据库层的可伸缩性 - 这样,当用户数增加时,可将额外实例添加到该集群来分发该负载.     在Oracle RAC ...

  5. redis 集群_Redis集群管理

    阅读文本大概需要10分钟. 1.简介 Redis在生产环境中一般是通过集群的方式进行运行,Redis集群包括主从复制集群和数据分片集群两种类型. *主从复制集群提供高可用性,而数据分片集群提供负载均衡 ...

  6. 互动赠书 | 云上云下K8s多集群如何实现集群管理和安全治理的一致体验?

    作者|郝树伟(流生) 以 Kubernetes 为代表的云原生技术不仅屏蔽了各个云厂商和数据中心在基础设施上的差异性,还使得应用可以在不同的云上使用标准化的方式描述和部署运行.在此基础之上,我们才可以 ...

  7. K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路

    K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 文章目录 K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 1.Node节点资源不足可能会产生的故障 2.Node节点 ...

  8. 还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM

    简介: 为了让开发者.用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁.阿里云共同发起并开源了 OCM(Ope ...

  9. Citus分布式方案(七)- 集群管理

    目录 (七)集群管理 选择集群的大小 1. 分片的数量 2. 多租户SaaS 3. 实时分析 初始硬件大小 1. 多租户SaaS 2. 实时分析 集群扩容 1. 添加一个数据节点 2. 在不停机的情况 ...

最新文章

  1. python中的list和array的区别及相互转化
  2. 武汉轻工大学计算机学院操作系统复试题目,2016年武汉轻工大学数学与计算机学院计算机组成原理复试考研复试题库...
  3. camunda流程定义表无数据_BPM - 业务流程管理
  4. Php中跳转语句goto,phpgoto语句
  5. Spring注解解析
  6. XSSFWorkbook 设置单元格样式_openpyxl3.0官方文档(25)—— 使用样式
  7. 网络管理与维护作业4
  8. 通过DriverManager接口获取连接
  9. 大一计算机上机考试模拟试题,计算机等级考试二级上机模拟试题(1)
  10. Visa在全球范围内增加对女足的投入
  11. 5600高流明更清晰 NEC CF6600U投影试用
  12. 解决resetFields报错 underfined
  13. H5+JS+CSS3 实现圣诞情缘--学习心得2
  14. java tapestry_Tapestry简介- 转载 (转自java-cn)
  15. 屏蔽google adsense和百度推广的广告
  16. python request下载文件时、显示进度以及网速_实时网速显示_实例_python
  17. [1101]flink常用参数说明
  18. SDN 交换机迁移1
  19. esaywechat 微信公众号jsapi支付
  20. [转载] 老鼠夹的寓言

热门文章

  1. MyBatis 自定义 typeHandler
  2. node全局对象 文件系统
  3. HTML5 画布变换
  4. Bootstrap 标准的分页导航
  5. ROS Rviz 显示地图 Python
  6. python网络验证系统_python3+django2 开发易语言网络验证(下)
  7. Android提权root漏洞,【转】结合init源码剖析android root提权漏洞(CVE
  8. python reduce求和_Tensorflow 的reduce_sum()函数到底是什么意思,谁能解释下?
  9. db2设置数据库增量备份_DB2在线增量备份 还原增量备份及前滚恢复
  10. IDEA中jsp页面写out.println会报错?