gprecoverseg
恢复已标记为down的主Segment实例或镜像Segment实例(如果启用了镜像)。
概要
gprecoverseg [-p new_recover_host[,...]] | -i recover_config_file |
-s filespace_config_file] [-d master_data_directory]
[-B parallel_processes] [-F] [-a] [-q] [-l logfile_directory]
gprecoverseg -r
gprecoverseg -o output_recover_config_file | -S output_filespace_config_file
[-p new_recover_host[,...]]
gprecoverseg -?
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)。
filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
<failed_host_address>:<port>:<data_directory>
在某些情况下,这可能是不可能的(例如,如果主机物理损坏,无法恢复)。gprecoverseg允许用户将失败的Segment恢复成全新的主机(使用-p),在剩余的活动Segment主机上的备用数据目录位置(使用-s)或通过以下面的格式提供恢复配置文件(使用-i)。SPACE关键字表示所需空间的位置。不要添加额外的空间。
filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
<failed_host_address>:<port>:<data_directory>SPACE
<recovery_host_address>:<port>:<replication_port>:<data_directory>
[:<fselocation>:...]
有关恢复配置文件的详细信息和示例,请参阅下面的-i选项。
gp_segment_configuration、pg_filespace和pg_filespace_entry系统目录表可以帮助用户确定当前的Segment配置,以便用户可以规划镜像恢复配置。例如,运行以下查询:
=# SELECT dbid, content, address, port,
replication_port, fselocation as datadir
FROM gp_segment_configuration, pg_filespace_entry
WHERE dbid=fsedbid
ORDER BY dbid;
新恢复的Segment主机必须预先安装Greenplum数据库软件,并且配置与现有Segment主机完全相同。所有当前配置的Segment主机上必须存在备用数据目录位置,并且有足够的磁盘空间来容纳失效的Segment。
恢复过程会在Greenplum数据库系统目录中再次标记该Segment,然后启动重新同步过程,以使Segment的事务状态处于最新状态。在重新同步期间系统在线并且可用。要检查重新同步进程运行的状态:
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关键字表示所需空间的位置。不要添加额外的空间。
filespaceOrder=[filespace1_fsname[, filespace2_fsname[, ...]]
<failed_host_address>:<port>:<data_directory>SPACE
<recovery_host_address>:<port>:<replication_port>:<data_directory>
[:<fselocation>:...]
注释
以#开始的行被视为注释并被忽略。
文件空间顺序
不是注释的第一行指定了文件空间顺序。该行以 filespaceOrder=开头,后跟由冒号分隔的文件空间名称列表。例如:
filespaceOrder=raid1:raid2
默认的pg_system 文件空间不应该出现在这个列表中。该列表应保留在没有文件空间而不是缺省 pg_system文件空间的系统上。例如:
filespaceOrder=
要恢复的Segment
第一行之后的每一行指定要恢复的Segment。这一行可以有两种格式之一。在就地恢复的情况下,在该行中输入一组冒号分隔的字段。例如:
failedAddress:failedPort:failedDataDirectory
要恢复到新位置,请在行中输入由空格分隔的两组字段。SPACE表示不要添加额外的空间。
failedAddress:failedPort:failedDataDirectorySPACEnewAddress:
newPort:newReplicationPort:newDataDirectory
在具有附加文件空间的系统上,第二组字段预计会跟随由附加冒号分隔的相应文件空间位置的列表。 例如,在具有两个附加文件空间的系统上,在第二个组中输入另外两个目录,如下所示。 另外SPACE指示所需的空间。 不要添加额外的空间。
failedAddress:failedPort:failedDataDirectorySPACEnewAddress:
newPort:newReplicationPort:newDataDirectory:location1:location2
示例
单个镜像的就地恢复
filespaceOrder=
sdw1-1:50001:/data1/mirror/gpseg16
将单个镜像恢复到具有额外文件空间的系统上的新主机
filespaceOrder=
sdw1-1:50001:/data1/mirror/gpseg16SPACEsdw4-1:
50001:51001:/data1/recover1/gpseg16
将单个镜像恢复到具有额外文件空间的系统上的新主机
filespaceOrder=
fs1sdw1-1:50001:/data1/mirror/gpseg16SPACEsdw4-1:
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实例。文件空间配置文件格式为:
pg_system=default_fselocation
filespace1_name=filespace1_fselocation
filespace2_name=filespace2_fselocation
...
如果用户的系统没有配置额外的文件空间,则该文件将只有一个位置(对于默认文件空间 pg_system)。这些文件系统位置必须存在于阵列中的所有Segment主机上,并具有足够的磁盘空间来容纳要恢复的Segment。
注意:只有在恢复到集群中现有主机时,-s和-S选项才会被使用。在恢复到新主机时,用户不能使用这些选项。要恢复到新的主机,请使用-i和-o选项。
-S output_filespace_config_file
指定文件名和位置,以-s 选项所需的格式输出示例文件空间配置文件。应该编辑该文件以提供正确的备用文件空间位置。
-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