代码之家  ›  专栏  ›  技术社区  ›  Eric J.

只读PostgreSQL数据库的负载平衡和故障转移

  •  3
  • Eric J.  · 技术社区  · 14 年前

    脚本

    多个应用服务器承载用Java编写的Web服务,运行在SrimGrand DM服务器中。为了实现一个新的需求,他们需要查询一个只读的postgresql数据库。

    问题

    为了支持冗余,将至少运行两个PostgreSQL实例。对postgresql的访问必须是负载平衡的,并且如果某个实例出现故障,必须自动故障转移到当前正在运行的实例。自动发现新运行的实例是可取的,但不是必需的。

    研究

    我已经审查了官员 PostgreSQL documentation 在这个问题上。然而,这集中在对数据库的读/写访问的更一般的情况。热门的google结果往往会导致旧的新闻组消息或死的项目,如sequoia或db balancer,以及一个活跃的项目 PG Pool II

    问题

    你对pg pool ii的真实体验是什么?还有哪些简单可靠的替代方案?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Stephen Denne    14 年前

    PostgreSQL的维基也列出了 clustering solutions ,以及 Replication, Clustering, and Connection Pooling 有一个表显示哪些解决方案适合负载平衡。

    我期待着PostgreSQL 9.0将热备份和流复制结合起来。

        2
  •  1
  •   Grant Johnson    14 年前

    你看过SQL中继吗?

        3
  •  0
  •   Magnus Hagander    14 年前

    像这样的事情的标准解决方案是看看斯隆,朗迪斯或布卡多。它们都向许多从机提供异步复制,而从机是只读的。

    然后在TCP层上用类似haproxy的东西实现独立于此的负载平衡。这样的解决方案将能够对读取连接进行故障转移(尽管在故障转移时仍然会失去事务可见性,并且必须在新的从机上启动新事务,但这对大多数人来说都很好)

    那么剩下的就是主角色的故障转移。在所有这些系统上都有支持的方法。默认情况下,它们都不是自动的(因为数据库主角色的自动故障转移是 真正地 危险-考虑一下你的情况,一旦你有分裂的大脑),但他们可以很容易地自动化,如果需要这一点的主人以及。