您的位置:首页 > Web前端

14 使用Gptransfer 迁移数据

2017-07-14 22:55 337 查看

1        使用Gptransfer迁移数据

本主题介绍了如何使用gptransfer实用程序的数据库之间传输数据。

该gptransfer迁移实用程序Greenplum数据和元数据从一个Greenplum的数据库中的数据转移到另一个数据库Greenplum的,让你迁移数据库,或者只是选定表的全部内容,到另一个数据库。源和目标的数据库可以是在相同或不同的群集。数据并行在所有细分转让,使用gpfdist数据加载工具来达到最高的传输速率。

gptransfer处理数据传输的设置和执行。参与集群必须已经存在,有两个群集中的所有主机之间的网络访问,并在两个群集中的所有主机之间的证书身份验证的SSH访问。

该接口包括选项传送一个或多个完整的数据库,或一个或多个数据库表。

一个完整的数据库传输,包括数据库架构,表中的数据,索引,视图,角色,用户定义的函数和资源队列。配置文件,包括postgres.conf和pg_hba.conf文件,必须由管理员手动转移。安装在gppkg,如MADlib和编程语言扩展数据库的扩展,必须安装在由管理员目标数据库。

看到Greenplum的数据库实用程序指南为gptransfer效用完整语法和使用信息。

1.1       先决条件

•      在gptransfer实用程序只能使用Greenplum数据引擎,其中包括EMC DCA设备使用。Pivotal HAWQ不支持作为源或目标。
•      源和目标的Greenplum集群都必须是4.2或更高版本。
•      至少有一个Greenplum的实例必须在其分布gptransfer工具。该实用程序包括Greenplum的数据库版本4.2.8.1或更高及4.3.2.0或更高。如果没有源或目标都没有使用gptransfer,则必须将一个集群升级使用gptransfer。
•      gptransfer实用程序可以从源或目标数据库集群中运行。
•      目的地簇中的段的数量必须大于或等于源集群中主机的数量。在目标段的数量可能比在源段的数量较小,但该数据将在较慢的速率传送。
•      在两个集群的段主机必须与对方具有网络连接。
•      在两个集群的每台主机必须能够通过认证的SSH连接到其他每个主机。您可以使用gpssh_exkeys工具来交换两个集群的主机的公钥。

1.2       gptransfer能做什么

gptransfer使用写和可读的外部表,Greenplum的gpfdist并行数据装载工具,和命名管道将数据从源数据库传输到目标数据库。源群集上段从源数据库表中选择并插入到一个可写入外部表。目标集群中的段从可读外部表中选择并插入到目标数据库表。可写可读外部表被命名管道上的源群集的段上的主机支持,每个命名管道对目标细分服务管道输出到外部的读取表gpfdist过程。
gptransfer编排通过处理批量传送数据库对象的过程。对于要传送的每个表中,将执行以下任务:
gptransfer orchestrates the process by processingthe database objects to be transferred in batches. For each table to betransferred, it performs the following tasks:
•在源数据库中创建一个可写的外部表

•在目标数据库中创建一个可读的外部表

•创建源集群中的命名管道和段上的主机gpfdist流程

•在源数据库中执行SELECT INTO语句源数据插入到可写的外部表

•执行在目标数据库中的SELECT INTO语句从外部读取表中的数据插入到目标表

•可选择由源和目标比较行数或行的MD5哈希值验证数据

•清理外部表,命名管道和gpfdist流程
•   1.3       快速模式和慢速模式
gptransfer设置使用gpfdist并行文件服务工具,它均匀地服务于数据到目标段数据传输。运行更gpfdist过程增加了并行性和数​​据传输速率。当目的地簇具有相同或段比源簇的更大数目,gptransfer建立一个命名的管道,并为每个源段的一个gpfdist过程。这是最佳的数据传输速率的配置和被称为fast模式。下图说明段主机上设置当目标集群至少有需要的段源集群。

命名管道的输入端的结构不同,当有目标群集更少的段比源簇中。 gptransfer自动处理这种替代设置。在配置中的差异意味着传输数据到具有比源簇较少分段的目标群集并不像转印到相同或更大尺寸的目标群集一样快。这就是所谓的慢模式,因为有数据提供到目的地集群少gpfdist过程,虽然传输的仍然是相当快的,每个网段主机一台gpfdist。

当目标集群比源群小,还有每段主机一台命名管道和主机上的所有段通过它发送其数据。在源主机上的细分将数据写入连接到gpfdist过程对命名管道的输入端可写的网络外部表。这就将表数据到一个单一的命名管道。对命名管道的输出端的gpfdist过程提供综合数据到目标集群。下图说明了此配置。

在目标方面,gptransfer定义了一个可读的外部表与源主机输入的gpfdist服务器并从外部读取表中选择到目标表中。数据被均匀地分布到目的地集群中的所有的段。

1.4       Batch Size
and Sub-batch Size

一个gptransfer执行的并行度是由两个命令行选项来确定:--batch-size and --sub-batch-size. The --batch-size尺寸选项指定在间歇传送的表的数量,默认是2, 这意味着在任何时间都最多有两个表在迁移数据。
最小批量大小为1,最大值为10。 --sub-batch-size参数指定要开始做转移表的工作并行子过程的最大数目。默认值是25,最大为50。batch size 和 sub-batch size 的乘积是总的并行度。
如果设置为默认值,例如,gptransfer可以执行50个并发任务。每个线程是一个Python程序并且消耗内存,所以设置这些值过高,会导致一个Python内存不足的错误。出于这个原因,批量大小应根据具体的环境进行调整。

1.5       准备gptransfer的主机

