在使用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。