上篇文章地址:
https://blog.csdn.net/m0_57679053/article/details/155989439?fromshare=blogdetail&sharetype=blogdetail&sharerId=155989439&sharerefer=PC&sharesource=m0_57679053&sharefrom=from_link

CK 数据迁移方案(基于 clickhouse-backup)

TIP:实际操作之前务必将此文档完整阅读一遍,以防误操作导致数据迁移失败或不完整

一、迁移核心流程

整体迁移分为两大核心步骤,所有操作需严格遵循 “先备份再导入” 的顺序,多分片、多副本场景需确保每个节点同步执行对应操作:

  1. 第一步:从源 CK 集群备份数据(含配置准备、数据备份、备份校验)
  2. 第二步:将备份数据导入目标 CK 集群(含备份文件传输、目标集群准备、数据恢复、一致性验证)

二、第一步:从源 CK 集群备份数据

1. 安装 clickhouse-backup 工具

  • 适用场景:若源集群为多分片、多副本结构,所有节点必须分别安装,不可只在单个节点操作;单节点场景仅需在目标节点安装。

  • 操作步骤

    1. clickhouse-backup-1.5.2-1.x86_64.rpm安装包上传到每个源 CK 节点的指定目录(如/opt/clickhouse-backup/)。

    2. 登录每个源 CK 节点,执行安装命令:

      sudo yum localinstall -y /opt/clickhouse-backup/clickhouse-backup-1.5.2-1.x86_64.rpm
      
  • 安装验证:每个节点分别执行以下命令,确认安装成功:

    clickhouse-backup --version
    
  • 成功标准:输出版本信息(Version: 1.5.2、Git Commit: f67d23fd3b775f887683d3d3fdea1b1500419987、Build Date: 2022-08-08),示例如下:

    [root@apptest ~]# clickhouse-backup --version
    Version:         1.5.2
    Git Commit:      f67d23fd3b775f887683d3d3fdea1b1500419987
    Build Date:      2022-08-08
    

2. 配置 clickhouse-backup

  • 操作范围:源集群所有节点需分别配置,确保每个节点的备份参数与自身环境匹配。

  • 操作步骤

    1. 登录目标节点,进入默认配置文件路径:

      cd /etc/clickhouse-backup/
      
    2. 新建并编辑配置文件

      vi config.yml
      
    3. 拷贝基础配置模板(需根据现场实际环境修改,关键参数示例如下):

      clickhouse:
        host: "localhost"          # 源端 CK 地址(本地默认 localhost)
        port: 9000                 # TCP 端口
        user: "default"            # 有备份权限的用户(建议 admin)
        password: "default"               # 密码(若有)
        data_path: "/data/server/clickhouse/data/"  # 源端数据目录(与 CK 配置一致)
        metadata_path: "/data/server/clickhouse/data/metadata/"  # 源端元数据目录
      

3. 磁盘空间要求

  • 备份前必须检查每个源 CK 节点的

    备份存储目录(默认/data/backup)可用空间,要求:

    • 可用空间 ≥ 当前节点目标数据库数据总量的 1.5 倍(预留冗余,避免备份中断)。
  • 空间查询命令

    # 查看备份存储目录可用空间
    df -h /data/backup
    # 查看目标数据库数据总量(以test_migration为例)
    clickhouse-client -q "SELECT formatReadableSize(sum(bytes)) AS total_data_size FROM system.parts WHERE database = 'test_migration'"
    
  • 示例:若某节点test_migration数据库总数据量为 100GB,该节点/data/backup目录需预留至少 150GB 可用空间。

4. 执行数据备份

  • 操作范围:源集群所有节点需分别执行备份命令,建议统一备份文件名(便于后续同步)。

  • 操作步骤:

    1. 登录目标节点,执行备份命令(备份文件名为full_backup_20251113,可按需修改):

      clickhouse-backup create full_backup_20251113
      
    2. 等待备份完成:命令执行过程中会输出日志,显示备份进度,无报错则备份成功。

  • 备份文件路径:默认存储在/data/backup/目录下,备份文件名为full_backup_20251113(目录形式)。

