摘要:大规模分布式系统中的故障无法避免。当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级数仓黑科技~

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


华为云开发者联盟
1.4k 声望1.8k 粉丝

生于云,长于云,让开发者成为决定性力量