我们有一个PostgreSQL设置,每个可用区中有3个节点,每个可用区都跨可用区复制。所有复制都是带异步复制的热待机。我们利用每个从AZ群集的复制插槽。
我们经常对DB容器进行自动滚动升级。一段时间后,slaves停止从主群集复制,并显示如下消息:
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的复制是在前面的代理发生的,因此在滚动升级期间,一旦主服务器发生更改,从服务器就不确定如何继续复制。
我想知道在复制过程中,协议中是否有一些东西可以处理这样的事情。
slaves上的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'发布于 2019-08-07 13:51:41
该消息可能表明备用服务器在赶上主服务器之前已经升级,现在主服务器不能充当备用服务器的角色。
在将服务器用作备用服务器之前,您是否在服务器上运行了pg_rewind?
如果我的解释不正确,请更详细地描述您的操作过程。
https://stackoverflow.com/questions/57381062
复制相似问题