网上很多关于Greenplum切换Standby master的文章,非常具有指导意义。然而在实际生产环境中,仍然由于操作问题,导致巨大的切换风险。本文以一次实际生产环境切换简单介绍一下。
-
切换背景 巡检发现Master主机报警,技术人员检查后,发现是硬件问题,需停机修复。因此需要先将Master(IP: 101, 主机名:mdw)切换到Standby Master(IP: 102,主机名:smdw)主机,待原Master主机修改后,再切换回去。
-
切换操作 2.1 停止Master(101)主机
gpstop -M fast
2.2 激活Standby Master
# 备份原Master主机中数据文件
mv /data/master/gpseg-1 /data/master/gpseg-1_bak
gpactivatestandby -d /data/gpdata/gpmaster/gpseg-1
gpstate -f
2.3 待原Master主机(mdw)恢复重启后,重新激活原主机为Master
# 先将原mdw加入集群,成为新的Standby Master
gpinitstandby -s mdw
# 在standby master(smdw)上,停止Greenplum
gpstop -M fast
# 在mdw上,将其激活为Master
gpactivatestandby -d /data/gpdata/gpmaster/gpseg-1
# 查看状态
gpstate -f
截至目前,似乎一切都正常。然而,连接数据库运行查询时,却发现无法查询数据库中的表数据。尝试重建表,却又提示表已存在。显然,在激活过程中,元数据出现了丢失! 如何解决? 原因: 在上述操作过程中,并未等数据库完成元数据同步,即开始了gpactivatestandby操作,导致元数据出现问题。 解决方法:
- 停止master数据库
gpstop -m
- 恢复原数据库备份文件
# 将现mdw上数据库文件备份
mv /data/master/gpseg-1 /data/master/gpseg-1_bak02
# 将原备份恢复
mv /data/master/gpseg-1_bak /data/master/gpseg-1
- 以维护模式启动master
gpstart -m
- 删除standby
gpinitstandby -r
- 停止master,重新启动Greenplum
gpstop -a
# 完成后启动Greenplum
gpstart -a
- 检查数据库 此时数据库已正常可使用,检查数据,一切正常。但数据库没有配置standby master
- 将standby master添加回去
gpinistandby -s smdw
搞定! 重要提示: 本次恢复,是在没有在数据库中的新增、修改、删除表的前提下进行。如已经新增、修改、删除了表,则可能无法恢复!注意,是表,不是表数据!请一定上述操作中,检查数据库情况,一定要在每一步完成数据库正常后,再执行下一步!