当您安装一个Greenplum的数据库集群,您设置的全部主段上的主机,这样的Greenplum数据管理用户(gpadmin)可以用SSH从集群到集群中的任何其他主机的每个主机连接而无需提供密码。该gptransfer实用程序需要在源和目标集群的每个主机之间的这种能力。首先,确保集群具有相互的网络连接。然后,制备出含有两个群集的所有主机列表的hosts文件,并使用gpssh-exkeys工具来交换密钥。请参阅在Greenplum数据库实用程序指南gpssh-exkeys参考。
主机映射文件是一个文本文件,列出源群集在段上的主机。它是用来使在Greenplum的簇中的主机之间的通
4000
信。该文件使用--source-map-file=host_map_file 命令选项在gptransfer命令行上指定。它是利用gptransfer时复制两个独立的Greenplum集群之间的数据所需的选项。
该文件包含以下格式的列表:
host1_name,host1_ip_addr
host2_name,host2_ipaddr
文件使用的IP地址,而不是主机名,以避免与集群之间名称解析的任何问题。

1.6       限制

只从用户数据库gptransfer传输数据; Postgres,template0而和template1的数据库无法转移。管理员必须手动传输配置文件和安装扩展与gppkg目标数据库。

目标群集的主机数量不能少于源集群的主机数量。传输数据到一个较小的集群速度会慢于传输到一个数量较大的集群。

迁移小表或空表可能异常缓慢。在各个段之间建立外部表和数据通信的过程会显著增加额外的开销,不论是否有实际的数据传输。通过其他方式将模式和小表传输到目标数据库,然后用gptransfer使用-t选项来传输大表。

1.7       完全模式和表模式

当与--full选项运行,gptransfer复制所有用户创建的数据库,表,视图,索引,角色,用户定义的函数和资源源群集到目标集群中的队列。目标系统不能包含任何用户定义的数据库,只有默认的Postgres数据库,template0而和template1的。如果gptransfer发现在目标数据库失败与下面这样的消息:
[ERROR]:-gptransfer: error: --full option specified but tables exist on destinationsystem
注意:--full选项不能与-t,-d,-f或--partition转移选项来指定。
要单独复制表,使用-t命令行选项,或者使用-f命令行选项来指定包含表转移列表的文件(每个表一个选项)指定的表。表中的完全限定格式database.schema.table指定。表定义,索引,和表数据被复制。该数据库必须在目标集群上已经存在。
默认情况下,gptransfer如果你试图转移已经存在于目标数据库中的表失败:
[INFO]:-Validating transfer table set...

[CRITICAL]:- gptransfer failed. (Reason='Table database.schema.table existsin

database database .') exiting...
 
可以使用--skip-existing, --truncate, or --drop options 来覆盖此模式。
The following table shows the objects that arecopied in full mode and table mode.
Object
Full Mode
Table Mode
Data
Yes
Yes
Indexes
Yes
Yes
Roles
Yes
No
 

Object
Full Mode
Table Mode
Functions
Yes
No
Resource Queues
Yes
No
postgres.conf
No
No
pg hba.conf
No
No
gppkg
No
No
该--full选项和--schema-only选项可以一起使用,如果你想分阶段复制数据库的过程中出现宕机或低活动期间预定可使用,例如运行gptransfer --full --schema-only ..创建目标集群上的数据库,但没有数据。然后你就可以在预定的停机时间或低活动期转移分阶段的表。一定要包括--truncate或--drop选项,当你以后转移表,以防止转移失败,因为该表已经在目标存在。

1.8       锁定

-x选项启用表锁定。独占锁被完全的放置在源表,直到复制和验证。

1.9       验证Validation

缺省情况下,gptransfer不验证传输的数据。 您可以使用--validate=type请求验证。验证类型可以是下列之一:
•    count - 比较源表的行数和目标数据库中的表的行数。
•    md5 - 排序源和目标上的表,然后在排序行的MD5哈希值进行比较。
如果数据库是在传输过程中访问,一定要加-x选项来锁定该表。否则,该表可以在传输过程中被修改,导致验证失败。

1.10    Failed Transfers

一个表上的失败并没有结束的gptransfer工作。当传输失败,gptransfer显示错误消息并添加表名到一个失败的传输文件。在gptransfer会议结束时,gptransfer写一条消息,告诉您有故障,并提供故障转移文件的名称。例如:
[WARNING]:-Some tables failed to transfer. A list of these tables

[WARNING]:-has been written to the file failed_transfer_tables_20140808_101813.txt

[WARNING]:-This file can be used with the -f optionto continue
在失败的传输文件是由-f选项所需的格式,所以你可以用它来启动一个新的会话gptransfer重试失败的传输。

1.11    最佳实践

小心不要设置--batch-size和--sub-batch-size的命令行选项指定太多的并行度以超过主机内存。太多的子过程可能会耗尽内存,导致一个Python内存不足的错误。开始与依据自己的经验较小的批量大小和子批量大小,和增加。

在阶段传送数据库。第一,随着--schema只和-d数据库选项运行gptransfer,然后分阶段转移表。与仅--schema选项运行gptransfer后,请务必添加--truncate或--drop选项,以防止失败的,因为表已经存在。

小心选择gpfdist和外部表参数,如定界符外部表数据和最大行长度。例如,不要选择可表数据中出现一个分隔符。

如果你有很多空表转移,考虑DDL脚本而不是gptransfer。的gptransfer开销来设置每个表用于传输显著和不转让空表的有效方法。

gptransfer传输数据之前创建表的索引。这减慢了数据传送,因为索引在数据被插入在表中的同时更新。对于大表特别是,考虑运行gptransfer并重新创建索引时传输完成之前删除索引。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