一.背景
Greenplum的架构中协调节点的高可用性是通过主从方式实现。Greenplum支持master自动故障转移,以及当故障没有自动转移的场景,需要人工介入进行故障处理和恢复。
二.故障转移流程
1. 单点故障
Master自动故障转移可以处理单点故障,当master, standby , master probe segment其中一个发生故障对应的场景说明如下。
1.1. Master故障 , standby和master probe正常
当不支持自动故障转移,集群不可用,需要人工 gpactivatestandby
当支持自动故障转移,master probe 将自动激活standby.
当stanby成为新的master,需要完成如下步骤:
(1) 通过gpinitstandby, 启动原来的master作为standby 。
(2) 原来的master和当前的master,角色倒换。(目前没有合适的命令,只能通过如下,多次命令操作,如master:host1,standyby:host2)
i) host2上操作,pg_ctl stop -D /data01/gpadmin/gpdata/master/gpseg-1/ //停服务
ii)重命名目录:
cd /data01/gpadmin/gpdata/master
mv gpseg-1 gpseg-1_bak
cd /data01/gpadmin/gpdata/master
mv gpseg-1 gpseg-1_bak
iii)现在的standby host1
gpactivatestandby -d /data01/gpadmin/gpdata/master/gpseg-1 //激活standby
gpinitstandby -s host2 //添加standby
1.2. Standby故障 , master和master probe 正常
当不支持自动故障转移synchronous_standby_names为空 ,集群正常运行。
当不支持自动故障转移synchronous_standby_names 是 *, 集群正常运行,写事务阻塞,直到手工unblocked。
当支持自动故障转移master probe保存standby out-of-sync信息到segment catalog 并unblock 写。
当人工修复故障,重新启动standby.
1.3. master probe segment故障, master和standby正常
master probe支持自动故障转移,需要结合具体情况,一般GP自动指派一个新的活动segment作为 master probe 。
2. 2个角色故障
发生2个角色故障,需要做如下操作恢复集群。
2.1. Master和standby同时故障
如果发生故障master可以启动,通过gpstart 恢复集群;如果只有standby能够启动,可以通过 gpactivatestandby 把standby变成master。
如果gpactivatestandby把standby变成mater失败,可以通过gpactivatestandby -f 把standby强制变成mater,但会存在数据一致性的风险。
2.2. Master和master probe同时故障
如果master probe segment能够正常启动,按照流程2.1 尝试首先把standby变成master。,如果不行,需要通过gpactivatestandby -f 把standby强制变成mater,但会存在数据一致性的风险。
2.3. Standby和master probe同时故障
(1) 需要以维护方式(utility mode)连接master probe segment ,并标记不一致 或在standby数据目录中创建promote.deny文件 ,阻止gpactivatestandby运行,导致数据不一致,知道第2步操作完成。
(2) 可以通过gpconfig设置master synchronous_standby_names为空,然后master继续服务集群。
三.参考资料
https://github.com/greenplum-db/gpdb/wiki/Master-standby-failover-workflow
网友评论