GP段镜像概览

1.简介

当开启GP高可用时,会有两种类型的段实例类型:主和镜像(primary和mirror)。每个主段有一个相应的镜像段。主段实例接收主节点(master)发送的请求,修改段数据并将这些改变复制到相应的镜像段。如果GP发现主段失败或变的不可用,其将把镜像段改为主段,并将不可用的主段变为镜像段。失败发生时正在进行的事务将被回滚和必须重新开始。接着,管理员必须恢复镜像段,并允许镜像段和目前的主段进行同步,接着,将主段和镜像段进行角色互换,以便它们各自处于优选角色。

如果段镜像未被开启,如果一个段实例失败,GP将关闭整个系统。GP数据库可用前管理员必须手工恢复所有失败的段。

当开启现存系统的段镜像时,获取主段的快照期间,主段实例将继续为用户提供服务。当获取完快照并被部署与镜像段实例时,也将记录主段上发生的改变。快照部署于镜像段后,镜像段通过基于预写日志(Write-Ahead Logging (WAL))的流复制来同步数据并保持最新。GP数据库WAL复制采用walsender和walreceiver复制进程。Walsender进程是主段进程。Walreceiver为镜像段进程。

数据库发生改变时,捕获改变的日志流向镜像段以保持其与相应的主段同步。WAL复制期间,数据库改变被应用前写入日志,以确保进行中操作的数据完整性。

当GP探测到一个主段失败后,WAL复制进程停止,且镜像段自动启动为活动的主段。如果主段活动期间镜像段失败或变得不可访问,主段会将数据库变化记录到日志中,当镜像段恢复后将应用这些日志。

这些GP数据库系统目录表包含镜像和复制信息:

1)系统目录表gp_segment_configuration包含主段和镜像段以及主节点和备节点实例的目前配置和状态。

2)系统目录视图gp_stat_replication包含用于GP数据库主节点和段镜像的walsender进程的复制统计信息。

2.配置

镜像段实例能放在集群中不同配置的主机上。作为最好的实践,主段和相应的镜像段应该位于不同的主机上。每个主机必须有相同数目的主段和镜像段。当用GP数据库工具gpinitsystem或gpaddmirrors创建段镜像时,你可以指定段镜像的配置,组镜像(group mirroring,默认)或扩展镜像(spread mirroring)。通过gpaddmirrors,你能用gpaddmirrors配置文件并在命令行指定该文件来创建定制镜像配置。

组镜像为默认镜像配置。每个主机主段的镜像段放于其他主机上。如果单个主机失败,作为失败主机备份的主机上的活动主段数目将会加倍。具体如图1所示。

图1. GP数据库组段镜像配置

扩展镜像将每个主机上的镜像扩展到多个主机,以便如果任何单个主机失败,其他主机都不会将多于1个镜像提升为活动主段。扩展镜像仅可能用于主机多于每个主机上段的场景。图2对扩展镜像配置中镜像的放置进行了说明。

 

图2. GP数据库中扩展段镜像配置