gprecoverseg

恢复已标记为down的主Segment实例或镜像Segment实例(如果启用了镜像)。

概要

  1. gprecoverseg [-p new_recover_host[,...]] | -i recover_config_file |
  2. -s filespace_config_file] [-d master_data_directory]
  3. [-B parallel_processes] [-F] [-a] [-q] [-l logfile_directory]
  4. gprecoverseg -r
  5. gprecoverseg -o output_recover_config_file | -S output_filespace_config_file
  6. [-p new_recover_host[,...]]
  7. gprecoverseg -?
  8. gprecoverseg --version

描述

在启用了镜像的系统中,gprecoverseg 工具会重新激活失效的Segment实例,并识别需要重新同步的已更改的数据库文件。一旦gprecoverseg完成这个过程,系统进入resyncronizing模式,直到被恢复的Segment更新为最新为止。在重新同步期间系统处于在线状态并且能被正常操作。

在增量恢复期间(未指定-F选项),如果gprecoverseg在启用了镜像的系统中检测到禁用镜像的Segment实例,则工具将报告该Segment禁用了镜像,不会尝试恢复该Segment实例,并继续恢复过程。

Segment实例可能由于多种原因失效,如主机故障、网络故障或磁盘故障。当一个Segment实例失效时,其状态在Greenplum数据库系统目录中被标记为down并且在change tracking模式下激活其镜像。为了使发生故障的Segment实例重新运行,首先必须纠正使其失败的问题,然后使用gprecoverseg在Greenplum数据库中恢复Segment实例。

使用gprecoverseg进行Segment恢复需要有一个活动镜像来从其中恢复。对于没有启用镜像的系统,或者在发生双重失效的情况下(主Segment和镜像Segment同时失效),必须采取手动步骤恢复出现故障的Segment实例,然后执行系统重新启动让Segment重新联机。例如,该命令重新启动系统。

  1. gpstop -r

缺省情况下,将恢复出现故障的Segment,这意味着系统将该Segment重新联机到与最初配置的主机和数据目录位置相同的位置。在这种情况下,请使用以下格式的恢复配置文件(使用-i)。

  1. filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
  2. <failed_host_address>:<port>:<data_directory>

在某些情况下,这可能是不可能的(例如,如果主机物理损坏,无法恢复)。gprecoverseg允许用户将失败的Segment恢复成全新的主机(使用-p),在剩余的活动Segment主机上的备用数据目录位置(使用-s)或通过以下面的格式提供恢复配置文件(使用-i)。SPACE关键字表示所需空间的位置。不要添加额外的空间。

  1. filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
  2. <failed_host_address>:<port>:<data_directory>SPACE
  3. <recovery_host_address>:<port>:<replication_port>:<data_directory>
  4. [:<fselocation>:...]

有关恢复配置文件的详细信息和示例,请参阅下面的-i选项。

gp_segment_configuration、pg_filespace和pg_filespace_entry系统目录表可以帮助用户确定当前的Segment配置,以便用户可以规划镜像恢复配置。例如,运行以下查询:

  1. =# SELECT dbid, content, address, port,
  2. replication_port, fselocation as datadir
  3. FROM gp_segment_configuration, pg_filespace_entry
  4. WHERE dbid=fsedbid
  5. ORDER BY dbid;

新恢复的Segment主机必须预先安装Greenplum数据库软件,并且配置与现有Segment主机完全相同。所有当前配置的Segment主机上必须存在备用数据目录位置,并且有足够的磁盘空间来容纳失效的Segment。

恢复过程会在Greenplum数据库系统目录中再次标记该Segment,然后启动重新同步过程,以使Segment的事务状态处于最新状态。在重新同步期间系统在线并且可用。要检查重新同步进程运行的状态:

  1. gpstate -m

选项

-a (不提示)

不要提示用户确认。

-B parallel_processes

并行恢复的Segment数。如果未指定,则实用程序将启动最多四个并行进程,具体取决于需要恢复多少个Segment实例。

-d master_data_directory

可选。Master主机的数据目录。如果未指定,则使用为$MASTER_DATA_DIRECTORY设置的值。

-F (完全恢复)

可选。执行活动Segment实例的完整副本以恢复出现故障的Segment。 默认情况下,仅复制Segment关闭时发生的增量更改。

-i recover_config_file

指定文件的名称以及有关失效Segment要恢复的详细信息。文件中的每一行都是以下格式。SPACE关键字表示所需空间的位置。不要添加额外的空间。

  1. filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
  2. <failed_host_address>:<port>:<data_directory>SPACE
  3. <recovery_host_address>:<port>:<replication_port>:<data_directory>
  4. [:<fselocation>:...]

注释

以#开始的行被视为注释并被忽略。

文件空间顺序

不是注释的第一行指定了文件空间顺序。该行以 filespaceOrder=开头,后跟由冒号分隔的文件空间名称列表。例如:

  1. filespaceOrder=raid1:raid2

