PostgreSQL 故障转移和复制

Sot*_*ric 14 postgresql replication failover

我正在评估 PostgreSQL 9.1 并且几乎没有与故障转移和复制细节相关的问题。

我的测试场景很少。第一个有一个主服务器和几个从服务器。如果 Master 崩溃,我希望其中一个 Slaves 成为 Master。在 Master 恢复正常状态后,它应该与集群中的其他服务器同步(应用它关闭时所做的所有更改)并重新声明 Master 角色或成为 Slave。

我在 PostgreSQL 和当前场景中看到的问题如下。

1) 我没有看到用于检测主服务器中断的内置工具。我读到 pgpool 可以处理它并创建触发器文件,我还读到人们为此使用 Linux 心跳或类似工具。好的,我可以检测故障转移并在集群中分配一个新的 Master。其他Slaves会不会明白有一个新的Master,他们现在应该备份它?

2) 我不明白故障回复程序。Master 和 Slave 主机配置不同。那么在崩溃的 Master 故障回复之后我会有两个 Master 吗?服务器将如何恢复同步?我只看到手动解决方案,例如“将数据文件夹传输到服务器并重新启动它”。那么这里的解决方案或最佳实践或至少是关键原则是什么?

3)我应该如何处理客户端的服务器中断?创建连接时,我明确指定了服务器 IP。我是否应该开发某种连接管理器,它会知道我的主从结构,仅向主发送请求,并且在连接丢失的情况下将切换到备份服务器等等?我读到 pgpool 可以作为应用程序的入口点并以正确的方式管理连接。pgpool 是这里唯一的解决方案吗?它是否能很好地处理故障转移和故障恢复?

4)是否有任何解决方案(商业),这样我就可以避免手动复制数据、重新配置 PostgreSQL 实例和其他应该手动完成的事情?那种大家同步的集群配置,谁是Master一目了然,一切自动切换,无需操作员注意?

根据这些线程和文章

PostgreSQL 上的流式复制和故障转移

PostgreSQL 9.1 中的自动故障转移

http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html

没有单一的全自动解决方案可以解决这些问题。我对吗?

谢谢!

小智 4

  1. 奴隶不会理解新主人。你应该手动执行此操作。
  2. 是的,它们是不同的,您应该为旧的主节点创建新的。但是旧的备用节点将继续作为主节点工作,但您应该在该节点上设置 max_wal_senders 。您还应该在故障转移后设置新主服务器的 pg_hba.conf。故障转移后(当节点更改角色 master->slave 从属->master 时),您应该将新的 wal 文件传输到您在 recovery.conf 文件中设置的新备用文件夹数据目录。或者简单地使用 rsync。

  3. 也许你可以使用 pgbouncer。这样你只需将 pgbouncer 服务器地址更改为新的主服务器。

  4. EnterpriseDB有一些商业工具。也许你可以检查一下。

最后是的,你是对的。没有单一的全自动解决方案可以解决这些问题。