Table迁移

这里说的Table迁移是指将某个Pegasus集群的一个表的数据迁移到另一个Pegasus集群中。

目前提供了两种办法:使用Shell工具的copy_data命令;通过冷备份恢复。

copy_data迁移

Shell工具的copy_data命令的原理:通过scan接口从源集群的表中逐条读入数据,然后通过set接口将数据逐条写入到目标集群的表中。如果set的数据在目标集群的表中已经存在,会直接覆盖。

copy_data命令:

    copy_data              <-c|--target_cluster_name str> <-a|--target_app_name str>
                           [-s|--max_split_count num] [-b|--max_batch_count num]
                           [-t|--timeout_ms num]

假设源集群为ClusterA,目标集群为ClusterB,需要迁移的表为TableA。迁移步骤如下:

  • 在目标集群上建表。由于copy_data命令并不会自动在目标集群上创建表,所以需要自己先建表。相对源表,新表的表名可以不同,partition count也可以不同。假设在目标集群上新建的表名为TableB。
  • 在Shell工具的配置文件中添加目标集群的配置。因为copy_data命令需要通过-c参数指定目标集群,所以需要配置目标集群的MetaServer地址列表。在执行Shell所在文件夹,修改配置文件src/shell/config.ini,在文件最后添加如下几行(将ClusterB替换为你自己的集群名):
    [pegasus.clusters]
      ClusterB = {ClusterB的MetaServer地址}
    
  • 在Shell中执行命令:
    >>> use TableA
    >>> copy_data -c ClusterB -a TableB -t 10000
    
  • 如果以上步骤都没有问题,copy操作应当就开始执行了,每隔1秒会打印进度。通常来说,copy速度应当在10万/秒以上。copy过程中如果出现问题终止了,就重新执行命令。

冷备份迁移

所谓冷备份迁移,就是利用Pegasus的冷备份功能,先将数据备份到HDFS或者其他介质上,然后恢复到新的表中。

冷备份迁移的好处:

  • 速度更快:因为冷备份是拷贝文件,相对copy_data的逐条拷贝,速度要快很多。
  • 错误容忍度高:冷备份功能有很多容错逻辑,避免因为网络抖动等问题带来的影响。如果用copy_data,中途出错就需要从头再来。
  • 多次迁移更友好:如果要从一个表拷贝到多个地方,只需要备份一次,然后执行多次恢复。
Apache Incubator
Copyright © 2020 The Apache Software Foundation. Licensed under the Apache License, Version 2.0.

Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.