我的应用程序使用Postgresql 9.0,由一个或多个与全局数据库交互的工作站组成:它像一个普通的客户端服务器应用程序一样,但是为了避免任何其他硬件,所有工作站都包括客户端和服务器:将主工作站升级为可操作也可以作为服务器,其他任何客户端也可以作为它的客户端。这种解决方案使我可以扩展:用户最初可能需要一个工作站,但在初始阶段它可以决定将来扩展到更多,而无需使用无用的单独服务器。
我试图避免如果主站掉线,所有其他站都停止工作;为此,最好的解决方案是将主数据库连续复制到一个或多个站上未使用的数据库。
搜索我发现pgpool可以满足我的需求,但是从所有示例和教程中,看来的故障点已从主数据库转移到运行pgpool 的服务器。
我读了一些有关多个pgpool和心跳工具的信息,但不清楚如何做到这一点。
考虑到我的体系结构,不存在分离的专用服务器,有人可以给我一些提示吗?如果发生故障转移,pgpool似乎可以自动执行所有操作,那么我是否可以认为标准用户可以在没有管理员干预的情况下处理故障转移情况?
最佳答案
对于这类应用程序,我真的很喜欢Amazon's Dynamo设计。链接中的文档很大,但是值得阅读。实际上,已经有一些应用程序实现了这种方法:
也许其他人,但我不知道。 Cassandra始于Facebook,Voldemort是LinkedIn所使用的一种。使事物分布并在数据分布中添加冗余,您将摆脱传统的主从复制方法。
如果您想使用PostgreSQL,实现这种方法应该没什么大不了的。您将需要实现一个额外的层(代理),该层将根据预先配置的选项来决定如何检索/保存数据。
代理层可以通过以下方式实现:
您可以在中间件层(源于Skype的项目)上使用PL/Proxy。它已与PostgreSQL深度集成,因此我将其结合为选项2和3。PL/Proxy将要求您使用函数对数据库进行所有类型的查询。
万一您遇到性能问题,可以使用PgBouncer。
最后说明:您决定采取的任何方式,都需要已知的开发量。
编辑:
这完全取决于您所谓的“故障”以及您认为系统处于中断状态的情况。
让我们看一下pgpool功能。
如果您可以很好地应对此类情况,并且不将其视为失败,那么pgpool可以很好地为您服务。而且,如果中断5分钟会使您的公司损失数千美元,那么您应该寻求一个更可靠的解决方案。
中断的成本越高,故障转移系统应该越优化。
通常,它不仅仅是用于实现故障转移自动化的单个工具。
在每次失败中,您都必须进行以下调整:
最后,在我看来,pgpool是一个很好的工具,我确实使用了它。但是,它并不是作为一个完整的故障转移解决方案而设计的,并非没有额外的思考,所采取的措施和编写的脚本。因此,我提供了到分布式数据库的链接,它们提供了更高级别的可用性。
由于PostgreSQL具有很好的可扩展性,因此可以不费吹灰之力就可以发布PostgreSQL。
关于postgresql - Postgres 9.0和pgpool复制: single point of failure?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10053049/