我需要按如下方式复制PostgreSQL数据库服务器:
两个服务器彼此相邻 - 一个是主服务器,另一个是备用服务器。如果主服务器出现故障,备用服务器将接管。从主设备到从设备的复制需要是故障保护的,因此是同步的。备用数据库不会用于任何查询,除非它已成为主数据库。因此,不需要高可用性/负载平衡。
远程位置还有另一台备份服务器。来自上述主服务器的数据将以异步方式和批量复制到此远程服务器。时间在这个复制中根本不是一个因素 - 几个小时就可以了。该服务器仅用于备份。
我研究过PostgreSQL文档以及Google目前可用的复制解决方案,但无法确定我需要哪种同步异步解决方案组合。
我最接近的是使用pgpool-II作为场景1,使用Mammoth作为场景2.但是,由于pgpool是基于语句的,包含rand()和now()的查询会发生什么?
请注意,我宁愿使用免费和开源复制工具。
另外,只是一个附带问题 - 根据上面的方案1,当主服务器发生故障时,备用服务器将接管。之后主从角色是否会被反转,或者在主服务器恢复之后,从属服务器将恢复到待机状态?
任何建议都将受到高度赞赏。感谢。
答案 0 :(得分:4)
我建议在场景1中使用DRBD,在场景2中使用9.0内置复制或Slony。
在PostgreSQL 9.1(尚未发布)之前,没有其他可用的同步复制解决方案,并且DRBD已广泛用于此目的。与Pacemaker或Heartbeat一起提供PostgreSQL监控和切换所需的所有脚本,您将拥有一个非常强大且易于管理的解决方案。 (事实上,即使在9.1出现之后我也会考虑继续使用DRBD;它只是更容易并且有更长的跟踪记录。)
对于跨站点异步,您可以尝试PostgreSQL 9.0的内置复制,也许与repmgr一起进行监视和管理。或者,您可以尝试(现在有点)老式的Slony,但我猜它会更复杂,满足您的需求。
答案 1 :(得分:2)
您没有提及相关服务器是否在某个特定版本上,或者这是一个可以自由选择版本的新项目。答案因信息而异。
如果您从一个干净的平板开始,我建议基于PostgreSQL 9.1 beta进行设计。最终版本将在您准备进入生产环境并且内置二进制同步复制之前很久就会发布。
我在PostgreSQL中使用内置的异步复制多年来几乎与你描述的完全相同,它对我来说一直都是坚如磐石的。使用热备用9.0,它变得更好,配置和维护变得更加容易。 9.1提供了您需要的唯一缺失部分。
但是,如果您尝试复制现有服务器,使用“checkpoint_timeout”的主动设置进行内置异步复制,则只需升级到9.1,就可以非常频繁地备份未归档的WAL文件。
这里的底线是你可以得到你想要的库存PostgreSQL 9.1 - 不需要第三方产品。
至于故障转移,它不是一个自动过程,您需要自己处理。我建议在故障转移后,切换两台计算机的角色,直到下一次故障转移事件或在缓慢使用期间的计划中断期间进行受控的手动故障转移。同样,这不是自动的,而且很多都是由管理员管理的(可能是通过shell脚本)。