最佳的PostgreSQL复制解决scheme,最大限度地降低networking成本

我正在研究PostgreSQL复制解决scheme。 我知道这些解决scheme的两个品种

  1. 低级别 – 涉及stream式日志传送,PostgreSQL 9.x中提供的热备份function
  2. 高级别 – 在SQL查询级别工作的Slony,Londiste

我的数据库不是非常繁忙和巨大(至less现在)。 但是我想避免由于Amazon EC2故障造成的停机(就像最近发生的那样)。 我的解决scheme是维护一个不同的可用区域中的奴隶,将保持与我的主数据库实例同步。 这样,当主人瘫痪时,我可以故障转移到它。 需要考虑的一点是,这需要连续复制从主机到从机的数据,这将成为跨EC2可用性区域的networkingstream量。 这不是免费的。 现在每GB的成本是1美分,但是在阅读了PostgreSQL食谱的一些计算之后,我发现即使数据库stream量很低,成本也会增长很多。 例如,在“PostgreSQL 9pipe理手册”的“热物理备份和连续归档”一章中,我读到:

如果archive_timeout设置为30秒,我们将每天生成至less2 * 60 * 24 = 2880个文件,每个文件大小为16 MB,因此每天总计46 GB(最小值)

[而且我假设在数据库上的stream量最小]

我唯一的要求是,在主服务器上执行的每个写入SQL查询都应在从服务器上重播。 如果这是在事件callback时完成的,那么这将是完美的,因为只有当数据库被修改时,主站和从站之间才会有数据传输,即使没有发生数据库更改,也不是每隔30秒左右。

因此,我认为伦迪斯特可能是我的解决scheme,但我不能100%肯定它是这样工作的。

你有什么build议?

经过一周的研究,我相信PostgreSQL实例的Streaming Log ShippingHot Standbyconfiguration可以满足我即时复制(数据丢失的最小窗口)的需求,但是networkingstream量很低。 我写了一篇关于如何设置的详细博客文章 。

也可能有其他解决scheme,使用像pgpool这样的第三方工具,但我没有太多的成功与他们。

看看pgpool 。 我们在生产中使用它,到目前为止,我们非常满意。 你显然还是想做备份,因为它不能保护你免受SQL查询的困扰,但是它能够很好地完成同步/复制的事情。