​​摘要:大规模分布式系统中的故障无法避免。当 DN 发生单点故障时,恢复手段有哪些,又是如何恢复的,本节重点介绍操作 gs_ctl build 是如何修复 DN 单点故障的。

本文分享自华为云社区《华为云数仓备机DN重建,快速修复DN单点故障!》,原文作者:welblupen。

1. 技术背景

GaussDB(DWS)的 DN 高可用架构为主、备、从备架构。即在分布式环境中,完整的集群数据采用分片技术分布在多个 DN 组上,每组 DN 承担一个数据分片,包括:一个主 DN、一个备 DN 和一个从备 DN。主和备各有一份完整的数据,从备上一般不存储数据,仅在备机故障时做数据的暂存,当备机故障恢复之后,为了保持集群数据的一致性,需要备机连接主机进行数据和 xlog 日志的拷贝。

2. 备机 DN 需要进行重建的场景

2.1. 主机发生单点故障之后,备机进行 failover 升主,原主降备,集群降级;待原主故障恢复后,可能会导致主备机 WAL 日志 CRC 校验失败,CM 系统检测到该状态后会自动通过备机重建的方式进行自动备机重建。

 

2.2. 备机发生单点故障之后,备机状态变为 unknown,集群降级,待备机故障恢复之后,需需要进行备机重建操作同主机同步数据。

3. 备机 DN 重建的操作分类

3.1. 增量重建: gs_ctl build -b incremental -Z datanode

 

用途:

增量 build 可修复常见的主机或实例故障导致的备机日志分叉问题,也可修复部分数据文件丢失的问题,在重建过程中发生主机异常,可以手动回退有损恢复。

 

过程:

  • 获取差异文件:通过解析 Xlog 日志获取主备 DN 差异文件

  • 备份与恢复:对主备差异文件进行严格进行原子化恢复和备份,过程中出错可恢复,排除错误后,可再次调用重入

  • 传输文件:由备机创建指定(1-16)个线程从主机拉取差异文件

  • 完成增量重建等待 xlog 日志落盘

 

分析:

增量重建是,根据 Xlog 日志计算主备 DN 差异文件,将文件发送给备 DN,在备机数据没有损坏的情况下快速进行增量重建,代价较小。

 

3.2. 全量重建: gs_ctl build -b full -Z datanode

 

用途:

备机全量重建能够修复绝大多数数据和日志损坏或丢失的场景,但修复时间比增量 build 更长

 

过程:

  • 获取差异文件:使用依据硬件调优的 CRC-32C 系列算法获取主 DN 上相应文件的 CRC 校验值,同时本地也进行对应操作,二者比较获得差异文件列表

  • 备份与恢复:默认无原子化,但会尝试进行原子化恢复,忽略恢复结果成败

  • 传输文件:由备机创建指定(1-16)个线程从主机拉取差异文件

  • 完成增量重建等待 xlog 日志落盘

 

分析:

全量重建是一种以主 DN 文件为基准,备 DN 文件同其进行校验,如果备 DN 文件的某个文件块校验不一致,则主机将此文件块发给备 DN。与全量清理重建相比较,拷贝的数据量和 WAL 日志量都更少,代价中等。

 

3.3. 全量清理重建: gs_ctl build -b fullcleanup -Z datanode

 

用途:

与 full 模式区别为:同步前需要清理 DN 主机的数据目录。能够修复绝大多数数据和日志损坏或丢失的场景,但修复时间比其他模式更长

 

过程:

  • 清理备机数据文件:备机清空数据目录,保留配置文件

  • 主机向备机传输全量镜像:主机使用单个线程将自己的数据目录除了配置文件外,全部发给备机

  • 完成全量重建等待 xlog 日志落盘

 

分析:

全量清理重建是备机清空数据目录,保留配置文件,向主机发送全量重建请求,主机将自己的数据目录除了配置文件外,全部发给备机,重建后启动备机,代价较大。

4. 总结

备机 DN 重建功能主要目的是单点故障修复,备机重建方式按照实现分为全量重建,全量清理重建和增量重建,均和主 DN 进行交互。当 DN 出现单点故障时,操作人员应该根据实际损坏程度和资源消耗选择合适的重建方法进行备机的数据重建。

 

想了解 GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的 PB 级数仓黑科技~

 

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