# 容灾最佳实践
#### 容灾实现原理
容灾实现原理说明：
- 主实例与灾备实例之间日志传输通过流式全量/增量build的方式复制。
  图1容灾原理图   
  ![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002512864145.png "点击放大") 
- 初始全量数据的同步：通过对主实例进行全量备份的方式恢复到灾备实例。
- 增量日志同步：按照全量备份提供的LSN（日志序列号）点，主实例启动归档线程往灾备实例首备(Main Standby)节点的数据盘写入增量数据；灾备实例首备(Main Standby)节点持续从数据盘读取日志，并实时执行回放。
- 数据一致性：主实例定期创建一致性点（barrier点），灾备实例所有节点按照一致性点控制日志回放进度，从一个一致性点恢复到另一个一致性点。
 
#### 约束与限制
- 分布式实例仅混合部署形态支持容灾，并且需要保证主备实例的节点数量相同。
- 搭建容灾关系时，灾备实例的存储空间必须大于或等于主实例的存储空间。若主实例的数据超过灾备实例的存储空间，搭建容灾时会因空间无法承载而导致实例异常。
- 搭建容灾关系的主实例与灾备实例数据库引擎版本必须相同，且需为V2.0-2.0及以上版本。
- 搭建容灾关系的主实例与灾备实例在创建实例时，"M兼容表名大小写"的配置必须保持一致。"M兼容表名大小写"的默认配置是大小写敏感，如果参数设置不一致，则无法搭建容灾。
- "副本一致性协议"为"paxos"的实例，仅1主1备1日志形态支持容灾搭建。
- 在主实例和灾备实例处于Normal状态时可搭建容灾关系。在主实例处于Normal状态并且灾备实例已经升主的情况下，主实例可执行容灾解除，其他实例状态不支持。
- 灾备实例处于非Normal且非Degraded状态时无法升主，无法作为灾备实例继续提供容灾服务，需要修复或重建灾备实例。
- 容灾关系搭建后，灾备实例不支持全备、增备和差备，主实例支持全备、增备和差备。如果主实例要恢复到自身，需要先解除容灾关系，在完成恢复后重新搭建容灾关系。
- 搭建容灾关系的主实例与灾备实例之间不支持参数修改的同步。
- 容灾主实例恢复到新实例，容灾用户不会自动删除，需要手动删除容灾用户。
- 容灾主备关系切换时，如果主实例宕机，需要手动启动灾备实例恢复到正常模式，对外提供服务。
 
