环境介绍:
原主库IP 原主库hostname
192.168.1.202 pc1
192.168.1.204 pc3
当原主库故障恢复后,在原主库上执行gpstart -a时报错:
gpstart:pc1:gpadmin-[ERROR]:-gpstart error: Standby activated, this node no more can act as master.
执行gpstart -m虽然能启动成功,但是只是master-only模式,不能登录该数据库。
1 将原主库以standby的角色加入
1.1 删除原master的数据目录
cd /data/greenplum/data/master
mv gpseg-1 gpseg-1_bak
1.2 将原主库以standby的角色加入集群
在现主库上执行:
gpinitstandby -s pc1
--pc1是原主库的主机名
如果报错:
-[ERROR]:-Failed to copy data directory from master to standby.
20200331:15:20:51:008596 gpinitstandby:pc3:gpadmin-[ERROR]:-Failed to create standby
[ERROR]:-Error initializing standby master: ExecutionError: 'non-zero rc: 1' occurred. Details: 'ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 pc1 ". /usr/local/greenplum-db/./greenplum_path.sh; pg_basebackup -c fast -D /data/greenplum/data/master/gpseg-1 -h pc3 -p 5432 --xlog --force-overwrite --write-recovery-conf --target-gp-dbid 7 -E ./db_dumps -E ./gpperfmon/data -E ./gpperfmon/logs -E ./promote --progress --verbose"' cmd had rc=1 completed=True halted=False
请确认原主库的防火墙端口是否开通
#查看master standby信息
[gpadmin@pc3 ~]$ gpstate -f
1.3 主从切换
#杀掉pc3的master节点:
gpstop -m
#激活pc1上的standby master
gpactivatestandby -d $MASTER_DATA_DIRECTORY
#检查集群状态
gpstate -s
会看到Master host变成pc1了。
1.4 将最初的standby master以standby角色加入集群
主从切换完成后,会显示Master standby = No master standby configured。
所以需要将pc3以standby的角色加入集群,请参考1.1,1.2步骤:
正常情况下standby master的状态应该是这样的:
Standby host passive
1.5 需要确保master节点的keepalive处于启动状态,并确保浮动ip在master节点而非standby master节点
#检查keepalive状态命令
systemctl status keepalived
#启动keepalive命令:
systemctl start keepalived
若浮动ip在standby master上,则须在standby master上执行systemctl stop keepalived停止keepalive,使得浮动ip漂移到master上。 确定浮动ip漂移完成后,再启动standby master的keepalive。
--本篇文章主要参考了https://blog.51cto.com/ylw6006/2088991