gpt4 book ai didi

postgresql - HikariCP 未检测到数据库 DNS 更改

转载 作者:行者123 更新时间:2023-11-29 11:44:28 25 4
gpt4 key购买 nike

在我们的应用程序中,我们将 HikariCP 与 Postgres 结合使用。应用程序通过 CNAME 连接到 DB(DB 在 CNAME 后面)。

将 CNAME 的值更改为不同的数据库(在我们的例子中,副本被提升为主)不会反射(reflect)在我们的连接池中。查询仍然尝试从旧数据库中获取数据。 HikariCP 仅在 maxLifeTime 结束或我们重新启动应用程序时才进行更改。

maxLifeTime 设置为 30 分钟,idleTimeout 设置为 10 分钟(这是 HikariCP 的默认值)。

问题: HikariCP 是否有办法发现连接丢失并从传递的 serverName 重新创建新连接,而无需等到 maxLifeTime 过期了吗?

我的尝试:我将 maxLifeTime 设置为 2 分钟。在最坏的情况下,我的应用程序将关闭 2 分钟,直到建立新连接。但是将它设为 2 分钟,我们指示 HikariCP 每 2 分钟建立一次新连接。这是一个好方法吗?我看到有人建议给一个值介于 15-20 分钟之间或小于数据库连接 maxLifeTime 的值。

附言应用在clojure-1.7、HikariCP-1.7、postgres-9.6上

编辑:澄清为什么我将数据库放在 CNAME 后面是为了创建一个与具有多可用区环境的 AWS RDS 类似的设置,如果主数据库用于备份,另一个数据库将开始为请求提供服务。

最佳答案

您的答案就在这里... Setting the JVM TTL for DNS Name Lookups .

简而言之,如果 JVM 长时间缓存 DNS 查找,HikariCP 将无能为力。您需要在 JVM 级别解决这个问题。此外,上游 DNS 服务器的 TTL 也会产生重大影响 - 也会缓存直到 native DNS TTL 过期。

编辑:抱歉,我错过了问题的关键部分。正如 Taylor 所说,您可以暂停池(您需要启用 allowPoolSuspension),软逐出连接,然后恢复池。驱逐时处于“飞行中”的连接将正常完成,然后在返回池时立即被驱逐。

关于postgresql - HikariCP 未检测到数据库 DNS 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48421107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com