PG数据库如何实现同城异地多活数据同步?

最近在进行系统建设前的设计,系统使用的是pg的数据库。因为业务的实际要求,需要构建同城双活+异地单活  整个三活的模式。
系统在三个机房部署,客户随机访问其中任一机房服务。所以需要保障PG数据库在三个地方的数据是一致,且都能提供读写能力。
目前有想法是在应用层记录下每次的数据库操作,然后写入消息队列,由其他2地消费消息,重新执行数据库操作。但是这种存在消息消费不及时或者前后顺序不一致的情况,不知道有没有什么好的方案能够实现数据库在同城异地多活的模式。
要求三中心数据和服务都是热的,且提供写入的能力。

参与20

3同行回答

Joe_WJoe_W联盟成员业务咨询顾问中国电信股份有限公司云计算分公司
个人意见:LB随机两库双写,第三库比对校验,F5轮询显示全部

个人意见:LB随机两库双写,第三库比对校验,F5轮询

收起
电信运营商 · 2023-02-09
浏览1868

ChatGPT 回答

针对你的问题,我可以提供以下几种方案:

  1. 数据库复制方案

可以使用 PostgreSQL 的流复制(streaming replication)功能,将主数据库的数据同步到备份数据库。在同城的情况下,可以使用同步复制(synchronous replication),确保主数据库和备份数据库的数据是一致的。在异地的情况下,可以使用异步复制(asynchronous replication),可以通过设置延迟时间来控制数据同步的延迟。这种方案可以保证数据的一致性,但是需要考虑主备切换、数据冲突等问题。

  1. 数据库集群方案

可以使用 PostgreSQL 的集群方案,如 Pgpool-II、PgBouncer、HAProxy 等,将多个数据库节点组成一个集群,提供读写负载均衡和故障转移功能。在同城的情况下,可以使用同城多活模式,将读写请求分发到不同的节点上,提高系统的性能和可用性。在异地的情况下,可以使用异地多活模式,将数据同步到不同的节点上,保证数据的可用性。这种方案需要考虑数据同步、节点故障、网络延迟等问题。

  1. 数据库中间件方案

可以使用数据库中间件,如 TiDB、OceanBase、YugabyteDB 等,将多个数据库节点组成一个分布式数据库,提供读写负载均衡、数据分片、故障转移等功能。这种方案可以支持同城异地多活,提供数据的高可用性和高性能。但是需要考虑数据分片、数据迁移、节点故障等问题。

综上所述,针对你的需求,可以选择以上三种方案中的一种或多种进行组合,根据实际情况进行选择和调整。同时,需要注意数据的一致性、性能、可用性等问题,确保系统的稳定和可靠。

提问者

jillme
CIO某大型银行

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-02-01
  • 关注会员:4 人
  • 问题浏览:4224
  • 最近回答:2023-02-09
  • X社区推广