我已经设置了从主数据库到从数据库的流复制。如果主设备关闭,从设备将接管。复制和故障转移工作正常。
我有一个使用master数据库存储数据的Web应用程序。
一些细节:
我想继续使用这种复制方法。
问题:
答案 0 :(得分:3)
我建议使用failover_command选项查看pgpool。在那里你可以有一个小的shell脚本来在读/写模式下重启slave。 pgpool
如果你遇到pgpool的一些问题,我在排除故障时遵循的这个过程可能会有所帮助 - pgpool - stracing
答案 1 :(得分:1)
PGPool-II做到了这一点。
我在第三台服务器上安装了PGPool;一台运行CentOS的监控服务器。我将运行状况检查配置为每10秒运行一次。 failover_command设置为运行一个小shell脚本,如果主服务器出现故障,该脚本将在从属服务器上生成触发器文件。而且效果很好。
为防止主设备再次突然启动,我将为app服务器使用两个配置文件(一个用于主设备,一个用于从设备),并使用从配置扩展shell脚本以重启应用服务器。
感谢您的提示!
答案 2 :(得分:0)
如果您考虑使用基于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,并在所有上述场景中保持良好的工作状态。