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

4

场景

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

问题

为了支持冗余性,至少有两个PostgreSQL实例正在运行。访问PostgreSQL必须进行负载均衡,并且如果实例出现故障,必须自动切换到当前正在运行的实例。自动发现新运行的实例是可取的,但不是必需的。

研究

我已经查阅了官方PostgreSQL文档,但那主要关注于对数据库的读写访问的更一般情况。排名靠前的谷歌搜索结果往往会引导到较旧的新闻组消息或已停止维护的项目,如Sequoia或DB Balancer,以及一个活跃的项目PG Pool II

问题

您对PG Pool II有什么实际经验?还有哪些简单可靠的替代方案可用?


注意:我看到有人认为这应该放在Serverfault上。然而,这个问题是关于软件负载均衡选项的。那么,这是否更适合放在Serverfault上呢? - Eric J.
3个回答

2

@Stephen:我已经看了一下PGPool。另一个负载均衡的选择,PG Cluster,似乎已经被某个推销信用卡的人接管了他们的域名。 - Eric J.

1

你看过SQL Relay吗?


还没有,但现在会看一下。谢谢你的提示! - Eric J.

0

像这样的标准解决方案是查看Slony、Londiste或Bucardo。它们都提供异步复制到多个从节点,其中从节点是只读的。

然后您独立于此实现负载均衡 - 使用诸如HAProxy之类的TCP层。这样的解决方案将能够执行读连接的故障转移(尽管在故障转移时仍会丢失事务可见性,并且必须在新从节点上启动新事务 - 但对大多数人来说这没问题)

然后您所剩下的就是主角色的故障转移。所有这些系统都有支持的方法来完成它。默认情况下它们都不是自动的(因为数据库主角色的自动故障转移真的很危险 - 考虑一旦出现脑裂的情况),但如果需要主服务器也可以轻松地自动化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接