【揭秘GP】全新 Greenplum 集群传输工具—GPCOPY 2.1.0 正式发布
导读:GPCOPY 是新一代的支持 Greenplum 集群之间快速高效传输数据的工具。作为 Greenplum 集群数据传输的官方首选配套工具,GPCOPY 除了具有高速稳定易用的特点外,还支Y 7 v ] $ e B持不同版本 Greenplum 集群之间的b { 4 # x Y传输(当然支持同版本之间的传输)。GPCOPY 支持从 GP4.3.x 到 GP 5.x、GP5.x 到 GP6.x、甚至 GP4.3.x 到 GP6.x 的数据传输。它也同时支持同等规模集群和不等规模集群之间的传输。另外 GPCOPY 还支持数据的校验,支持事务) C + t,增加了数据传输的可靠性。GPCOPY 目前还没有开源,最新版本2.1.0在3月9日正式发布上线,做了很多方面的提升,可以在官网 https://network.pivotal.io/prod # 7 Hucts/gpdb-da/ v K /ta-copy/ 下载到。
一、新功能
1. 支持有外键的表、view 以及有继承关系的表t M c @ f (
GPCOPY 是以表为单位从源数据库中把表的定义及表中数据复制到目标数据库中。
首先:GPCOPY 拷贝表是支持事务的,如果再拷贝过程中出错则回滚。例如如果目标数据库中不存在要拷贝的表,GPCOPY 首先会创建目标表,然后把源表的数据拷贝到目标表,如果在拷贝数据的过程中由于某种原因出错了A # H ^ 8 D 0 o,则整个表S k K的拷贝会回滚,被创建的目标表不会出现在目标数据库中。
其次:GPCOPY 支持并行拷贝多个表。使用 -jobs@ $ I { 8 $ | M 可以指定最多同时拷贝多少个表。-jobs 的最大值是由运行 GPCOPY 机x u M S器的性能、源S s j b h ) r数据库的性能、目标数据库的性能等多个因素共同决定的。并行拷贝表使 GPCOPY 拥有出色的性能,但是数据库中p p y R W A ZpyQ V w j Z y ( +_helperS p j P 的地址,即目标 segmentO : ; 的IP地址。
2.1.0 版本之前 GPCOPY 没有 dest-mapping-file 这个选项,那么它) g ^ H 7 o ( S是怎么获取目标端 segmH ] % 3 xent IP 地址的,以及存在T @ + & 9 0什么问题呢?
首先查询* 4 ; H i Q w r目标数据库中 gp_segment_configuration 表,获取 segment 的 H) i ` [ N J M H &OSTNAME 。源端不能直接A H a h z z : y使I . b用该 HOSTNAME,需要其对应的IP地址。所以 GPCOPY 会在在目标集群的 ma O W ? rster 上查询该 HOSTNg u [ EAME 对应的IPE - J p f / A O p地址(GPCOPY已知目o [ n L z . ! R Q d Iegment 拷贝数据,模式选择可参考 -on-segment-threshold 选项使用说明。
无论是哪式拷贝模式,主要的步骤大致如下:
- 使用 copy 工具把数据从源表中导出
- 然后 gpcopy_helper 把数据从源 master/segment 传递到目标端 master/segment 上
- 最后再使用 copy 工具把数据导入到目标表中P C $ ? ( l
当使用 segment 模式进行拷贝数据的时候F i ( a n Y Q,使2 B k 3 t A用的是 copy on segment 命令将数据导入导出到 segment 上,但是该命令将数^ E [据导入到表的时候不支持重分布。因此当数据在目标需要重分布时候,使用临时外部表代替 copy 命令将数据导入表中。
- 验证数据
该模块用于验证拷贝到目标~ j ? 7 2 O E ~ I表中的数据是否正确。有两种数据验证方法:md5xor 和 count。 md5xor是比较严格的数据验证方法,会把源表和1 + ; o u / - R目标表中的每= _inherits来获取该依赖关系。
但对于GPCOPY来讲,& E U X # y只有一种依赖关系,即拷贝依赖关系:一个表依赖于另外一个表,被依赖的表需要9 : E 7 { 1先拷贝。
该模块通过查询源数据库的 catalog,分析表之间不同的依赖A _ ) ^ C 1 7 6 L关系,最终生成表之间的拷1 = )贝依赖关系e s 1 8 x。
- 调度器
调度器主要负责两个工作:第一、保证表的拷贝顺序符合表之间的依赖关系;第二、控制拷贝表的并发度。
怎P x m R r么才能使拷贝顺序符合表之间的依赖关系?思路很简单,没有任何依赖的表或者其依赖的表全部拷贝完成,则调度拷贝该表,否则该表不Y R g : c _ O会被调度。
- 生成报告
该模块比较简单,收集并行执行的表拷贝的结果i 4 1 & Q ; x,生成拷a } ~ = V X贝进度信息及汇总信息w x。
三、未来规划
GPCOPY 的官方文档可以参考 https://gpdb.docs.pivotal.io/GPCOPY/2-1/index-GPCOPY.html。在接下来的版本,GPCOPY 还会支持增量传输,进一步提高性能。也O 6 L希望广大用户多多反馈,多提宝贵意见。
本文作者
王晓冉
现任 Greenplum 研发工程师。研究生毕业于中国科学Y 8 Y -院软件所软件工程: % 7 V R *专业。目前c ( i 2主要负责 gpcopy 的研发工作。此前参与了 gpkakfa 的研发及 Postgres Merge 工作。