5. 备份结果校验

  • 操作范围:源集群所有节点需分别校验,确保备份文件完整。

  • 校验步骤

    1. 查看备份列表,确认备份存在:

      clickhouse-backup list
      
    • 成功标准:输出备份文件名、大小、创建时间及存储类型(local),示例如下:

      [root@apptest ~]# clickhouse-backup list
      2025/11/14 16:20:51.561526  info SELECT value FROM `system`.`build_options` where name='VERSION_INTEGER'
      2025/11/14 16:20:51.569090  info SELECT * FROM system.disks;
      full_backup_20251114   537.52MiB   14/11/2025 01:55:02   local      
      [root@apptest ~]# 
      
    1. 检查备份文件结构,确保包含 3 个核心文件 / 目录:

      # 进入备份文件目录
      cd /data/backup/full_backup_20251113/
      # 查看目录内容
      ls
      
    • 必需文件:

      metadata
      

      目录(元数据)

      metadata.json
      

      文件(元数据配置)

      shadow
      

      目录(影子表数据),示例如下:

      [root@apptest full_backup_20251113]# ls
      metadata  metadata.json  shadow
      [root@apptest full_backup_20251113]#
      
    • 异常处理:若缺少任一文件 / 目录,需重新执行备份命令。

三、第二步:将备份数据导入目标 CK 集群

1. 备份文件跨集群传输

  • 核心要求:源集群每个节点的备份文件,需严格按 “分片 - 副本 - 节点” 一对一映射拷贝至目标集群对应节点,不可交叉传输(避免分片数据错乱)。
  • 前提准备:提前梳理源集群与目标集群的拓扑映射关系,建议用表格记录(示例如下):
源集群信息 目标集群对应信息 备份文件传输路径
分片 1 - 副本 1(IP:10.0.0.1) 分片 1 - 副本 1(IP:10.0.0.11) 10.0.0.1:/data/backup/ → 10.0.0.11:/data/backup/
分片 2 - 副本 2(IP:10.0.0.2) 分片 2 - 副本 2(IP:10.0.0.12) 10.0.0.2:/data/backup/ → 10.0.0.12:/data/backup/
分片 3 - 副本 3(IP:10.0.0.3) 分片 3 - 副本 3(IP:10.0.0.13) 10.0.0.3:/data/backup/ → 10.0.0.13:/data/backup/
  • 传输工具:推荐使用scp(简单)或rsync(支持断点续传,大文件优先)。

  • 操作步骤:(以scp为例,从源节点向目标节点传输):

    1. 登录源集群目标节点(如 10.0.0.1),执行传输命令:

      # 传输备份文件目录至目标集群对应节点
      scp -r /data/backup/full_backup_20251113/ root@10.0.0.11:/data/backup/
      
    2. 输入目标节点(10.0.0.11)的 root 密码,等待传输完成(大文件需耐心等待)。

  • 传输校验:目标集群每个节点需确认备份文件完整:

    # 目标节点执行,检查备份文件结构
    ls /data/backup/full_backup_20251113/
    
    • 标准:包含metadatametadata.jsonshadow三个核心文件 / 目录,且文件大小与源节点一致。

2. 目标 CK 集群环境准备

(1)安装 clickhouse-backup 工具
  • 操作范围:目标集群所有节点(含所有分片、所有副本)需分别安装,步骤与源集群一致。

  • 操作步骤

    1. clickhouse-backup-1.5.2-1.x86_64.rpm安装包上传到每个目标节点的/opt/clickhouse-backup/目录。

    2. 执行安装命令:

      sudo yum localinstall -y /opt/clickhouse-backup/clickhouse-backup-1.5.2-1.x86_64.rpm
      
    3. 验证安装:

      clickhouse-backup --version
      
    • 成功标准:与源集群安装验证结果一致。
(2)配置 clickhouse-backup
  • 操作范围:目标集群所有节点需分别配置,配置文件路径及核心参数与源集群一致,但需注意:
    • clickhouse.host:若目标节点 IP 与源节点不同,需设为目标节点本地 IP 或localhost
    • clickhouse.port:若目标节点 port 与源节点不同,需设为目标节点port。
  • 操作步骤:参考 “第一步 - 2. 配置 clickhouse-backup”,确保每个目标节点的config.yml参数匹配自身环境。
