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

时间:2010-03-26 18:14:53

标签: postgresql load-balancing

方案

多个应用程序服务器托管用Java编写的Web服务,在SpringSource dm Server中运行。要实现新的需求,他们需要查询只读的PostgreSQL数据库。

问题

为了支持冗余,至少会运行两个PostgreSQL实例。必须对PostgreSQL进行负载平衡,并且如果实例应该关闭,则必须自动故障转移到当前正在运行的实例。需要自动发现新运行的实例,但不是必需的。

研究

我已就此问题审核了官方PostgreSQL documentation。但是,这侧重于对数据库的读/写访问的更一般情况。热门谷歌搜索结果往往导致较旧的新闻组消息或死亡项目(如Sequoia或DB Balancer)以及一个活动项目PG Pool II

问题

您对PG Pool II的实际体验是什么?还有哪些其他简单可靠的替代品?

3 个答案:

答案 0 :(得分:2)

PostgreSQL的wiki还列出了clustering solutionsReplication, Clustering, and Connection Pooling上的页面有一个表格,显示哪些解决方案适合负载平衡。

我期待PostgreSQL 9.0的Hot Standby和Streaming Replication的组合。

答案 1 :(得分:1)

你看过SQL Relay了吗?

答案 2 :(得分:0)

这样的标准解决方案是看Slony,Londiste或Bucardo。它们都为许多从站提供异步复制,其中从站是只读的。

然后,您可以在TCP层上实现与此无关的负载平衡 - 例如HAProxy。这样的解决方案将能够对读取连接进行故障转移(尽管在故障转移时仍然会丢失事务可见性,并且必须在新的从属服务器上启动新事务 - 但这对大多数人来说都没有问题)

然后你剩下的就是主角色的故障转移。在所有这些系统上都有支持的方法。默认情况下,它们都不是自动的(因为数据库主角色的自动故障转移真的很危险 - 考虑一旦你有大脑裂缝就会出现这种情况),但是如果它们可以很容易地自动化要求也需要掌握这一点。