默认的pg_system 文件空间不应该出现在这个列表中。该列表应保留在没有文件空间而不是缺省 pg_system文件空间的系统上。例如:

  1. filespaceOrder=

要恢复的Segment

第一行之后的每一行指定要恢复的Segment。这一行可以有两种格式之一。在就地恢复的情况下,在该行中输入一组冒号分隔的字段。例如:

  1. failedAddress:failedPort:failedDataDirectory

要恢复到新位置,请在行中输入由空格分隔的两组字段。SPACE表示不要添加额外的空间。

  1. failedAddress:failedPort:failedDataDirectorySPACEnewAddress:
  2. newPort:newReplicationPort:newDataDirectory

在具有附加文件空间的系统上,第二组字段预计会跟随由附加冒号分隔的相应文件空间位置的列表。 例如,在具有两个附加文件空间的系统上,在第二个组中输入另外两个目录,如下所示。 另外SPACE指示所需的空间。 不要添加额外的空间。

  1. failedAddress:failedPort:failedDataDirectorySPACEnewAddress:
  2. newPort:newReplicationPort:newDataDirectory:location1:location2

示例

单个镜像的就地恢复

  1. filespaceOrder=
  2. sdw1-1:50001:/data1/mirror/gpseg16

将单个镜像恢复到具有额外文件空间的系统上的新主机

  1. filespaceOrder=
  2. sdw1-1:50001:/data1/mirror/gpseg16SPACEsdw4-1:
  3. 50001:51001:/data1/recover1/gpseg16

将单个镜像恢复到具有额外文件空间的系统上的新主机

  1. filespaceOrder=
  2. fs1sdw1-1:50001:/data1/mirror/gpseg16SPACEsdw4-1:
  3. 50001:51001:/data1/recover1/gpseg16:/data1/fs1/gpseg16

获取示例文件

用户可以使用-o选项输出一个恢复配置文件的样例以便从它开始。

-l logfile_directory

写入日志文件的目录。默认为~/gpAdminLogs。

-o output_recover_config_file

指定文件名称和位置以输出示例恢复配置文件。输出文件以-i选项所需的格式列出当前失效的Segment及其默认恢复位置。 与 -p 选项一起使用可输出用于在不同主机上恢复的示例文件。 如果需要,可以编辑此文件以提供备用恢复位置。

-p new_recover_host[,…]

在当前配置的Greenplum数据库阵列之外指定一个备用主机,用于恢复失效的Segment。在多个失效的Segment主机的情况下,用户可以指定一个逗号分隔的列表。备用主机必须安装和配置Greenplum数据库软件,并具有与当前网段主机相同的硬件和操作系统配置(相同的OS版本、语言环境、gpadmin 用户帐户、创建的数据目录位置、交换的ssh密钥、网络接口数量、网络接口命名约定等)。

-q (无屏幕输出)

以静默模式运行。命令输出不显示在屏幕上,但仍然写入日志文件。

-r (重新平衡Segment)

在Segment恢复之后,Segment实例可能并未回到系统初始化时为它给定的优先角色。这可能会让系统陷入一种潜在的非平衡状态,因为某些Segment主机拥有的活动Segment数量可能超过最高系统性能时的数量。这一选项通过将主Segment和镜像Segment返回到其优先角色来重新平衡主Segment和镜像Segment。在运行gprecoverseg -r之前,所有的Segment都必须有效且同步。如果有任何正在进行的查询,它们将被取消并回滚。

-s filespace_config_file

指定包含当前配置的Segment主机上文件系统位置的配置文件的名称,用户可以在其中恢复失效的Segment实例。文件空间配置文件格式为:

  1. pg_system=default_fselocation
  2. filespace1_name=filespace1_fselocation
  3. filespace2_name=filespace2_fselocation
  4. ...

如果用户的系统没有配置额外的文件空间,则该文件将只有一个位置(对于默认文件空间 pg_system)。这些文件系统位置必须存在于阵列中的所有Segment主机上,并具有足够的磁盘空间来容纳要恢复的Segment。

注意:只有在恢复到集群中现有主机时,-s和-S选项才会被使用。在恢复到新主机时,用户不能使用这些选项。要恢复到新的主机,请使用-i和-o选项。

-S output_filespace_config_file

指定文件名和位置,以-s 选项所需的格式输出示例文件空间配置文件。应该编辑该文件以提供正确的备用文件空间位置。

-v (详细模式)

将日志记录输出设置为verbose。

--version (版本)

显示此工具的版本。

-? (帮助)

显示在线帮助。

示例

恢复所有失效的Segment实例:

  1. $ gprecoverseg

恢复后,重新平衡用户的Greenplum数据库系统,将所有Segment重置为其首选角色。 首先检查所有Segment已启动并同步。

  1. $ gpstate -m
  2. $ gprecoverseg -r

将任何失效的Segment实例恢复到新配置的空闲Segment主机:

  1. $ gprecoverseg -i recover_config_file

输出默认恢复配置文件:

  1. $ gprecoverseg -o /home/gpadmin/recover_config_file

另见

gpstartgpstop