问题标签 [logical-replication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
48 浏览

postgresql - 流复制协议中的适当备用状态更新

问题是关于流复制协议。这非常简单,是为物理复制而设计的,能够:

  • 发送服务器状态 >Primary keepalive message
  • 接收副本状态 >Standby status update
  • 发送 WAL 数据 >XLogData

还有逻辑解码,使用相同的 XLogData 帧通过插件发送从 WAL 解码的数据,pglogical而不是原始 WAL。

Streaming Replication 希望我提交 Standby 状态更新,以释放资源并删除旧的 WAL,根据文档

最后一个 WAL 字节的位置 + 1 ...

pglogical在 XLogData 帧中使用自己的消息返回自己的 LSN 位置,但这些不可用。

当数据写入不同的数据库时,逻辑解码不起作用。并且插槽位置还需要更新,否则插槽将丢失。因此,唯一的方法是从 发送 LSN 位置Primary keepalive message,根据文档发送

服务器上 WAL 的当前结束。

这令人困惑。如果插槽在位置 100 并且服务器已经在位置 200 上怎么办?

所以,

在试验和检查 pg_recvlogical 的来源之后,明白了,这Primary keepalive message并不意味着“服务器上 WAL 的当前结束”,而是实际上从插槽位置逐渐增加到当前(pg_current_wal_lsn())服务器 LSN。中间有 XLogData 帧(如果有的话)。似乎,类似的消息是按 LSN 顺序接收的。

现在,问题:

Q1) 它是否记录在某处?

Q2) 这有意义吗?我是不是误会了什么?

Q3) 流式消息总是按 LSN 排序吗?

Q4) 可以提交职位Primary keepalive message吗?