REPMGR脑裂问题紧急处理步骤

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REPMGR脑裂问题紧急处理步骤相关的知识,希望对你有一定的参考价值。

目录
环境
症状
问题原因
解决方案

环境
系统平台:N/A
版本:5.6.4,5.6.5
症状
Repmgr集群脑裂是指数据库集主节点和至少一个备节点均认为自己为主库导致集群状态混乱,此时数据库写入数据则只会写入到VIP所在节点,状态混乱节点无法正常同步数据。

Repmgr集群脑裂状态通常如下所示:

[highgo@hgdb ~]$ repmgr cluster show

ID | Name          | Role    | Status    | Upstream      | Location | Priority | Replication lag | Last replayed LSN

----+---------------+---------+-----------+---------------+----------+----------+-----------------+-------------------

1  | 10.10.10.1 | primary | * running |               | default  | 100      | n/a             | none             

2  | 10.10.10.2 |!primary |  running |               | default  | 100      | n/a             | none 

问题原因
造成该问题的原因多种多样,通常由于以下几种可能性:

1、主备几点的网络出现问题。

2、人工误操作,导致主节点暂时失活,此时备节点发生切换,主节点又恢复为活跃状态。

3、其它问题导致备节点无法访问主节点数据库状态。

解决方案
状态检查:

集群状态命令:repmgr cluster show

守护进程检查:ps -ef | grep repmgrd

数据库状态检查:pg_ctl status或者ps -ef | grep postgres

VIP检查:ip addr |grep VIP地址

日志排查

主要通过数据库日志和高可用集群管理日志排查发生脑裂的原因。

恢复步骤

①判断当前集群中数据最新节点(重要), 该操作的目的是为了保证数据零丢失/尽可能少丢失,判断方式可以通WAL日志的生成日期和LCN号等,也可以通过业务某些变更表来确认最新数据集群。

②关闭滞后节点所有数据库进程与守护进程然后重新启动。

③如果第二步无法解决脑裂问题,则需要重启滞后节点服务器。

④如果重启服务解决脑裂问题,则需要将滞后节点重做为备节点加入到集群中。

PS:如何查看数据库当前的LSN号?

highgo=#  select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
7/B312B9A8
(1 row)

以上是关于REPMGR脑裂问题紧急处理步骤的主要内容,如果未能解决你的问题,请参考以下文章

HG_REPMGR启动失败排查和状态检查步骤

repmgr 集群双主问题处理

开启/关闭集群日志的步骤

开启/关闭集群日志的步骤

集群备库重做步骤

GlusterFS脑裂案例-brick中的存储数据不一致