Greenplum容灾实践

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

相关文章

来自专栏SDNLAB

【技术专栏】SDN交换机功能测试工具OFTest安装与使用总结

【概要】SDN功能测试工具通过发送协议数据包并根据被测试对象的反馈来判断其功能的完整性,比较典型的工具是OFTest,它模拟控制器向交换机发送OpenFlow协...

3998
来自专栏后端云

Openstack两个容易混淆的概念

az是在region范围内的再次切分,只是工程上的独立,例如可以把一个机架上的机器划分在一个az中,划分az是为了提高容灾性和提供廉价的隔离服务。选择不同的re...

823
来自专栏互联网大杂烩

高并发解决方案

客户端访问的服务器并不真正提供服务,从别的服务器获取资源。 做转发请求,负载均衡,

572
来自专栏容器化

一个典型的kubernetes工作流程 - kubernetes

2102
来自专栏Spark学习技巧

Spark调优系列之硬件要求

估计所有的spark开发者都很关心spark的硬件要求。恰当的硬件配置需要具体情况具体分析,浪尖在这里给出以下建议。 一,存储系统 因为因为大多数Spark工作...

2028
来自专栏天问的专栏

【腾讯云的1001种玩法】运维的网络管理利器:弹性网卡体验

云计算当前给我们的业务运营提供了极大方便,越来越多的机构或公司利用公有云部署自己的业务应用,国内的阿里云、腾迅云、青云和 Ucloud 等厂商也取得了很大的发展...

6271
来自专栏程序猿

设计一个Nginx集群,当其中一台机器故障时候迅速调整并自动恢复?多Master部署情况下应该怎样进行?

先说一下Nginx的特点 Nginx能作为HTTP服务器,有下面几个特性: 处理静态文件,索引文件以及自动索引。 打开文件描述缓冲符 无缓存的反向代理加速,简...

3035
来自专栏desperate633

浅谈应对数据库高负载访问的几种思路1.使用优化查询的方法2.主从复制, 读写分离, 负载均衡3.数据库分表, 分区, 分库

目前,大部分的主流关系型数据库都提供了主从复制的功能,通过配置两台(或多台)数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站可以利用...

611
来自专栏文渊之博

服务器磁盘的维护建议

维护建议--服务器磁盘 定期检查磁盘状态(大部分RAID提供商都提供了管理查看软件),当发现有单块磁盘损坏时应立即更换。 定期检查剩余空间,预估磁盘使用趋势。 ...

1678
来自专栏北京马哥教育

网站打开太慢可能性及排查分析

一、网络问题 1、临时性 检查:ping, mtr,dig,dig+trace 等命令,检查网络状况,DNS等 解决:联系机房或视具体情况而定 eg:http:...

3076

扫码关注云+社区