微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docker 和 Kubernetes 中的专用 OJDBC 连接

如何解决Docker 和 Kubernetes 中的专用 OJDBC 连接

我正在运行简单的原生 Java 8 代码生成线程数。这些线程通过它们自己的专用 OJDBC 连接连接到数据库。由于数据库不断填充记录,因此您的线程使用此专用连接来执行数据库中的各种任务。每个线程在一段时间后轮询数据库获取记录然后对其进行处理,然后重新轮询数据库。连接在线程的生命周期内保持不变。 如果我在简单的 VM 上运行它,整个设置工作正常。没有连接关闭,但是一旦我将此 java 代码移动到 Kubernetes 问题就开始出现。 几次后,每个线程开始抛出以下异常

java.sql.sqlRecoverableException: Closed Connection
        at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:3694)

没有重新启动 JDBC 连接,因为线程假定连接是专用的,我们的后端系统不会关闭连接。 此连接关闭仅在 Kubernetes 中随机发生,所以我很好奇是否需要进行任何特定的网络设置才能使专用连接在 Kubernetes 中工作?

解决方法

从评论中得到回应,您可能想要打开 TCP keepalives,但如果这是不可能的,请查看 net.netfilter.nf_conntrack_tcp_timeout_established sysctl 和类似的 conntrack 设置。您也可以使用无头模式服务绕过代理网格,尽管这可能会影响您的故障转移过程,因此请务必仔细检查。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。