摘要:大规模分布式系统中的故障没法避免。当DN发生单点故障时,恢复手段有哪些,又是如何恢复的,本节重点介绍操做gs_ctl build是如何修复DN单点故障的。
本文分享自华为云社区《华为云数仓备机DN重建,快速修复DN单点故障!》,原文做者:welblupen。node
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日志量都更少,代价中等。ui
3.3. 全量清理重建: gs_ctl build -b fullcleanup -Z datanode
用途:
与full模式区别为:同步前须要清理DN主机的数据目录。可以修复绝大多数数据和日志损坏或丢失的场景,但修复时间比其余模式更长url
过程:
- 清理备机数据文件:备机清空数据目录,保留配置文件
- 主机向备机传输全量镜像:主机使用单个线程将本身的数据目录除了配置文件外,所有发给备机
- 完成全量重建等待xlog日志落盘
分析:
全量清理重建是备机清空数据目录,保留配置文件,向主机发送全量重建请求,主机将本身的数据目录除了配置文件外,所有发给备机,重建后启动备机,代价较大。spa
4. 总结
备机DN重建功能主要目的是单点故障修复,备机重建方式按照实现分为全量重建,全量清理重建和增量重建,均和主DN进行交互。当DN出现单点故障时,操做人员应该根据实际损坏程度和资源消耗选择合适的重建方法进行备机的数据重建。.net
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~线程