我们有一个PostgreSQL设置,在每个可用性区域中有3个节点,每个可用性区域都在可用性区域中复制。所有复制都是热备用的异步复制。我们为每个从AZ集群利用复制插槽。
我们经常对数据库容器进行自动滚动升级。一段时间后,从集群停止从主集群复制,并显示如下消息:
2019-08-06 16:57:11.061 UTC [2987482] LOG: replication terminated by primary
server
2019-08-06 16:57:11.061 UTC [2987482] DETAIL: End of WAL reached on timeline 3
at 0/293D7AE0.
2019-08-06 16:57:11.136 UTC [2987477] LOG: new timeline 4 forked off current
database system timeline 3 before current recovery point 0/293D7D28
我正在寻找一些指针来解决这个问题。
我们尝试将每个群集缩减为每个AZ中的单个节点,但我们在那里没有看到这个问题。我的理解是,由于AZ中的复制是在前面使用代理进行的,因此在滚动升级期间,一旦主节点发生更改,从属节点不确定如何继续复制。
我想了解在复制过程中是否有协议可以处理类似的事情。
从服务器上recovery.conf如下所示:
standby_mode = 'on'
primary_conninfo = 'host=foo-bar.com port=5432 user=repluser password=
sslmode=verify-ca sslcert=/etc/db_repl_secrets/tls.crt
sslkey=/etc/db_repl_secrets/tls.key sslrootcert=/etc/db_repl_secrets/ca.crt'
primary_slot_name = 'stolon_us_east_1'
recovery_target_timeline = 'latest'
1条答案
按热度按时间krugob8w1#
该消息可能表示备用服务器在赶上主服务器之前已被提升,现在主服务器无法充当备用服务器的角色。
在将服务器用作备用服务器之前,是否在服务器上运行了
pg_rewind
?如果我的解释有误,请更详细地描述您的程序。