Greenplum的HA实践

一、Greenplum 高可用原理

GP集群的 Primary MasterA节点部署一个备份节点,即Slava Master B节点。两个机器之间通过WAL 日志进行同步。如上图,Slave正常情况下处于非活跃状态,当Master发送故障无法恢复时,可激活Slave 继续提供服务。详细见《PG主备流复制机制

对于计算节点,每个Primary segment都有对应的镜像节点Mirror segment,用于数据备份以及容灾切换。详细同步流程见《Primary/Mirror 同步机制》。当主节点不可用时,系统会自动切换至镜像节点,保证集群的可用性。

二、容灾实践

接下面介绍不同节点出现故障,进行集群恢复的操作流程和实践。

2.1 Primary Master故障

当primary MasterA出现故障时,需要用户手动执行切换命令,将Slave B激活为Primary。使得集群可以正常使用,供用户访问。

步骤:

1,设置服务端口

export PGPORT=5432

2,启动激活Slave

gpactivatestandby -d $MASTER_DATA_DIRECTORY –af , 此时slave B成功转为Primary master。

3,收集统计信息

对所有数据库,执行ANALYZE命令。

2.1.1 增加Slave节点

如果需要为该集群增加Slave节点。步骤如下:

0,如果是新机器,则先要对机器进行初始化,打通ssh免密登录。创建数据目录。 如果是原来的GP机器,需要保证数据目录为空。

1,执行命令 :gpinitstandby -as mdw-snova-omzp2jsj

其中mdw-snova-omzp2jsj 为作为slave机器HOST名。

2.1.2 恢复原有Primary节点

如果要把原来的Primary A恢复为Primary Master。如下步骤:

1,首先按照2.1.1章节,把primary A节点添加为集群的slave节点,等主备节点数据同步完成后。

2,停掉Slave 机器上的master服务。

gpstop -m -M fast

3,升级primary A节点的slave进程为master。命令如下

export PGPORT=5432

gpactivatestandby -d $MASTER_DATA_DIRECTORY –af , 此时primary A成功转为Primary master。

对所有数据库,执行ANALYZE命令。

4,再清空slave B机器数据目录,

5,添加slave B节点为slave。

gpinitstandby -as slaveB

2.2 Mirror master故障

对于mirror节点出现故障,可以首先执行重启命令 gpstop –ar –M fast。如果mirror还是无法正常启动,则可以更换机器作为mirror。假设新增加的机器为 mirror C。

步骤如下:

1,首先删除原集群的备份mirror节点信息。

gpinitstandby –ra

2,将新机器初始化,创建目录,打通无密ssh登录。

3,执行新增mirror命令

gpinitstandby -as mirror

4,通过gpstate –m 查看主备同步信息和进度

5,如果备节点无法同步主节点数据,则执行命令 gpinitstandby –n强制数据同步。

2.3 mirror segment 进程挂掉

此时集群可以正常工作,读写数据。不过可靠性将大大降低。因为primary segment 的数据无法进行备份到mirror segment,如果此时primary 节点挂掉或者数据丢失,将造成集群不可用。

恢复mirror进程步骤:

1,执行命令gprecoverseg。

该命令会同步各segment的primary和mirror直接的差异数据。并对不存在的进程进行恢复。

2,执行 gpstate -m 查看恢复进度

2.4 primary segment 进程挂掉

如果出现primary segment进程故障,服务宕掉。则集群会自动把对应的mirror segment进程切换为primary segment进行服务。保证集群的可用性。

select * from gp_segment_configuration order by dbid;

上图可以看到,dbid为4的进程挂掉了,则对应的dbid为8的进程进行了角色切换,从m切换为p。mode为c,表示为change。现在的role为p,即为primary。原本角色preferred_role为m,即为mirror。

恢复步骤:

1,执行gprecoverseg。

该命令把primary进程给恢复正常工作。不过角色依然为m,而原来的mirror为p。

2,查看数据恢复进度 gpstate –m

当所有同步都为Synchronized状态,表明数据都同步完成后,但是有一个segment发送了角色变化。

3,恢复角色。

gprecoverseg –r ,然后通过gpstate –m查看恢复进度。

2.5 计算节点故障

如果计算节点故障,则受影响范围故障大。一个节点即存在primary和mirror segment进程服务,但是集群会正常工作。如下图:

可以看到status状态为d,即down

如果节点无法恢复,数据丢失。我们需要新添加一台机器。最简单的办法是,直接找一台机器HOST 1B,替换掉 HOST 1A如下图。

步骤如下:

1,新增加一台机器,需要初始化和HOST 1A一模一样。包括hostname,数据目录,打通ssh登录。

2,对已有集群/etc/hosts文件中,原来HOST 1A的IP修改为HOST 1B的IP即可。

3,gprecoverseg –aF,强制全量恢复。将数据全量同步到新增加机器对应数据目录。

4,切换角色,gprecoverseg –ra。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Greenplum的HA实践
GP集群的 Primary MasterA节点部署一个备份节点,即Slava Master B节点。
<<上一篇
下一篇>>