我已经设置了从主DB到从DB的流复制。如果主设备关闭,从设备将接管。复制和故障转移工作正常。
我有一个使用master数据库存储数据的Web应用程序。
一些细节:
我想继续使用这种复制方法。
问题:
我建议看一下带有failover_command选项的pgpool。在那里你可以有一个小的shell脚本来在读/写模式下重启slave。 pgpool
如果您遇到pgpool的一些问题,我执行此故障排除的过程可能有所帮助 - pgpool - stracing
PGPool-II做到了这一点。
我在第三台服务器上安装了PGPool;一台运行CentOS的监控服务器。我将运行状况检查配置为每10秒运行一次。 failover_command设置为运行一个小shell脚本,如果主服务器出现故障,该脚本将在从属服务器上生成触发器文件。而且效果很好。
为了防止主服务器再次突然启动,我将为app服务器使用两个配置文件(一个用于主服务器,一个用于从服务器),并使用slave配置扩展shell脚本以重新启动应用服务器。
谢谢你的提示!
如果您考虑使用基于Docker的解决方案,请尝试使用PostDock。
目前我已经在我们的项目中使用docker-compose进行了尝试,其架构如下所示:
pgmaster (primary node1) --|
|- pgslave1 (node2) --|
| |- pgslave2 (node3) --|----pgpool (master_slave_mode stream)----client
|- pgslave3 (node4) --|
|- pgslave4 (node5) --|
我测试了以下场景,它们都运行良好:
至于客户端应用程序,这些更改都是透明的。客户端只指向pgpool节点,并在所有上述方案中保持正常工作。
注意:如果您在运行PostDock时遇到问题,可以试试my forked version of PostDock。
上述架构的一个问题是pgpool是单点故障。所以我也尝试使用委托的虚拟IP启用Watchdog for pgpool-II,以避免单点故障。
master (primary node1) --\
|- slave1 (node2) ---\ / pgpool1 (active) \
| |- slave2 (node3) ----|---| |----client
|- slave3 (node4) ---/ \ pgpool2 (standby) /
|- slave4 (node5) --/
我测试了以下场景,它们都运行良好:
至于客户端应用程序,这些更改都是透明的。客户端只指向虚拟IP,并在所有上述方案中保持良好的工作状态。
你可以在my GitHub repository on the watchdog branch找到这个项目。