
# 通过CCR脚本迁移Doris数据到MRS集群
Doris历史元数据、增量元数据、历史数据和增量数据都是通过Syncer服务，从源集群获取Binlog ，目标集群再实时同步Binlog数据，实现全量和增量数据的迁移。
#### 约束与限制
- 使用CCR迁移数据时，Doris版本限制 Doris 2.0的最低版本为2.0.15，Doris 2.1的最低版本为2.1.6。
  
- 元数据和数据迁移过程中会占用源端资源，需避开客户业务高峰期
- 组件版本限制 Syncer版本 ≥ 目的端Doris版本 ≥ 源端Doris版本
  
- 从Syncer 2.1.8和3.0.4版本开始，Syncer不再支持Doris 2.0。
- 只支持将源端低版本Doris数据迁移至目的端高版本Doris中。
- CCR会自动创建元数据，不能提前创建元数据，否则容易导致失败。
- 参数配置详情请参见 Apache Doris官网限制[配置说明](https://doris.apache.org/zh-CN/docs/admin-manual/data-admin/ccr/config)。
 
#### 方案架构
图1Doris数据迁移   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002375085462.png "点击放大")
- 全量元数据和数据迁移：CCR任务会首先进行全量同步，将源端数据一次性完整地复制到目的端。
- 增量元数据和数据迁移：在全量同步完成后，CCR任务会继续进行增量同步，保持源端和目的端数据的一致性。
迁移方案支持各种网络选型：公网、VPN、专线等。根据实际情况选择网络方案，两端网络互通即可迁移。
表1网络方案 
| **迁移网络类型** | **优点**                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | **缺点**                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|
| 专线         | - 性能稳定：时延低至毫秒级。  - 带宽选择范围可达几十Gbit/s。  - 数据传输安全性高。                                                                                                                  | - 成本高：一般是包年包月。  - 源端和目的端私网IP地址不能重叠。  - 开通时间长：一般需提前1个月申请。   |
| VPN        | - 组网灵活，随时搭建。  - 稳定性较好，安全性较好。  - 成本适中：公网费用+VPN费用。                                                                                                                     | - 时延较高。  - 源端和目的端私网IP地址不能重叠。                                                                                                                    |
| 公网IP       | - 支持源端和目的端私网IP一致的情况下实施迁移。  - 带宽任意选择（Mbit/s\~Gbit/s）。  - 即买即用，快速绑定。  - 成本低。   | - 稳定性差：带宽可能无法全部利用，迁移速率相对较慢。  - 公网传输数据有泄漏风险。                                                                                                       |
   