#### 前提条件
- 在两个不同的区域（Region）中分别创建GaussDB实例，一个作为主实例，另一个作为灾备实例。创建实例的步骤请参见[购买GaussDB实例](https://support.huaweicloud.com/usermanual-gaussdb/gaussdb_01_080.html)。
- 选择[新建工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/createIndex)至"云专线"，提交专线开通申请，打通两个Region下的VPC网络。请根据实际实例类型选择相应的放通策略。
  表1分布式实例防火墙端口放通策略 
  | 源设备           | 源端口         | 目的端口（侦听）                                                                                                                   | 协议  | 端口说明                               |
  |:---|:---|:---|:---|:---|
  | 主实例CN与灾备实例CN | 1024～65535 | 数据库CN端口号+1， 默认：8001                                                        | TCP    | 灾备实例的CN组件通过该端口与主实例的CN组件进行通信。       |
  | 灾备实例DN首备与级联备  | 1024～65535  | 数据库DN端口号+1， 默认：{40001, 40021, 40041, ..., 40001 + (n-1) \* 20}（n表示数据库分片数） | TCP    | 灾备实例的DN组件通过该端口与主实例的DN组件进行通信。  |
  | DN主备          | 1024～65535  | 数据库DN端口号+5， 默认：{40005, 40025, 40045, ..., 40005 + (n-1) \* 20}（n表示数据库分片数）  | TCP   | 主备实例之间心跳连接请求。                |
  | 主实例与灾备实例数据节点    | 1024～65535   | 12016                                                                                                                      | TCP | 主备实例agent通信端口。                      |
  | Ping 检查连通性  | /          | /                                                                                                                          | ICMP | 主实例与灾备实例数据连通性检测。                    |
     
  表2集中式实例（Quorum协议）防火墙端口放通策略 
  | 源设备            | 源端口         | 目的端口（侦听）                                                        | 协议    | 端口说明                         |
  |:---|:---|:---|:---|:---|
  | 灾备实例DN首备与级联备  | 1024～65535 | 数据库DN端口+1， 默认：8001 | TCP     | 灾备实例的DN组件通过该端口与主实例的DN组件进行通信。 |
  | DN主备          | 1024～65535  | 数据库DN端口+5， 默认：8005 | TCP  | 主备实例之间心跳连接请求。                  |
  | 主实例与灾备实例数据节点 | 1024～65535 | 12016                                                              | TCP  | 主备实例agent通信端口。                |
  | Ping 检查连通性     | /           | /                                                                | ICMP | 主实例与灾备实例数据连通性检测。             |
     
  表3集中式实例（Paxos协议）防火墙端口放通策略 
  | 源设备                  | 源端口          | 目的端口（侦听）                                                             | 协议    | 端口说明                                                            |
  |:---|:---|:---|:---|:---|
  | DN主备                 | 1024～65535 | 数据库DN端口+6， 默认：8006 | TCP  | 基于流式复制的异地容灾解决方案中灾备实例DN首备和级联备之间复制的连接端口，DN级联备连接DN首备，DN主备之间心跳连接请求。 |
  |  主实例与灾备实例数据节点 | 1024～65535    | 12016                                                             | TCP | 主备实例agent通信端口。                                                  |
  | Ping 检查连通性           | /            | /                                                                   | ICMP | 主实例与灾备实例数据连通性检测。                                                |
     
  
 
#### 搭建容灾关系
1. [登录管理控制台](https://console.huaweicloud.com)。
2. 在页面左上角单击![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002511038231.png)，选择"数据库 \> 云数据库 GaussDB"，进入云数据库 GaussDB信息页面。
3. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002511038223.png)，选择主实例所在区域。
4. 在"实例管理"页面，单击主实例名称进入"基本信息"页，在"网络信息"模块的"子网"处，获取主实例的子网段信息。
   
   图2主实例子网段信息   
   ![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002510958201.png "点击放大")
   
   
   
5. 单击管理控制台左上角的![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002478878294.png)，选择灾备实例所在区域。
6. 在"实例管理"页面，单击灾备实例名称进入"基本信息"页，在"配置信息"模块的"容灾IP"处获取灾备实例的"容灾IP"，在"网络信息"模块的"子网"处，获取灾备实例的子网段信息。
   
   图3灾备实例容灾IP和子网段信息   
   ![](https://support.huaweicloud.com/bestpractice-gaussdb/figure/zh-cn_image_0000002478878304.png "点击放大")
   
   
   
7. 在灾备实例"基本信息"页，"配置信息"模块的"容灾IP"处，单击"重置配置"，填写[4]中获取到的主实例的子网段信息，单击"确定"。
8. 在主实例"基本信息"页，"配置信息"模块的"容灾IP"处，单击"重置配置"，填写[6]中获取到的灾备实例的子网段信息，单击"确定"。
9. 在主实例所在控制台，单击左侧导航栏的"容灾管理"，在页面右上方单击"搭建容灾关系"。
10. 填写相关参数，勾选确认信息。 
    表4灾备参数 
    | 参数          | 说明                                                                                          |
    |:---|:---|
    | 灾备类型          | 灾备的方式。 当前仅支持流式容灾。 |
    | 主实例        | 需要容灾的实例，即容灾主实例。                                                                              |
    | 灾备实例容灾IP     | 容灾IP可以从灾备实例的基本信息页获取，参考[6]。                      |
    | 灾备实例数据库账户名   | 容灾账户，该账户主要用于容灾过程中主实例和灾备实例鉴权，账户名称默认为灾备实例的root。                                              |
    | 灾备实例数据库账户密码 | 填写灾备实例实例管理员账号的密码。                                                                          |
       
    
    
11. 单击"确定"开始搭建容灾关系，可在"容灾管理"页面查看任务状态，当任务状态显示为"正常"时，表示容灾关系搭建成功。
 
