Pivotal Greenplum® 6.9-管理员指南-管理系统-检测故障的segment

检测故障的segment

启用segment镜像之后,当一个主segment实例宕机时,Greenplum数据库会自动故障切换到镜像segment实例。如果该镜像segment实例的每一部分数据都处于联机状态,则用户感知不到主segment已宕机。如果故障发生时正在进行事务处理,则正在进行的事务将回滚,并在重新配置的segment集合上自动重新启动。gpstate工具可用于识别故障的segment。该工具显示系统目录表中的信息,包括gp_segment_configuration

如果由于segment故障导致整个Greenplum数据库系统无法运行(例如,如果未启用镜像或没有足够的segment联机以访问全部的用户数据),则用户在尝试连接数据库时将看到错误。返回给客户端程序的错误可能表示故障。例如:

ERROR: All segment databases are unavailable

如何检测和管理segment故障

在Greenplum数据库master主机上,Postgres的postmaster进程分叉出一个故障探测流程,ftsprobe。这也称为FTS(Fault Tolerance Server)进程。如果FTS失败,则postmaster会重启它

FTS循环运行,每个循环之间有一个睡眠间隔。在每次循环中,FTS通过使用gp_segment_configuration配置表中注册的主机名和端口号,与主segment实例进行TCP套接字连接,来探测每个主segment实例 。如果连接成功,segment将执行一些简单的检查,并报告给FTS。检查包括在关键的segment目录上,执行一次stat系统调用,并检查segment实例中的内部故障。如果未检测到问题,则发送肯定的答复给FTS,并且不对该segment实例采取任何措施。

如果无法建立连接,或者在超时时间内未收到答复,则尝试对segment实例进行重试。如果配置的最大探测次数尝试失败,FTS会探测该segment的镜像以确保其处于开启状态,然后更新gp_segment_configuration表,将主segment标记为“down”,并将镜像segment设置为主segment。FTS执行这些操作,然后更新gp_configuration_history 表。

当只有一个活动的主segment且对应的镜像segment处于关闭状态时,主节点会进入not synchronizing 状态,并继续记录数据库更改到日志中,因此镜像可以被同步,而无需执行从主节点到镜像的完整数据拷贝。

运行gpstate工具并带有-e选项可以展示单个主segment和镜像segment实例 的任何问题。gpstate的另外一些选项也能显示所有主segment或镜像segment实例的信息,例如 -m(镜像实例信息)、-c(主segment和镜像segment配置信息),另外也可以 显示主segment和镜像segment的问题。

您也可以从系统表gp_segment_configuration查看当前模式: s (同步状态)n (非同步状态),还有当前状态 u (在线) or d (离线)。

gprecoverseg工具可以用于将离线的镜像segment重新加入集群默认情况下, gprecoverseg会执行增量恢复,首先将镜像放入同步模式,接下来会重放主segment上 记录下来的日志变化到镜像segment。如果增量恢复失败,整个恢复便会失败。此时可以执行gprecoverseg 并带有-F选项,以执行一个全量恢复,该操作会复制主segment上的所有数据到镜像segment上。

segment实例恢复后,gpstate -e命令可以列出所有已切换的主segment和镜像segment实例信息。 该信息表示系统目前处于不均衡状态(主实例和镜像实例不在他们的初始配置角色)。如果系统目前处于不均衡状态,在segment 主机系统上可能存在活动的主segment实例分布不均匀。

系统表gp_segment_configuration包含列role和 preferred_role。该列上的值为p代表主segment,m 代表镜像segment。role列展示segment实例当前角色,preferred_role 列展示segment实例原来的角色。

在一个平衡的系统中,所有segment实例的role和preferred_role 列都是对应一致的。当某一个列存在不一样的情况时,表明系统是不平衡的。为了重新平衡集群并将所有的segment恢复到他们本来的角色,可以运行带有-r选项的gprecoverseg命令。

故障切换和恢复的简单示例

考虑一对主segment实例和镜像segment实例,其中主segment已故障转移到镜像segment。下表显示了开始到正常的主segment之前,segment实例在gp_segment_configuration 表中的首选角色、当前角色、模式和状态。

也可以通过执行gpstate -e来显示主segment和镜像segment的状态信息。

 首选角色角色模式状态
p

(primary)

m

(mirror)

n

(not synchronizing)

d

(down)

镜像m

(mirror)

p

(primary)

n

(not synchronizing)

u

(up)

