问题描述
根据其他答案(1,2)以及mariadb-connector-j repo中的一些文档,共识似乎是:
与aurora的“连接”表示与实例的2个基础连接: 一个主人,一个奴隶。驱动程序将使用基础连接 可以根据Connection.setReadonly()来控制主机或从机。
在使用“ aurora”关键字driver时,请在引擎盖下创建2 连接:与主服务器的连接,与一个主服务器的连接 副本的数量(如果有)。目标始终是节省资源 主服务器。通常,仅配置一个池。然后司机 根据以下方式使用与主要/副本的连接 [Connection.setReadOnly]
但是,我为自己尝试了此操作,并且在MariaDB Connector / J 2.6.2(在使用HikariCP作为连接池的Play 2.8.x应用程序中)中没有看到此行为。我创建了一个新的MysqL aurora群集(具有主副本和只读副本),并修改了我的测试应用程序,以使用HikariCP池连接到此群集,该池配置为固定大小为8个连接,使用群集端点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
故障转移模式有关?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)