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。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何更改SELinux模式

Security Enhanced Linux是一个Linux安全模块,用于强制或基于角色的访问控制。SELinux默认与CentOS和Fedora打包在一起,...

2512
来自专栏我是攻城师

如何监控你的Hadoop+Hbase集群?

3684
来自专栏Laoqi's Linux运维专列

apache-ab 并发负载压力测试

3323
来自专栏陈树义

如何在IntelJ下用Maven创建一个Web项目

相信一开始做Web项目的同学都是直接把项目包放在WEB-INF/lib目录下,然后就开始做项目了。但是之后接触了一些使用了Maven进行包管理的项目,我们就不得...

2756
来自专栏懒人开发

bpkg工具

最近接手一个项目 本来是jenkinsfile相关, 但是由于这里很多实现都是用的shell 并且还是用的 bpkg 做的管理, 再在bpkg基础上, 写了...

1803
来自专栏DevOps时代的专栏

网络上找不到的 Jenkins 集成方案

Jenkins是一个广泛用于持续构建的可视化web工具,就是各种项目的的“自动化”编译、打包、分发部署,将以前编译、打包、上传、部署到Tomcat中的过程交由J...

1272
来自专栏xingoo, 一个梦想做发明家的程序员

Tomcat6.0 管理器配置

最近忙着毕业答辩,填写材料,好多事情都给耽搁了!一个月都没有继续翻译tomcat,这回有点时间赶紧补上。 这部分,其实对开发者或者tomcat管理者来说,只...

2117
来自专栏Web项目聚集地

MyBatis-逆向工程「Generator使用指南」

当你利用搜索引擎搜索Maven会出来很多名词:对象模型、标准集合、依赖管理系统这是啥啊?差不多得你会用了Maven才会理解这些名称吧,我找到了一个博主的博客

1612
来自专栏木子墨的前端日常

CORS跨域与Nginx反向代理跨域优劣对比

最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理。这两种方案项目中都有在用,各有优缺,关于具体使...

2552
来自专栏晓晨的专栏

Jenkins持续集成演示

1597

扫码关注云+社区

领取腾讯云代金券