segment实例不为其首选角色,且主segment故障。镜像segment已启动,角色变为主segment,并且它为非同步模式,因为它的镜像(即故障的主segment)已处于故障状态。在修复segment主机和主segment的问题之后,您可以使用gprecoverseg来恢复故障的主segment,并启动主segment和镜像segment之间的同步。

一旦 gprecoverseg 完成后,各segment的状态如下表所示,其中该对主segment和镜像segment已启动,且其当前角色与他们的首选角色是反的。

 首选角色角色模式状态
主segmentp

(primary)

m

(mirror)

s

(not synchronizing)

u

(up)

镜像segmentm

(mirror)

p

(primary)

s

(not synchronizing)

u

(up)

gprecoverseg -r 命令通过将segmet角色恢复为其首选角色,来重新平衡整个集群系统。

 首选角色角色模式状态
主segmentp

(primary)

p

(primary)

s

(synchronizing)

u

(up)

镜像segmentm

(mirror)

(mirror)

s

(synchronizing)

u

(up)

配置FTS行为

有一系列的服务器配置参数会影响FTS行为:

gp_fts_probe_interval:开始下一个FTS循环的时间间隔(以秒为单位)。例如,如果设置为60秒而探测循环需要10秒,则FTS进程将休眠50秒。如果设置为60秒而探测循环需要75秒,则FTS进程将休眠0秒。默认值为60,最大值为3600。

gp_fts_probe_timeout:master和segment之间的探测超时时间(以秒为单位)。默认值为20,最大为3600。

gp_fts_probe_retries:探测segment的尝试次数。例如,如果设置为5,则第一次尝试失败后将进行4次重试。默认值:5

gp_log_fts:FTS的日志记录级别。该值可以是“ off”,“ terse”,“ verbose”或“ debug”。可以在生产中使用“verbose”设置,来为故障排除提供一些有用的数据。“debug”设置不应在生产中使用。默认值:“ terse”

gp_segment_connect_timeout:等待镜像segment响应的最长时间(以秒为单位)。默认值:600(10分钟)

除了可以使用FTS执行错误检查外,不能发送数据到其镜像segment的主segment可以改变镜像的状态为down。 主segment会将同步数据暂时排队处理,如果gp_segment_connect_timeout时间超时, 此时意味着镜像故障,系统会标记镜像为down并将主segment变为变化追踪(change tracking)模式。


检查故障的Segment

启用镜像后,系统允许存在故障的segment实例,而不会中断服务或者出现任何故障迹象。您可以使用gpstate命令来验证系统的状态。 gpstate 提供了Greenplum数据库系统每个单独组件的状态,包括主segment,镜像segment,主master和备用master。

检查故障的segment

  1. Master上,运行 gpstate 工具并带选项 -e ,可显示有错误情况的Segment:
    $ gpstate -e

    如果工具列出Segments with Primary and Mirror Roles Switched,表明Segment未处于其首选角色(系统初始化时分配给它的角色)。这意味着系统处于一种潜在的不平衡状态,因为某些segment主机的活动segment的数量,可能比最佳系统性能状态下的数量要多。

    显示Config status为Down的segment,表示其对应的镜像segment已下线。

    修复该问题的说明,请参阅从segment故障中恢复

  2. 要获取故障segment的详细信息,您可以检查 gp_segment_configuration目录表。例如:
    $ psql postgres -c "SELECT * FROM gp_segment_configuration WHERE status='d';"
  3. 对于故障的segment实例,请注意主机、端口、首选角色和数据目录。这些信息将帮助您确定要进行故障排除的主机和segment实例。
  4. 要显示有关镜像segment实例的信息,请运行:
    $ gpstate -m

 

检查日志文件中故障的Segment

日志文件可以提供信息,以帮助确定错误的原因。Master和Segment实例各自在pg_log数据目录下位置,有它们自己的日志文件。Master日志文件包含的信息最多,您应该始终首先检查它。

使用 gplogfilter工具,来检查Greenplum数据库日志文件以获取更多信息。要检查Segment日志文件,请使用gpssh对segment主机运行gplogfilter工具。

检查日志文件

  1. 使用 gplogfilter,检查Master的日志文件中WARNING、ERROR、FATAL 或者 PANIC  日志级别消息:
    $ gplogfilter -t
  2. 使用 gpssh,检查每个Segment上日志文件中WARNING、ERROR、FATAL 或者 PANIC日志级别的消息。例如:
    $ gpssh -f seg_hosts_file -e 'source 
    /usr/local/greenplum-db/greenplum_path.sh ; gplogfilter -t 
    /data1/primary/*/pg_log/gpdb*.log' > seglog.out

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值