mysql - MariaDB Connector/J 2.6.x 是否使用 Aurora 创建与主从服务器的连接?
问题描述
根据其他答案(1、2)以及mariadb-connector-j repo中的一些文档,共识似乎是:
在主/从集群上,驱动程序将使用底层的 2 个连接:一个到主实例,一个到从属实例。
与 aurora 的“连接”意味着与实例的 2 个底层连接:一个到主控,一个到从属。驱动程序将根据 Connection.setReadonly() 使用底层连接到 master 或 slave。
当使用“aurora”关键字时,驱动程序在后台创建 2 个连接:一个到主服务器的连接,一个到副本之一的连接(如果有)。目标始终是在主服务器上节省资源。一般只配置一个池。然后驱动程序根据 [Connection.setReadOnly] 使用与主/副本的连接
但是,我正在为自己尝试这个,在 MariaDB Connector/J 2.6.2 中没有看到这种行为(在使用 HikariCP 作为连接池的 Play 2.8.x 应用程序中)。我创建了一个新的 MySQL Aurora 集群(具有主服务器和只读副本)并修改了我的测试应用程序以使用配置为固定大小 8 个连接的 HikariCP 池连接到该集群,使用集群端点 url 如下:
"jdbc:mysql:aurora://test.cluster-abcdefg.us-east-1.rds.amazonaws.com:3306/test"
根据我在日志中看到的内容,以及来自 RDS Web 仪表板监控选项卡的附加图像,一旦应用程序启动,主服务器将进入 8 个连接(蓝线),而只读副本有 0 个连接(橙线)。这似乎与上述所有观点相反,在引擎盖下,驱动程序建立了 2 个底层连接,并根据给定Connection
的只读属性的状态在它们之间进行选择。
此连接的 Play 配置如下:
test {
driver = org.mariadb.jdbc.Driver
url = "jdbc:mysql:aurora://test.cluster-abcdefg.us-east-1.rds.amazonaws.com:3306/test"
hikaricp {
autoCommit = false
readOnly = false
}
}
如果我改为配置连接,例如:
test {
driver = org.mariadb.jdbc.Driver
url = "jdbc:mysql:aurora://test.cluster-abcdefg.us-east-1.rds.amazonaws.com:3306/test"
hikaricp {
autoCommit = true
readOnly = true
}
}
然后我确实看到了与主服务器和只读副本的连接:
请帮助我理解这种行为。
我想要实现的是拥有单独的写入和读取池。写入池将始终指向主服务器,而读取池将始终指向只读副本(假设存在)。我想避免双重底层连接,因为该设置是在池级别配置的,并且在其生命周期readOnly
内永远不会改变给定的。Connection
我怎样才能做到这一点?
此外,我想知道在指定故障转移模式autoReconnect
时是否需要使用该参数。aurora
该参数的值与aurora
故障转移模式有关吗?
解决方案
推荐阅读
- java - 为什么这段代码在我的系统上运行良好并在 HackersRank 中抛出 EmptyStackException
- ios - 如何仅使用 GPU 将 CIImage 剪辑到多边形?
- java - 执行需要身份验证的http调用时如何解决循环依赖场景?
- kendo-ui - 如何在客户端的剑道树视图中显示两个数据文本文件
- kubernetes - Kubernetes:GKE | 即使内存利用率大于/等于目标值,HPA 也不会扩展 Pod
- android - API <22 的颜色选择器中的主题属性
- android - 在 Android 中删除 Firebase 令牌
- node.js - 用户登录后处理 MEAN 堆栈应用程序中的社交媒体集成
- python - 使用 python 从同一网络上可访问的 c$ 计算机读取文本文件
- c# - 我的身份验证表单未加载 CSS