我们经常在办公室讨论这个问题,但这个问题还是不断出现。您如何处理 PostgreSQL 复制?我甚至不一定谈论高级集群,只是使用主从、主多从和主主来保持简单。我发现为 MySQL 设置它通常非常简单。故障转移很简单,即使不是完美的,尤其是配置起来很容易。我们玩过 Slony,但它有点太过实际(模式更改需要干预,新数据库需要干预等)。PGPool2 非常好,直到一个节点出现故障,我们找不到一种优雅的方式(除了关闭所有节点并重新播种故障节点)来使复制重新同步。基本上,我通常会寻找以下内容:
- 易于设置(我可以接受困难的设置,但易于扩展)
- 简单的故障转移
- 恢复一个宕机的节点只需要一些时间(例如 mysql。服务器宕机后,你将其恢复,然后等待复制赶上来)
- 架构更改不会破坏复制
- 向服务器添加新数据库是无缝的(例如,像 mysql 一样,您可以复制整个数据库服务器,因此在主服务器上创建一个新数据库,它会自动传播到从属服务器)
MySQL 可以很好地处理其中的大部分问题,但我对 PostgreSQL 情有独钟。此外,在某些情况下,它是我们唯一的选择,我们想将复制功能添加到组合中。您目前使用什么,您对您的解决方案有何看法?我保证,这不是 MySQL 与 PostgreSQL 的比较,因为这不是我想要开始的。:)
答案1
简短的回答 - 如果您需要在线只读从属服务器,那么 PostgreSQL 还没有这样的解决方案。
目前该领域正在进行两个主要的开发项目,包含在 PostgreSQL 9.0(2010 年春/夏)中,分别是:
- 同步复制:
http://wiki.postgresql.org/wiki/NTT's_Development_Projects
- 只读热备从属服务器:
http://wiki.postgresql.org/wiki/Hot_Standby
这些结合起来的目的是实现 MySQL 风格复制的易用性,减去 MySQL 的错误/问题,加上用户从 PostgreSQL 中了解到的可靠性。
这一切始于 2008 年 PostgreSQL 核心团队的一份宣言:
http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php
到目前为止,拥有最大用户群的 PostgreSQL 复制解决方案是 Slony-I(写入成本更高,使模式更改变得繁琐)、WAL shipping/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了解更多信息。
答案2
并提出另一个解决方案:rubyrep。
与您的要求进行比较:
- 轻松设置
是的,这实际上是 rubyrep 的主要关注点。 - 简单的故障转移
是的。事实上 rubyrep 进行主主复制 - 要进行故障转移,根本不需要采取任何措施。只需开始使用其他数据库即可。 - 架构更改不会中断复制
是的。
对于非主键更改,复制甚至不必停止(但要确保架构同时在两侧更改)
要添加/删除表,只需重新启动复制守护程序即可。仅更改表的主键列需要一点努力。 - 向服务器添加新数据库是无缝的(即像 mysql 一样,您可以复制整个数据库服务器,因此在主服务器上创建一个新数据库,它会自动传播到从属服务器)
这仅以有限的方式支持:每个 rubyrep 设置一次只复制一个数据库。 (但为多个数据库设置复制非常容易。)
答案3
您没有提到需要热读从属,因此我建议使用 Heartbeat 和共享存储或 DRBD。它能做正确的事情,管理也轻而易举。它是旧版 Microsoft SQL Server 集群的 Linux 版本。一个节点是主动节点,另一个节点是被动节点,而数据在两个节点之间共享。您不必担心基于 SQL 的复制,因为这一切都是在块级别下处理的。
说真的,如果您不需要读取从属服务器,那么这是迄今为止最好的解决方案。WAL 存档东西充其量只是俗气而已,如果您因为服务器重启而中断了传输过程,那么您必须重新设置一切。slony 和 londiste 不合格。如果您想留在主源代码树上而不是商业化,Heartbeat 是您的最佳选择。
答案4
如果您想要异步主/从复制,请考虑 Londiste(Skype 的 skytools 包的一部分)wiki.postgresql.org/wiki/Londiste_Tutorial
它很容易安装,添加新的数据库也很容易,复制只是“赶上”。
但是故障转移不是内置的。您需要更改应用程序连接字符串或在另一层软件后面混淆数据库连接。
有些模式更改很容易。其他模式更改则比较困难。这取决于您的应用程序。下一个版本的 skytools(版本 3.0)应该可以处理 DDL 并包含使故障转移更容易的工具。
在发现 Slony 太难用之后,我们转向了 Londiste。