给PostDock试试,如果你会考虑基于Docker的解决方案。
目前我已经在我们的搬运工,撰写项目试了一下,与架构如下图所示:
pgmaster (primary node1) --|
|- pgslave1 (node2) --|
| |- pgslave2 (node3) --|----pgpool (master_slave_mode stream)----client
|- pgslave3 (node4) --|
|- pgslave4 (node5) --|
我已经测试了以下场景,他们都工作得很好:
- 复制:在主节点(即主节点)进行的更改将被复制到所有备用节点(即从节点)
- 故障切换:停止主节点和备用节点(例如,,node4)将自动接管主要角色。
- 防止两个主节点:重新生成前一个主节点(node1),node4将继续作为主节点,而node1将同步但作为备用节点。
至于客户端应用程序,这些更改都是透明的。客户端只需指向pgpool节点,并在上述所有情况下都能正常工作。
注意:如果你有问题让PostDock运行,你可以试试my forked version of PostDock。
Pgpool-II与看门狗
与上述结构中的一个问题是,pgpool是失败的单个点。所以我也尝试使用委托虚拟IP来启用Watchdog for pgpool-II,以避免单点故障。
master (primary node1) --\
|- slave1 (node2) ---\ /pgpool1 (active) \
| |- slave2 (node3) ----|---| |----client
|- slave3 (node4) ---/ \ pgpool2 (standby)/
|- slave4 (node5) --/
我已经测试了以下场景,他们都工作得很好:
- 普通的场景:两个pgpools启动,与虚拟IP自动应用到其中的一个,在我的情况, pgpool1
- 故障切换:关闭pgpool1。虚拟IP将自动应用到pgpool2,因此它变为活动状态。
- 启动失败pgpool:再次启动pgpool1。虚拟IP将与pgpool2保持一致,并且pgpool1现在用作备用。
至于客户端应用程序,这些更改都是透明的。客户端只需指向虚拟IP,并在上述所有情况下都能正常工作。
您可以在my GitHub repository on the watchdog branch找到该项目。
在主站发生故障并且系统切换到从服务器后,您会做什么?你如何恢复主人并使其重新掌握或者它只是成为奴隶? –