将自建ClickHouse向企业版迁移

本文介绍如何将自建ClickHouse迁移到云数据库 ClickHouse 企业版集群,以及云数据库 ClickHouse 企业版集群之间迁移操作。Remote函数在SELECTINSERT查询中用于允许访问自建ClickHouse服务器,这使得迁移表只需要编写一个带有嵌套SELECTINSERT INTO查询即可。

将自建ClickHouse迁移到云数据库 ClickHouse 企业版,以及云数据库 ClickHouse 企业版集群之间迁移操作的示意图如下:

image

从自建ClickHouse向企业版迁移

image.png

说明

云数据库 ClickHouse 企业版中,无论您的源表是否存在分片或副本,您只需创建对应的目标表即可(在该表中,您可以省略Engine参数,因为系统将自动使用SharedMergeTree表引擎)。云数据库 ClickHouse 企业版集群会自动处理垂直和水平扩展,您无需担心复制和分片的具体实现方式。

在本示例中,自建ClickHouse以下称为源集群,云数据库 ClickHouse 企业版集群以下称为目标集群。

操作概述

从自建ClickHouse向云数据库 ClickHouse 企业版集群迁移的流程如下。

  1. 在源集群中添加一个只读用户。

  2. 在目标集群上复制源表结构。

  3. 如果源集群支持从外部网络访问时,您可以将源集群数据读取至目标集群;如果源集群不支持从外部网络访问时,您可以将源集群数据推送至目标集群。

  4. (可选)在目标集群上将源集群的IP地址删除。

  5. 从源集群中删除只读用户。

操作步骤

  1. 在源集群上执行以下操作(源表中已有数据):

    1. 增加一个只读用户到表db.table中。

      CREATE USER exporter
      IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
      SETTINGS readonly = 1;
      GRANT SELECT ON db.table TO exporter;
    2. 复制源表结构。

      SELECT create_table_query
      FROM system.tables
      WHERE database = 'db' and table = 'table'
  2. 在目标集群上执行以下操作。

    1. 创建数据库。

      CREATE DATABASE db
    2. 使用源数据表的CREATE TABLE语句来创建目标数据表。

      说明

      在运行CREATE TABLE语句时,将ENGINE更改为SharedMergeTree,但是不能包含任何参数,因为云数据库 ClickHouse 企业版集群始终会复制表并提供正确的参数。ORDER BYPRIMARY KEYPARTITION BYSAMPLE BYTTLSETTINGS子句定义了表的结构和元数据信息,请保留这些子句,以确保表在目标云数据库 ClickHouse 企业版集群中正确地创建。

      CREATE TABLE db.table ...
    3. 使用Remote函数读取数据或推送数据。

      说明

      如果源ClickHouse服务器不可从外部网络访问,您可以选择将数据推送而不是读取,因为Remote函数适用于选择和插入操作。

      • 在目标集群中使用Remote函数从源集群的源表中读取数据。

      image.png

      INSERT INTO db.table SELECT * FROM
      remote('source-hostname:9000', db, table, 'exporter', 'password-here')
      • 在源集群中使用Remote函数将数据推送到目标集群中。image.png

        说明

        为了使Remote函数能够连接到您的云数据库 ClickHouse 企业版集群上,您需要将源集群的IP地址添加到目标集群的白名单中。具体操作,请参见设置白名单

        INSERT INTO FUNCTION
        remote('target-hostname:9000', 'db.table',
        'default', 'PASS') SELECT * FROM db.table

云数据库 ClickHouse 企业版之间进行迁移

image.png

云数据库 ClickHouse 企业版集群之间迁移数据的使用场景如下。

  • 从还原的备份中迁移数据。

  • 从开发服务复制数据到预发服务(或从预发到生产)。

本示例中有两个云数据库 ClickHouse 企业版集群,以下称为源集群和目标集群。image.png

操作概述

云数据库 ClickHouse 企业版之间迁移的流程如下:

  1. 确定一个云数据库 ClickHouse 企业版集群作为源集群,另一个作为目标集群。

  2. 在源集群上添加一个只读用户。

  3. 在目标集群上复制源表结构。

  4. 暂时允许源集群的IP访问。

  5. 从源集群到目标集群复制数据。

  6. 在目标集群上重新建立IP访问列表。

  7. 从源服务中删除只读用户。

操作步骤

  1. 在源集群执行以下操作。

    1. 增加一个只读用户表db.table中。

      CREATE USER exporter
      IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
      SETTINGS readonly = 1;
      GRANT SELECT ON db.table TO exporter;
    2. 复制源表结构。

      SELECT create_table_query
      FROM system.tables
      WHERE database = 'db' and table = 'table'
  2. 在目标集群复制表结构。

    1. 创建数据库。

      CREATE DATABASE db
    2. 使用源集群的CREATE TABLE语句,在目标数据库上创建表。

      CREATE TABLE db.table ...

    在目标集群上创建表,使用来自源集群的SELECT CREATE_TABLE_QUERY...的输出。

  3. 允许源集群上的远程操作。

    为了从源集群到目的集群地读取数据,源集群和目标集群必须允许互相连接。请执行以下操作。

    • 将源集群的IP地址添加到目标集群的白名单中。

    • 将目标集群的IP地址添加到源集群的白名单中。

    说明

    您可以通过SELECT * FROM system.clusters;查看云数据库 ClickHouse 企业版集群的IP地址。修改白名单的具体操作,详情请参见设置白名单

  4. 把数据从源集群复制到目标集群。

    使用Remote函数从源集群中读取数据。连接到目标集群,在目标集群上运行以下命令验证数据。

    INSERT INTO db.table SELECT * FROM
    remote('source-hostname:9000', db, table, 'exporter', 'password-here')
  5. 在源集群上恢复访问列表。

    如果您之前导出了访问列表,那么您可以使用Share重新导入它,否则请重新添加条目到访问列表中。

  6. 删除只读的exporter用户。

    DROP USER exporter
  7. 删除源集群和目标集群的访问IP地址。具体操作,请参见设置白名单