#### 全量、增量元数据和数据迁移
1. 打开Doris源端和目的端的binlog配置。 
   1. 在源端Doris的"fe.conf"和"be.conf"中添加以下内容并保存：
      ```
      enable_feature_binlog=true
      ```
      
   
   2. 登录目的端MRS集群的Manager页面，选择"集群 \> 服务 \> Doris \> 配置 \> 全部配置"，在左侧导航栏选择"FE（角色） \> 自定义"。 登录MRS集群Manager页面的具体操作请参见[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
      
   
   3. 在自定义参数文件"fe.conf"中新增自定义参数"enable_feature_binlog"，值为"true"。
   
   4. 在左侧导航栏选择"BE（角色） \> 自定义"，在自定义参数文件"be.conf"中新增自定义参数"enable_feature_binlog"，值为"true"。
   
   5. 单击"保存"保存配置。单击"概览"，选择页面右上方的"更多 \> 滚动重启服务"，输入当前用户密码并单击"确定"，滚动重启Doris服务使配置生效。
   
   
   
   
2. 创建一个Linux系统的弹性云服务器，对应ECS的安全组、虚拟私有云、子网需要和迁移目的端MRS集群保持一致，具体操作请参见[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)。
   
   还需根据实际环境打通该ECS与源端Doris集群的网络。并确保ECS节点的glibc为2.28及之后版本，可执行以下命令查看glibc的版本：
   ```
   ldd --version
   ```
   
   
3. 从Doris官网[跨集群数据同步概述](https://doris.apache.org/zh-CN/docs/3.0/admin-manual/data-admin/ccr/overview#下载)中下载Syncer压缩包，例如"ccr-syncer-*\** -rc02-x64.tar.xz"，并上传至[步骤 2]创建的ECS节点的目录下。
4. 使用**root** 用户登录上传了Syncer压缩包的ECS节点，执行以下命令解压Syncer压缩包：
   
   1. 切换至压缩包所在目录：
      ```
      cd 压缩包目录
      ```
      
   
   2. 解压Syncer压缩包：
      ```
      tar -xvf ccr-syncer-*-rc02-x64.tar.xz
      ```
      
   
   3. 切换至"bin"目录下：
      ```
      cd ccr-syncer-*-rc02-x64/bin
      ```
      
   
   4. 开启需要迁移的指定数据库中所有表的binlog：
      ```
      bash enable_db_binlog.sh -h host -p port -u user -P password -d db
      ```
      其中：
      - "*host*"为连接源端Doris FE节点的服务器IP地址。
      
      - "*port*"为连接源端Doris FE节点的query_port端口号，默认为9030。
      
      - "*db*"为指定的源端Doris数据库名称。
      
      - "*user* "和"*password*"分别为连接源端Doris的用户名和密码。
       
   
   
   
   
5. 启动Syncer： 
   ```
   bash start_syncer.sh –daemon
   ```
   
   
6. 登录ECS节点，执行以下命令全量、增量迁移元数据和数据： 
   ```
   curl -X POST -H "Content-Type: application/json" -d '{
   "name": "ccr_test",
   "src": {
   "host": "源端FE IP地址",
   "port": "9030",
   "thrift_port": "9020",
   "user": "root",
   "password": "",
   "database": "db_name",
   "table": "table_name"
   },
   "dest": {
   "host": "目的端FE IP地址",
   "port": "9030",
   "thrift_port": "9020",
   "user": "root",
   "password": "",
   "database": "db_name",
   "table": "table_name"
   }
   }' http://127.0.0.1:9190/create_ccr;
   ```
   相关参数说明请参见[表2]。
   ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 迁移前不用手动创建数据库和表。
   
   - CCR任务启动后如果不停止此任务，会一直自动同步增量元数据和数据。
    
    表2CCR迁移任务参数说明 
   |   **参数**    |            **参数说明**             |        示例        |
   |---|---|---|
   | name        | CCR同步任务的名称，自定义且唯一即可。            | ccr_test         |
   | src         | 表示以下信息为源端信息。                    | -                |
   | dest        | 表示以下信息为目的端信息。                   | -                |
   | host        | Master FE IP地址。                 | 10.10.xxx.xxx    |
   | port        | 连接Doris FE节点的query_port端口号。     | 9030             |
   | thrift_port | 连接Doris FE节点的rpc_port端口号。       | 9020             |
   | user        | 访问Doris的用户名。                    | root             |
   | password    | 用户对应的密码。                        | \*\*\*\*\*\*\*\* |
   | database    | 数据库名称。                          | db_name          |
   | table       | 迁移的表名称，如果是库级别同步，"table"参数值为空即可。 | table_01         |
      
   
   
7. 使用MySQL客户端连接目的端Doris集群，执行以下命令查看迁移任务状态： 
   ```
   show restore\G
   ```
   如下图所示，"State"为"FINISHED"则表示迁移任务运行成功。
   ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002408239061.png "点击放大")
   
   
8. 数据迁移后，可使用MgC Agent校验迁移后的Doris数据的一致性，具体操作请参见[Doris数据迁移校验](https://support.huaweicloud.com/bestpractice-mrs/mrs_05_0160.html#mrs_05_0160__section0859175423814)。
 
