我正在寻找一个具有强大故障转移策略(自托管)的 postgresql 复制的良好配置。
实际上,我使用 repmgr 在主/从中配置了两个 postgresql 实例。现在,我不知道在这两个实例之前放什么才能实现良好的故障转移。
我希望当主服务器宕机时,从服务器自动提升为新的主服务器,并且客户端不会停机;我想我应该把 pgbool(或 pgbouncer?)放在主/从 postgres 之前,但为了避免它成为单点故障,我应该有 2 个这样的实例,对吗?(这是我想到的一个例子:https://i.stack.imgur.com/IGknG.png)。
我的基本问题是如何使用两个不同的 pgpool 实例配置自动故障转移。如何确保两者都更改内部主/从配置?应该是 pgpool 进行故障转移还是 repmgr(更改两个 pgpool 实例的配置)?
我怀疑我是否走在正确的道路上,主要是因为我没有找到很多关于这种配置的文档,以及如果例如主服务器可能在几分钟的网络问题之后重新上线会发生什么(因此postgres并没有真正关闭,但客户端无法访问它)。
为了让事情变得更加复杂,我尝试使用 docker 配置这个基础设施(但也许可以更简单,因为我可以销毁一个 pg 实例并使用 docker 创建一个新实例?)。
答案1
我从未使用过 docker,因此无法对此发表评论,但我会推荐(并且我长期在大型、使用频繁的数据库生产中使用它)在我看来,在(复杂的)集群设置中应采用以下方式:corosync 和 pacemaker。 使用pgsql 资源代理和一个虚拟浮动 IP,用于连接客户端。
如果你从未使用过这种设置/软件堆栈,请查看本教程或者那个; 此外这里这是去年 PGConf.Russia 上关于此主题的幻灯片(请注意,这是 .pdf 文件,以防您对此感兴趣)。如果您采用这种方式并遇到具体问题,请提出新问题并联系我(例如,通过使用 @gf_ 进行评论),我可能会提供帮助。
编辑:还有一个新的项目叫做PostgreSQL 自动故障转移 PAF,其中“[...] 是专用于 PostgreSQL 的新型 OCF 资源代理。其最初的愿望是在 Pacemaker 管理和 PostgreSQL 管理之间保持明确的界限,以保持简单、文档化且功能强大。[...]”第一次提交是在 2016 年 2 月,所以它还很年轻,但也许也值得一看。(但是,我无法对此发表评论或判断,因为我从未使用过它。)