【问题标题】:Debezium with RDS postgres and master-replica failover带有 RDS postgres 和主副本故障转移的 Debezium
【发布时间】:2022-04-16 04:38:19
【问题描述】:

我有一个 RDS 多可用区 postgres 数据库(主备用),我正在研究 Debezium 以将更改流式传输到 Kafka。

我正在阅读有关故障转移时可能出现问题的文档:https://debezium.io/documentation/reference/1.1/connectors/postgresql.html#_cluster_failures,这看起来像是一个非常可怕的场景。

从我通过故障转移重新启动进行的一些测试中,似乎当端点从主节点更改为备用节点时,Debezium 连接器继续工作并自动在备用节点上创建一个复制槽。但据我了解,除非您能确保在写入新数据之前创建新主(旧备用)上的复制槽,否则无法保证不会丢失数据。

有人有这种设置的经验吗?如果发生故障转移,您如何管理事务?

【问题讨论】:

  • 你找到答案了吗?
  • 不,据我所知没有解决方案。因此,我最终放弃了 Debezium。

标签: postgresql amazon-rds failover debezium logical-replication


【解决方案1】:

截至 2022 年,使用 Patroni 在该领域有一些新进展,在 Percona 中有描述 博客:How Patroni Addresses the Problem of the Logical Replication Slot Failover in a PostgreSQL Cluster

上述方法的要点:

  • 此解决方案需要 PostgreSQL 11 或更高版本,因为它使用从 PostgreSQL 11 开始提供的 pg_replication_slot_advance() 函数来推进插槽。
  • 下游连接可以使用 HAProxy,以便连接将自动路由到主节点(本文未介绍)。无需修改 PostgreSQL 代码或创建任何扩展。
  • 插槽的复制通过 PostgreSQL 协议 (libpq) 而不是任何特定于操作系统的工具/方法进行。 Patroni 使用rewindsuperuser 凭据。 Patroni 使用pg_read_binary_file() 函数读取槽信息。
  • 在副本端创建逻辑槽后,Patroni 使用 pg_replication_slot_advance() 将槽向前移动。
  • 永久槽信息将被添加到 DCS 中,并由 Patroni 的主实例持续维护。所有 DCS 选项(zookeeper、etcd、consul 等)都引入并支持名为“status”的新 DCS 密钥。
  • hot_standby_feedback 必须在需要维护逻辑复制槽的所有备用节点上启用。
  • 必须启用Patroni 参数postgresql.use_slots 以确保每个备用节点都使用主节点上的插槽。

【讨论】:

  • 谢谢!听起来很有希望,我会检查一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多