PostgreSQL提升为主库 时间线加一的问题

在使用PostgreSQL高可用集群过程中发现一个很难解决的问题,先记录在这里。

我们知道在PG流复制集群中,如果主库死掉了,备库要提升为主库有两种方法:

1)pg_ctl promote 

2)创建对应的trigger文件:touch " " /var/lib/pgsql/10/data/.tfile

但是这两种方法会使得备库提升为主的同时,时间线会+1,在pg_wal中可以看到:

-bash-4.1$ ls -rlth pg_wal/
total 49M
drwx------ 2 postgres postgres 4.0K May 25 14:09 archive_status
-rw------- 1 postgres postgres  16M May 25 14:09 000000010000000000000002
-rw------- 1 postgres postgres  16M May 25 14:12 000000010000000000000003
-rw------- 1 postgres postgres   41 May 25 14:13 00000002.history
-rw------- 1 postgres postgres  16M May 25 14:13 000000020000000000000003

但是如果我们不想让时间线+1,应该怎么提升为主节点呢?

为什么不想让时间线+1呢? 如果主库再起来时,需要作为备节点了,由于可能发生日志分支,需要使用pg_rewind找到相同日志的点,当做完rewind之后,发现无法启动主库。因为他们相同的点在时间线+1前的时间线中,而新的主库的时间线已经+1了。就无法创建同步,目前只能重做主库,但是如果数据量很大的时候,就很麻烦!

思路:

1)看看官方文档中有没有方法。

2)看看能不能提一个BUG。

原文地址:https://www.cnblogs.com/kuang17/p/9088393.html