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 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

php连接mysql数据库的几种方式(mysql、mysqli、pdo)

php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下...

4058
来自专栏DevOps时代的专栏

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

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

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

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

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

1112
来自专栏Linyb极客之路

深入聊聊微服务架构的身份认证问题

随着微服务架构的兴起,传统的单体应用场景下的身份认证和鉴权面临的挑战越来越大。单体应用体系下,应用是一个整体,一般针对所有的请求都会进行权限校验。请求一般会通过...

1184
来自专栏石奈子的Java之路

原 Intellij IDEA必要条件

1395
来自专栏技术支持log

新购腾讯云 coreOS 系统服务器一段时间后无法登陆原因

问题现象: 新购coreOS刚开始可以正常远程登陆,但是过一段时间后就无法远程登陆了,如果有留意会发现在登陆系统10分钟左右后窗口会弹出下列信息,通知了系统会...

1231
来自专栏企鹅号快讯

如何搭建Nginx服务器做到负载均衡?

小白,这是一篇关于:使用tomcat和Nginx进行配合做负载均衡和静态与动态资源分配的文章,春招前学一下~ 好的,大佬! 1.什么是Nginx? Nginx也...

2235
来自专栏苍云横渡学习笔记

【第一部分-django论坛从搭建到部署】一个完整的Django入门指南

【第七部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记(未翻译)

68311
来自专栏懒人开发

bpkg工具

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

1193
来自专栏我是攻城师

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

2934

扫码关注云+社区