
# 特性概述
主备重建是GaussDB数据库服务**高可用（HA）体系** 中的核心修复特性，它通过**从主节点或完整备节点进行全量或增量同步数据**的方式，解决因备节点数据延迟、磁盘损坏、日志断裂等原因导致其与主节点数据不一致的问题，从而实现备节点的快速纳管与集群可用性的恢复。该特性是实现集群高可用性、保证数据最终一致性的关键技术保障。
#### 功能定义
通过**基于WAL日志的物理复制与回放** 技术，解决因备节点故障、宕机或数据损坏导致的**数据不一致问题** ，实现**备节点数据的自动化或手动化全量/增量重建**，确保主备集群的数据最终一致性，保障集群的持续高可用。
#### 用户场景
- **行业领域**：金融（支付、清算）、电信（计费、账务）、政务（一网通办）等对数据可靠性与服务连续性要求极高的行业。
- **业务痛点** ：
  - **硬件故障**：备节点所在服务器磁盘损坏，导致数据文件丢失或不可用。
  
  - **网络故障**：备节点长时间与主节点网络中断，积压的日志已被主节点清理，导致日志断点，无法通过常规日志回放进行同步。
  
  - **人为误操作**：在备节点上执行了误写操作，污染了数据。
   
- **常见触发条件** ：
  - 集群内HA自动恢复
    1. **WAL segment removed**：备节点所请求的日志LSN在主节点上不存在，导致主备日志复制出现脱节现象。
    
    2. **System id not match** ：备节点上记录的**system identifier** 与主节点不一致。通常发生于集群安装阶段或节点替换、升副本等有新节点加入集群中时，需要通过**全量重建**方式进行数据同步。
    
    3. **DCF log loss** ：基于dcf的一致性复制协议，当备节点发现本地记录的最大**dcf index**在主节点上不存在时，需要通过重建方式进行恢复。
     
  
  - 手动触发 在某些特殊场景下，需要手动触发重建修复的场景。
    例如：在业务高峰期下，主节点网络资源和计算资源受限，无法触发自动恢复，需要等到业务低峰期再进行重建修复的场景。
    
  
  - 集群管理流程中触发
    1. 容灾集群的搭建和加回。
    
    2. 节点修复/替换。
    
    3. 备份恢复。
     
   
 
#### 规格约束
- **兼容性** ：
  - **版本支持** ：（具体版本号请以实际发布为准）。
    表1主备重建版本支持情况 
    | 特性          | 版本                                         |
    |:---|:---|
    | 主备全量/增量重建   | GaussDB V500R001C00及以上版本                   |
    | 备机到备机的增量重建  | GaussDB 505.1及以上版本                         |
    | 异步build     | GaussDB 505.2.1 spc0800、GaussDB 507.0及以上版本 |
    | 并行重建和并行压缩重建 | GaussDB 506.0及以上版本                         |
       
    
  
  - **生态工具**：可通过OM（运维管理服务）、CM（数据库管理服务）、gs_ctl命令行工具进行操作。
   
- **性能限制** ：
  - **网络带宽**：重建过程涉及数据传输，对网络带宽存在消耗，建议避开业务高峰时段。
  
  - **主节点负载**：重建期间，主节点需要承担读取数据页和发送数据的任务，会对主节点性能产生一定影响（CPU、I/O压力增大）。
  
  - **磁盘I/O**：目标备节点需要接收并写入大量数据，在网络不受限制的场景下，磁盘I/O会是主要瓶颈。
   
- **功能约束** ：
  - **主节点唯一性**：同一时刻，CM只会让主节点为一个备节点提供重建服务（但主节点支持为多个备节点同时进行数据重建）。
  
  - **重建过程互斥**：一个备节点不能同时从两个不同的源节点进行重建。
  
  - **级联备节点**：级联备节点（Cascade Standby）的重建源只能是其直接上游节点。
   
 
#### 技术架构
GaussDB主备重建的核心架构流程如下图所示，主要涉及**CM、WAL Sender、WAL Receiver、Data Sender、Data Receiver** 和**WAL Redo**等核心组件：
图1重建流程图   
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620640597.png "点击放大")
**核心组件说明**：
- **CM**： 集群高可用管理服务。负责检测节点状态，在备节点异常时决策是否需要触发重建，并协调重建任务的开始与停止。
- **WAL Sender**： 主节点上的WAL日志发送线程。负责将重建期间产生的WAL日志数据发送到备节点。在重建任务的开始和结束，都会向备机发送一个一致性快照点（checkpoint），作为回放的起点和终点。
- **Data Sender**： 主节点上的数据发送线程。负责从磁盘读取完整的数据文件，并将其流式传输到备节点。
- **WAL Receiver**： 备节点上的WAL日志接收进程。负责接收从主节点发送来的WAL日志数据。
- **Data Receiver**： 备节点上的数据接收线程。负责接收来自主节点的数据文件，并将其写入到本地磁盘。
- **WAL Redo**： 备节点上的WAL日志回放线程。在接收完全量数据，备节点拉起后，会回放重建起点之后的所有WAL日志，最终使备节点数据与主节点完全一致。
**数据流向**：
1. **数据链路** ：全量数据文件从主节点**Data Sender** 流向备节点**Data Receiver**并落盘。
2. **日志链路** ：WAL日志从主节点**WAL Sender** 流向备节点**WAL Receiver** 并落盘，等待备节点启动后，由**WAL Redo**线程进行回放。
**决策点**：
- **重建模式选择** ：除特殊场景外，当前CM服务默认下发重建模式为**Auto Build**，优先进行增量重建，若增量重建三次失败，转全量重建。
**核心组件说明**：
- **CM**： 集群高可用管理服务。负责检测节点状态，在备节点异常时决策是否需要触发重建，并协调重建任务的开始与停止。
- **WAL Sender**： 主节点上的WAL日志发送线程。负责将重建期间产生的WAL日志数据发送到备节点。在重建任务的开始和结束，都会向备机发送一个一致性快照点（checkpoint），作为回放的起点和终点。
- **Data Sender**： 主节点上的数据发送线程。负责从磁盘读取完整的数据文件，并将其流式传输到备节点。
- **WAL Receiver**： 备节点上的WAL日志接收进程。负责接收从主节点发送来的WAL日志数据。
- **Data Receiver**： 备节点上的数据接收线程。负责接收来自主节点的数据文件，并将其写入到本地磁盘。
- **WAL Redo**： 备节点上的WAL日志回放线程。在接收完全量数据，备节点拉起后，会回放重建起点之后的所有WAL日志，最终使备节点数据与主节点完全一致。
**数据流向**：
1. **数据链路** ：全量数据文件从主节点**Data Sender** 流向备节点**Data Receiver**并落盘。
2. **日志链路** ：WAL日志从主节点**WAL Sender** 流向备节点**WAL Receiver** 并落盘，等待备节点启动后，由**WAL Redo**线程进行回放。
**决策点**：
- **重建模式选择** ：除特殊场景外，当前CM服务默认下发重建模式为**Auto Build**，优先进行增量重建，若增量重建三次失败，转全量重建。
 
