gprecoverseg

    在启用了镜像的系统中,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重新联机。例如,该命令重新 启动系统。

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

    1. <failed_host_address>:<port>:<data_directory>

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

    1. <recovery_host_address>:<port>:<data_directory>

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

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

    1. =# SELECT dbid, content, address, port, datadir
    2. FROM gp_segment_configuration

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

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

    -a(不提示)

    不要提示用户确认。

    -B parallel_processes

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

    -d master_data_directory

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

    -F(完全恢复)

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

    全量恢复会持续很长时间,所以gprecoverseg会显示每个Segment的运行处理过程。 每个Segment的处理过程每秒更新一次,采用ANSI逃逸符更新每一个Segment行,如果您将gprecoverseg 工具执行日志输出到文件或您的终端不支持ANSI逃逸符,可以采用-s选项停用ANSI逃逸符。 该操作会使每个Segment每秒输出一个新行。带有--no-progress时会禁用处理报告。

    -i recover_config_file

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

    1. <failed_host_address>:<port>:<data_directory>SPACE
    2. <recovery_host_address>:<port>:<data_directory>

    注释

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

    要恢复的Segments

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

    1. failedAddress:failedPort:failedDataDirectory

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

    1. newPort:newDataDirectory

    示例

    单个镜像的就地恢复

    将单个镜像恢复到新主机

    获取示例文件

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

    -l logfile_directory

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

    -o output_recover_config_file

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

    -p new_recover_host[,…]

    -q(无屏幕输出)

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

    -r(重新平衡Segment)

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

    -s

    展示pg_basebackup顺序处理过程而不是当前情况。此选项在需要写入文件或tty 不支持转义字符时有用。默认是展示当前处理过程。

    --no-progress

    禁用产生于pg_basebackup的处理过程报告。默认配置为显示基础备份的处理过程。

    -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