gprecoverseg
gprecoverseg
恢复已标记为down的主Segment实例或镜像Segment实例(如果启用了镜像)。
概要
gprecoverseg [-p new_recover_host[,...]] | -i recover_config_file] [-d master_data_directory] [-B parallel_processes] [-F [-s]] [-a] [-q] [--no-progress] [-l logfile_directory] gprecoverseg -r gprecoverseg -o output_recover_config_file [-p new_recover_host[,...]] gprecoverseg -? | --help 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重新联机。例如,该命令重新 启动系统。
gpstop -r
缺省情况下,将恢复出现故障的Segment,这意味着系统将该Segment重新联机到与最初配置的主机和 数据目录位置相同的位置。在这种情况下,请使用以下格式的恢复配置文件(使用-i)。
<failed_host_address>:<port>:<data_directory>
在某些情况下,这可能是不可能的(例如,如果主机物理损坏,无法恢复)。gprecoverseg 允许用户将失败的Segment恢复成全新的主机(使用-p),在剩余的活动Segment主机上的 备用数据目录位置(使用-s)或通过以下面的格式提供恢复配置文件(使用-i)。 SPACE关键字表示所需空间的位置。不要添加额外的空间。
<failed_host_address>:<port>:<data_directory>SPACE <recovery_host_address>:<port>:<data_directory>
有关恢复配置文件的详细信息和示例,请参阅下面的-i选项。
gp_segment_configuration系统目录表可以帮助用户确定当前的Segment配置, 以便用户可以规划镜像恢复配置。例如,运行以下查询:
=# SELECT dbid, content, address, port, datadir FROM gp_segment_configuration ORDER BY dbid;
新恢复的Segment主机必须预先安装Greenplum数据库软件,并且配置与现有Segment主机完全相同。所有 当前配置的Segment主机上必须存在备用数据目录位置,并且有足够的磁盘空间来容纳故障的Segment。
恢复过程会在Greenplum数据库系统目录中再次标记该Segment,然后启动重新同步过程,以使Segment的 事务状态处于最新状态。在重新同步期间系统在线并且可用。要检查重新同步进程运行的状态:
gpstate -m
选项
- -a(不提示)
- 不要提示用户确认。
- -B parallel_processes
- 并行恢复的Segment数。如果未指定,则实用程序将启动最多16个并行进程,具体取决于需要恢复 多少个Segment实例。
- -d master_data_directory
- 可选。Master主机的数据目录。如果未指定,则使用为$MASTER_DATA_DIRECTORY 设置的值。
- -F(完全恢复)
- 可选。执行活动Segment实例的完整副本以恢复出现故障的Segment。 默认情况下,仅复制Segment关闭
时发生的增量更改。
Warning: 全量恢复会在从活动(当前主)Segment实例复制数据目录到故障Segment之前将 故障Segment的数据目录清空。在执行全量恢复前,确保Segment故障不会引起数据损坏,并且任何Segment 磁盘故障问题均被修复。
- 全量恢复会持续很长时间,所以gprecoverseg会显示每个Segment的运行处理过程。 每个Segment的处理过程每秒更新一次,采用ANSI逃逸符更新每一个Segment行,如果您将gprecoverseg 工具执行日志输出到文件或您的终端不支持ANSI逃逸符,可以采用-s选项停用ANSI逃逸符。 该操作会使每个Segment每秒输出一个新行。带有--no-progress时会禁用处理报告。
- -i recover_config_file
- 指定文件的名称以及有关故障Segment要恢复的详细信息。文件中的每一行都是以下格式。SPACE
关键字表示所需空间的位置。不要添加额外的空间。
<failed_host_address>:<port>:<data_directory>SPACE <recovery_host_address>:<port>:<data_directory>
注释
以#开始的行被视为注释并被忽略。
要恢复的Segments
第一行之后的每一行指定要恢复的Segment。这一行可以有两种格式之一。在就地恢复的情况下, 在该行中输入一组冒号分隔的字段。例如:
failedAddress:failedPort:failedDataDirectory
要恢复到新位置,请在行中输入由空格分隔的两组字段。SPACE表示不要添加额外的空间。
failedAddress:failedPort:failedDataDirectorySPACEnewAddress: newPort:newDataDirectory
示例
单个镜像的就地恢复
sdw1-1:50001:/data1/mirror/gpseg16
将单个镜像恢复到新主机
sdw1-1:50001:/data1/mirror/gpseg16SPACEsdw4-1:50001:/data1/recover1/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
- 展示pg_basebackup顺序处理过程而不是当前情况。此选项在需要写入文件或tty 不支持转义字符时有用。默认是展示当前处理过程。
- --no-progress
- 禁用产生于pg_basebackup的处理过程报告。默认配置为显示基础备份的处理过程。
- -v(详细模式)
- 将日志记录输出设置为verbose。
- --version(版本)
- 显示此工具的版本。
- -?(帮助)
- 显示在线帮助。
示例
恢复所有故障的Segment实例:
$ gprecoverseg
恢复后,重新平衡用户的Greenplum数据库系统,将所有Segment重置为其首选角色。 首先检查所有Segment已启动并同步。
$ gpstate -m $ gprecoverseg -r
将任何故障的Segment实例恢复到新配置的空闲Segment主机:
$ gprecoverseg -i recover_config_file
输出默认恢复配置文件:
$ gprecoverseg -o /home/gpadmin/recover_config_file