内容简介: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。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- vue项目实践004~~~一篮子的实践技巧
- HBase实践 | 阿里云HBase数据安全实践
- Spark 实践:物化视图在 SparkSQL 中的实践
- Spark实践|物化视图在 SparkSQL 中的实践
- HBase实践 | 数据人看Feed流-架构实践
- Kafka从上手到实践-实践真知:搭建Zookeeper集群
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。