Greenplum容灾实践

栏目: 数据库 · 发布时间: 6年前

内容简介:GP集群的 Primary MasterA节点部署一个备份节点,即Slava Master B节点。两个机器之间通过WAL 日志进行同步。如上图,Slave正常情况下处于非活跃状态,当Master发送故障无法恢复时,可激活Slave 继续提供服务。详细见对于计算节点,每个Primary segment都有对应的镜像节点Mirror segment,用于数据备份以及容灾切换。详细同步流程见《接下面介绍不同节点出现故障,进行集群恢复的操作流程和实践。

一、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。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Blockchain Basics

Blockchain Basics

Daniel Drescher / Apress / 2017-3-16 / USD 20.99

In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试