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

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

copy_data迁移

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

copy_data命令:

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

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

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

冷备份迁移

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

冷备份迁移的好处:

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