Pivotal Greenplum® 6.9-管理员指南-管理系统-恢复故障的Segment

恢复故障的Segment

如果Master无法连接到Segment实例,它会在Greenplum数据库系统目录表中将该Segment标记为"down"。该Segment实例保持脱机状态,直到管理员采取措施其重新联机。恢复一个故障的Segment实例或主机的过程,取决于故障的原因以及是否启用了镜像。Segment实例不可用的原因有很多:

  • Segment主机不可用,例如由于网络或硬件故障。
  • Segment实例未运行,例如,没有 postgres 数据库侦听进程。
  • Segment实例的数据目录已损坏或丢失,例如,数据不可访问、文件系统损坏或磁盘故障。
图1显示了上述每种故障场景的高层别排查步骤。
图1.Segment故障排除矩阵


 

从Segment故障中恢复

Segment主机故障通常会导致多个Segment故障:该主机上的所有主Segment或镜像Segment实例都标记为"down"且无法运行。如果未启用镜像并且有一个Segment宕掉,则系统将自动变为无法运行。

Segment实例可能由于多种原因而发生故障,例如主机故障、网络故障或磁盘故障。当Segment实例故障时,其状态在Greenplum数据库系统目录中被标记为down,并且其镜像以更改跟踪的模式式下被激活。为了使故障的Segment实例再次运行,必须首先纠正导致其失败的问题,然后使用gprecoverseg工具,在Greenplum数据库中恢复该Segment实例。

如果Segment主机不可恢复,并且在启用镜像的情况下丢失了一个或多个Segment实例,则可以尝试从其镜像恢复Segment实例。请参见当Segment主机不可恢复时。您也可以从备份文件重新创建Greenplum数据库系统。请参阅备份和还原数据库

在启用镜像的情况下恢复

  1. 确保可以从Master连接到Segment主机。例如:
    $ ping failed_seg_host_address
  2. 排除阻止Master主机连接到Segment主机的问题。例如,可能需要重新启动或更换主机。
  3. 主机联机并能连接到它之后,从Master主机运行 gprecoverseg工具,来重新激活故障的Segment实例,并开始主实例和镜像实例的同步进程。例如:
    $ gprecoverseg
  4. 恢复过程会启动故障的Segment,并识别需要同步的已更改文件。该过程可能需要一些时间。等待过程完成。
  5. gprecoverseg完成后,系统进入 Resynchronizing 模式,并开始复制已更改的文件。此过程在后台运行,而系统处于联机并能接受数据库请求。
  6. 重新同步过程完成后,系统状态为Synchronized。运行gpstate工具,来验证重新同步进程的状态:
    $ gpstate -m
注意: 如果增量恢复未成功,且宕掉的Segment实例上的数据未损坏,请联系Pivotal支持中心。

使所有Segment回到其首选角色

当一个主Segment实例发生故障后,镜像会激活并成为主Segment。在运行gprecoverseg后,当前活动的Segment实例仍然是主Segment,而故障的Segment成为镜像。Segment实例不会回到其在系统初始化时指定的首选角色。这意味着,如果Segment主机的活动Segment数量比最佳系统性能时的数量要多,则系统可能处于一种潜在的不平衡状态。要检查不平衡的Segment并重新平衡系统,请运行:

$ gpstate -e

要重新平衡系统,则所有的Segment必须在线并且完全同步。在重新平衡期间,数据库会话保持连接状态,但是正在进行的查询被取消并回滚。

  1. 运行gpstate -m来确保所有镜像都是 Synchronized
    $ gpstate -m
  2. 如果有任何镜像处于Resynchronizing模式,等它们完成。
  3. 运行gprecoverseg工具并带有-r选项, 让Segment回到它们的首选角色。
    $ gprecoverseg -r
  4. 在重新平衡之后,运行gpstate -e来确认所有的Segment都处于 它们的首选角色。
    $ gpstate -e

从双重故障中恢复

在双重故障中,主Segment及其镜像均宕掉。如果不同Segment主机上的硬件故障同时发生,就会发生这种情况。如果发生双重错误,Greenplum数据库将不可用。

从双重故障中恢复:

  1. 对引起双重故障的问题进行故障排除,并确保Segment主机可操作并且可从Master主机访问。
  2. 重新启动Greenplum数据库。带选项 -r 的gpstop 停止并重新启动系统。
    $ gpstop -r
  3. 系统重启后,运行 gprecoverseg 重新激活失败的Segment实例。
    $ gprecoverseg
    注意: 如果增量恢复未成功,且宕掉的Segment实例上的数据未损坏,请联系Pivotal支持中心。
  4. gprecoverseg 完成后,使用 gpstate检查镜像的状态,并确保Segment实例已从“ Resynchronizing模式变为“Synchronized 模式:
    $ gpstate -m 
  5. 如果仍然有Segment实例处于change tracking 模式,则可以运行带 -F选项的gprecoverseg,来执行完整的Segment恢复。
    警告:一个完整的恢复在从活动segment实例(当前主实例)复制数据前, 会删除宕掉的segment实例的数据目录。在执行全量恢复前,确保segment故障不会引起数据损坏, 任何主机的segment磁盘问题都已经被修复。
    $ gprecoverseg -F
  6. 如果需要,将Segment实例恢复为首选角色。请参见使所有Segment恢复其首选角色

在未启用镜像的情况下进行恢复

  1. 确保能够从Master主机连接到该Segment主机。例如:
    $ ping failed_seg_host_address
  2. 排除妨碍Master主机连接到Segment主机的问题。例如,可能需要重新启动主机。
  3. 主机联机后,确认您可以连接到主机并重新启动Greenplum数据库。 gpstop带有-r选项可以停止并重启系统:
    $ gpstop -r 
  4. 运行gpstate工具来验证所有的实例都在线:
    $ gpstate

当Segment主机不可恢复时

如果主机由于硬件故障而无法运行,则将这些Segment恢复到一组备用的硬件资源上。如果启用了镜像,则可以使用gprecoverseg工具,将Segment实例从其镜像恢复到另一台主机上。例如:

$ gprecoverseg -i recover_config_file

其中, recovery_config_file 文件的格式是:

<failed_host>|<port>|<data_dir>[ <recovery_host>|<port>|<recovery_data_dir>]

例如,要恢复到与故障主机不同的主机,且不配置额外的表空间(默认pg_system表空间除外):

sdw1-1|50001|/data1/mirror/gpseg16 sdw4-1|50001|/data1/recover1/gpseg16

有关创建Segment实例恢复文件的信息,请参阅 gprecoverseg

新恢复的Segment主机必须预先安装了Greenplum数据库软件,并且必须与现有Segment主机的配置方式完全相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值