PostgreSQL复制


45

我们在办公室周围不断对此进行抨击,这个问题继续出现。您如何处理PostgreSQL复制?我什至不必谈论高级集群,只需通过Master-Slave,Master-MultiSlave和Master-Master使其简单即可。我发现针对MySQL进行设置通常非常简单。故障转移即使不是完美的,也很简单,尤其是对于配置它来说很容易。我们已经玩过Slony,但操作起来有点麻烦(模式更改需要干预,新数据库需要干预等)。PGPool2相当不错,直到一个节点发生故障,我们找不到合适的方法(除了将所有组件关闭并重新植入掉落的节点之外)才能使复制恢复同步。基本上,这就是我通常要寻找的东西:

  • 易于设置(我将接受困难的设置,但易于扩展)
  • 简单故障转移
  • 将下降的节点重新带回只需要时间(例如,像mysql。服务器关闭,将其启动,然后等待复制赶上)
  • 模式更改不会破坏复制
  • 向服务器添加新数据库是无缝的(即,像mysql一样,您可以复制整个数据库服务器,因此在主数据库上创建了新数据库,该数据库自动传播到从数据库)

MySQL可以很好地处理其中的大多数,但是我对PostgreSQL有一定的爱好。此外,在某些情况下,这是我们唯一的选择,我们希望将复制添加到混合中。您目前正在使用什么,您对解决方案的感觉如何?我保证,这不是MySQL与PostgreSQL的相对论,因为这不是我要尝试的内容。:)


3
我对这个答案很感兴趣。至少从MySQL的背景来看,PSQL的复制选项是农业用的。
戴夫·切尼

是的,到目前为止,我玩过的每个选项都有明显的缺点。希望我缺少明显的东西..但我不认为我是
2009年

我怀疑没有别的,但是我渴望有人证明我错了
Vinko Vrsalovic

顺便说一句,您是否尝试过pgsql-general@postgresql.org?
Vinko Vrsalovic

Answers:


9

简短的回答-如果您需要在线只读从站,则PostgreSQL还没有这样的解决方案。

PostgreSQL 9.0(2010年春季/夏季)中包含两个正在进行的主要开发项目,分别是:

  • 同步复制:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • 只读热备用从站:

http://wiki.postgresql.org/wiki/Hot_Standby

这样做的目的是要实现MySQL样式复制的易用性,再减去MySQL所具有的错误/问题以及用户从PostgreSQL所知道的可靠性。

所有这些都是由PostgreSQL核心团队在2008年发布的清单开始的:

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

到目前为止,拥有最大用户群的PostgreSQL复制解决方案包括Slony-I(写操作价格昂贵,使架构更改不灵敏),WAL发行/ walmgr(不能在线使用从站)和Skype / Skytools提供的pgQ / londiste(比最终解决方案更多的工具/构建块)。

我已经在Log Shipping,walmgr和Slony-I上写了一些东西,请参阅

有关更多信息,请http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20


6
同步复制+双机热备,现已-见wiki.postgresql.org/wiki/...为可用的技术一个很好的总结
大卫·弗雷泽

5

并提出另一种解决方案:rubyrep。

与您的要求进行比较:

  • 易于设置
    是的,这实际上是rubyrep的主要重点。
  • 简单故障转移
    是。实际上,rubyrep会进行主-主复制-要进行故障转移,根本无需执行任何操作。刚开始使用其他数据库。
  • 模式更改不会破坏复制
    是。
    对于非主键更改,复制甚至不必停止(但要确保架构同时在两侧更改)。
    要添加/删除表,只需重新启动复制守护程序即可。仅更改表的主键列需要花费一些精力。
  • 向服务器添加新数据库是无缝的(即,像mysql一样,您可以复制整个数据库服务器,因此在主数据库上创建了一个新数据库,该数据库自动传播到从数据库)
    仅在有限的方式下支持:每个rubyrep安装程序一次仅复制一个数据库。(但是为多个数据库设置复制非常容易。)

4

您没有提到必须具有热读取从属关系,因此我将建议将Heartbeat与共享存储或DRBD一起使用。它只是在做正确的事,管理轻而易举。与旧版Microsoft SQL Server群集在Linux上等效。在两个节点之间共享数据时,一个节点是主动节点,另一节点是被动节点。您不必担心基于SQL的复制,因为所有复制都是在块级别进行的。

认真地说,如果您不需要读取从站,那么这是迄今为止最好的解决方案。WAL存档的内容充其量是虚假的,如果您中断了服务器重启的传送过程,则必须重新设置所有内容。斯莱尼和隆迪斯不切芥末。如果您想呆在主要来源树上而不打算商业化,心跳是您的最佳选择。


2

根据您的要求,PITR似乎是解决问题的最简单方法:

在线备份和时间点恢复(PITR)

您没有说需要查询从属服务器,因此PITR可能是正确的。

它是8.0版中PostgreSQL的标准部分,因此您可能已经具备启动和运行它所需的一切。

如果您发现说明过于冗长,请查看SkyTools WalMgr,它将使创建/故障转移到热备份数据的命令成为单个命令任务。

对于更复杂的复制方案,我有很好的Slony-1经验,但是PostgreSQL有许多不错的复制/ HA选项。


那些选择是...?
戴夫·切尼


2

如果要异步主/从复制,请考虑Londiste(Skype的skytools软件包的一部分)wiki.postgresql.org/wiki/Londiste_Tutorial

它很容易安装,添加新的数据库很容易,复制只是“赶上了”。

故障转移不是内置的。您将需要更改应用程序连接字符串或混淆另一层软件后面的数据库连接。

某些模式更改很容易。其他人则比较困难。这取决于您的应用程序。skytools的下一版本(3.0版)应该能够处理DDL,并包括使故障转移更加容易的功能。

在发现Slony难以使用后,我们搬到了Londiste。



1

确实没有任何免费/开源的方式可以提供您想要的东西。如果您想获得这样的统包服务,请查看各种第三方商业复制解决方案。

现在,它可能的排序滚动使用写头日志(WAL)推出带有Postgres的自己的复制:

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

基本上,您可以在其中使辅助节点进入连续恢复模式,并每隔{small interval}将事务日志导入到其中。Postgres配置具有“存根”,可让您在WAL完成后在Postgres上执行某些操作,因此不能,这就是该设置的基础-利用这些“存根”。

但是,这不允许您执行主-主和/或循环复制。

无论如何,它绝对适用于多余的工作,但是我不会称其为“轻松设置”,“简单故障转移”,“无缝”或类似的名称。


此答案与PITR建议重复,因为PITR使用WAL :-)
dpavlin,2009年



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.