首页 > 解决方案 > MariaDB Connector/J 2.6.x 是否使用 Aurora 创建与主从服务器的连接?

问题描述

根据其他答案(12)以及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的只读属性的状态在它们之间进行选择。

RDS Web 仪表板连接监视器

此连接的 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
    }
  }

然后我确实看到了与主服务器和只读副本的连接:

RDS Web 仪表板监控 2

请帮助我理解这种行为。

我想要实现的是拥有单独的写入和读取池。写入池将始终指向主服务器,而读取池将始终指向只读副本(假设存在)。我想避免双重底层连接,因为该设置是在池级别配置的,并且在其生命周期readOnly内永远不会改变给定的。Connection我怎样才能做到这一点?

此外,我想知道在指定故障转移模式autoReconnect时是否需要使用该参数。aurora该参数的值与aurora故障转移模式有关吗?

标签: mysqlplayframeworkmariadbhikaricpamazon-aurora

解决方案


推荐阅读