Search code examples
clonepostgresql-9.5standbypacemakerrepmgr

Is it possible to demote a master node without using "repmgr standby clone" and pg_rewind


I am currently using postgresql with log shipping replication. I use a master/slave resource of pacemaker to deal with postgresql failover.

I was asking if there is a way to demote a master, set it as standby and keep synchronized without using "repmgr standby clone" neither pg_rewind.

In fact, I want the old master to be quickly ready to get back to master state and "repmgr standby clone" takes several minutes to recover which is too long.

I see that it is possible to use pg_rewind to synchronize faster but it implies to have wal_log_hints enable, and I afraid that this options will decrease the performances of the master. The master is already too much busy.

I try to just write the recovery.conf in data directory, the master has well turned to slave mode, however it doesn't have upstream:

[root@bkm-01 httpd]# su - postgres -c "/usr/pgsql-9.5/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf cluster show" Role | Name | Upstream | Connection String ----------+--------|----------|-------------------------------------- * master | node-02 | | host=node-02 user=repmgr dbname=repmgr standby | node-01 | | host=node-01 user=repmgr dbname=repmgr

I wish it is clear enough, I actually a newbie in database replication. Any help would be appreciated.


Solution

  • I found the solution by myself. In fact the former-master just need to be registered after been demoted. --force should be used if node was previously registered.

    [root@node-01 ] su - postgres -c "/usr/pgsql-9.5/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf standby register --force"