(3)清理目标集群目标目录
  • 操作目的:清空目标集群节点的原有数据目录,避免与恢复数据冲突。

  • 操作范围:目标集群所有节点需分别执行。

  • 操作步骤

    1. 停止 clickhouse 服务:

      sudo systemctl stop clickhouse-server.service
      
    2. 清空数据、元数据及存储目录(路径需与目标集群实际部署路径一致,默认如下):

      sudo rm -rf /data/server/clickhouse/data/data/*
      sudo rm -rf /data/server/clickhouse/data/metadata/*
      sudo rm -rf /data/server/clickhouse/data/store/*
      
    3. 重启 clickhouse 服务:

      sudo systemctl start clickhouse-server.service
      
    • 服务校验:执行sudo systemctl status clickhouse-server.service,确保服务状态为 “active (running)”。
(4)磁盘空间要求
  • 目标集群每个节点需检查

    数据存储目录(默认/data/server/clickhouse/data/)的可用空间,要求:

    • 可用空间 ≥ 对应源节点备份文件大小的 1.5 倍(预留恢复过程中的临时文件空间)。
  • 空间查询命令

    # 查看数据存储目录可用空间
    df -h /data/server/clickhouse/data/
    # 查看备份文件大小
    du -sh /data/backup/full_backup_20251113/
    
  • 示例:若源节点备份文件大小为 500MiB,目标节点/data/server/clickhouse/data/目录需预留至少 750MiB 可用空间。

3. 执行数据恢复

  • 操作范围:目标集群所有节点需分别执行恢复命令,所有节点恢复完成后统一重启服务。

  • 操作步骤

    1. 登录目标集群目标节点,执行恢复命令(–rm参数用于清理恢复过程中的冲突临时文件):

      clickhouse-backup restore full_backup_20251113 --rm
      
    2. 等待恢复完成:命令执行无报错则恢复成功(大文件需耐心等待)。

    3. 所有目标节点恢复完成后,统一重启 clickhouse 服务(确保数据加载生效):

      sudo systemctl restart clickhouse-server.service
      
    • 服务校验:执行sudo systemctl status clickhouse-server.service,确保服务正常运行。

4. 数据一致性验证

  • 验证目的:确认目标集群数据与源集群完全一致(数据量、分片分布均匹配)。

  • 操作范围:在目标集群任意节点执行查询(或在源集群、目标集群分别执行,对比结果)。

  • 验证命令

    1. 校验指定数据库表的数据总大小(以test_migration.local_data为例):

      SELECT formatReadableSize(sum(bytes)) AS total_size 
      FROM system.parts 
      WHERE database = 'test_migration' AND table = 'local_data';
      
    2. 校验分布式表各分片的数据量(以test_migration.dist_data为例):

      SELECT _shard_num, count() AS shard_data_count 
      FROM test_migration.dist_data 
      GROUP BY _shard_num 
      ORDER BY _shard_num;
      
  • 验证标准:目标集群查询结果与源集群完全一致(总大小相同、各分片数据量匹配)。

  • 异常处理:若结果不一致,需检查备份文件传输完整性、恢复命令执行日志,必要时重新执行恢复操作。

四、关键注意事项

  1. 多分片 / 多副本操作原则:所有步骤(安装工具、配置、备份、恢复)必须在每个节点单独执行,不可遗漏任一节点(避免部分节点无数据)。
  2. 备份文件唯一性:同一集群内的备份文件名建议统一(如full_backup_20251113),便于跨节点同步和后续追溯。
  3. 服务状态管控
    • 备份时:确保 clickhouse 服务正常运行(不可停止)。
    • 恢复前:必须停止 clickhouse 服务(避免目录占用,导致清理失败)。
    • 恢复后:统一重启服务(确保数据加载生效)。
  4. 权限问题:操作过程中若出现 “权限不足” 报错,需添加sudo执行命令(确保以 root 权限操作)。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