我有一个带有后端服务(BS)和数据库服务(DS)的 k8 集群。
DS 有一个包含单个 PgBouncer 容器(Postgres 服务器的代理)的 pod。BS 将其数据库请求发送到 DS,然后 DS 再路由回这个单个 pod。
我希望在 DS 内部有一个冗余 Pod,以便在主 Pod 发生故障时路由数据库请求。除非主 Pod 发生故障,否则我不想将请求路由到这个冗余 Pod。我尝试这样设计的原因是为了确保在发生故障时停机时间更短。
这可能吗?您能指导我如何做到这一点吗?可以提供一些参考吗?
先感谢您!
答案1
由于我没有足够的关于所使用的架构的信息,并且它仅基于一个非常描述性的示例 - 我正在上传从研究中获得的信息,以允许社区成员完成/扩展这个答案。
基于本文档PgBouncer 没有内部多主机配置。要在多个服务器之间实现查询负载平衡,可以使用外部工具,例如:
本博客解释了为什么要使用 pgBouncer 的另一种负载均衡器机制。根据该机制,您不应该使用 pgBouncer 代替 HAProxy 或其他负载均衡器。很明显,pgBouncer 有几个可配置的功能来解决负载均衡器所解决的问题 - 但最常见的是生产环境使用 HAProxy 或其他负载均衡器来实现 HA。原因是 HAProxy 比 pgbouncer 更好地平衡了实时服务器之间的工作负载。
尽管 pgbouncer 更适合 postgres 连接池,但最好使用一个可以完美执行一项任务的小型守护进程,而不是使用一个可以执行两项任务但效果更差的大型守护进程。
使用 PgPool 也是一个好主意。另请参阅这个答案。
这里还有比较 PgBouncer 和 PgPool 的文章。其中一小部分:| | PGBOUNCER | PGPOOL-II | |--|--|--| |高可用性|不支持。|PostgreSQL 高可用性 通过 Pgpool-II 内置观察进程支持。 优胜者!| |负载均衡|不支持 - PgBouncer 建议使用 HAProxy 实现高可用性和负载平衡。| 支持自动负载平衡 - 甚至足够智能,可以将读取请求重定向到备用服务器,并写入主服务器。 优胜者!|