postgresql - Postgres 复制失败“新时间线 y 在当前恢复点之前从当前数据库系统时间线 x 分叉”
问题描述
我们有一个 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 的复制是通过前面的代理进行的,因此在滚动升级期间,一旦 master 发生变化,slave 不确定如何继续复制。
我想了解在复制过程中是否有一些东西可以处理这样的事情。
从服务器上的 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'
解决方案
该消息可能表明备用服务器在赶上主服务器之前已升级,现在主服务器无法担任备用服务器的角色。
pg_rewind
在将其用作备用服务器之前,您是否在服务器上运行过?
如果我的解释不成立,请更详细地描述您的程序。
推荐阅读
- machine-learning - 学习 Sin 函数
- javascript - 我无法从 React JS 获得 ReactDOM.render?
- javascript - 如何循环遍历一组值以优化对函数的调用次数?
- ios - 不调用约束协议扩展中的函数实现
- mysql - 向 WordPress 元表添加索引是个坏主意吗?
- vba - 如何使用 VBA 仅对包含数据的某些单元格进行数字格式化
- git - git rebase --interactive 只显示最近的两次提交
- reactjs - 我在哪里可以找到 react proptypes 警告的来源?
- ios - 如何使用 Flutter 打开 iPhone 上的默认电子邮件应用程序?
- angularjs - 将焦点移动到输入时的特定先前输入,AngularJs