【问题标题】:mariadb connector J Aurora Fast failover implemantationmariadb 连接器 J Aurora 快速故障转移实现
【发布时间】:2018-04-20 03:45:32
【问题描述】:

我正在尝试了解 Mariadb Connetor J 的 Aurora 快速故障转移实现。虽然我不是 Java 应用工程师,但我的主要工作是 DBA。我认为我对 OOP 语言知之甚少,并且已经阅读了 mariadb 连接器 J 的源代码,重点是相关的 Aurora 实现。但这很困难,无法对我的猜测有信心。

如果能分享您的相关知识或只是分享一些 cmets,我真的很感激。

在最新版本中,我们只需注册 Aurora 集群的集群端点,驱动程序会自动查找每个实例端点。

我猜这个逻辑是如何工作的

  • 驱动程序从 information_schema.REPLICA_HOST_STATUS 生成每个端点连接字符串,该字符串知道 Sever_id 列上的所有实例标识符。有一个关于端点字符串的模式。因此,一旦驱动程序成功连接集群端点的任何实例,驱动程序就可以生成每个实例端点。

  • 在git每个实例端点后,驱动程序抛出一个查询“SHOW GLOBAL STATUS LIKE 'innodb_read_only'。如果返回值为0(false),则设置为Writer,否则设置为Reader。

    李>
  • 如果健康检查失败,驱动程序将连接字符串推入“黑名单”。(但我找不到健康检查的写入位置)

  • 驱动程序尝试从未列入黑名单的连接字符串进行连接,但如果失败,它会尝试列入黑名单的连接字符串。

我的猜测主要来自下面的java文件。

  • mariadb-connector-j/src/main/java/org/mariadb/jdbc/internal/failover/impl/AuroraListener.java
  • mariadb-connector-j/src/main/java/org/mariadb/jdbc/internal/protocol/AuroraProtocol.java

https://github.com/MariaDB/mariadb-connector-j/blob/master/documentation/failover-and-high-availability-with-mariadb-connector-j.creole

【问题讨论】:

    标签: java mysql jdbc mariadb amazon-aurora


    【解决方案1】:

    这里有一些提示: Aurora 有很多实例。一个是“作家”(Master),一个是“Reader”(奴隶)。

    当一个 writer 宕机时,一个 slave 将被提升为新的 master,其他 slave 现在将从这个新的 master 复制(自动重启)。如果老主人再上来,它就会变成奴隶。

    Aurora 有一个用于集群的 DNS 端点,例如“xx.cluster-yy.zz.rds.amazonaws.com”,它指向当前的主节点。发生故障转移时,DNS 会刷新……但不会立即刷新。

    到 aurora 的“连接”意味着到实例的 2 个底层连接:一个到主控,一个到从属。驱动程序将根据 Connection.setReadonly() 使用底层连接到 master 或 slave。

    每次驱动程序连接到一个实例时,它都会确保当前状态检查全局变量“innodb_read_only”(OFF = master)。

    可以添加 Aurora 实例,因此在初始连接时,使用用户集群端点,将使用 information_schema.replica_host_status 检索当前实例列表。

    为了建立2个底层连接,驱动程序将连接到一个随机主机,如果这是当前主机,那么所有其他主机都是从机,如果不是,驱动程序将询问从机他当前的主机,以便下一个连接将连接主机使用 information_schema.replica_host_status 其中 session_id = 'MASTER_SESSION_ID' (比使用 DNS 更可靠)。 如果与实例的连接失败,该实例名称将被放入黑名单一段时间(此黑名单由每个 jvm 共享)以避免重复使用。驱动程序尝试重新连接随机可用的主机,直到没有未列入黑名单的主机,然后可以在一段时间内重试列入黑名单的主机(取决于参数)。如果连接成功,则实例“未列入黑名单”。

    对于底层从属连接的故障转移,然后使用主连接,然后一些底层线程池将尝试在后台重新连接从属实例。

    【讨论】:

    • 感谢您的详细回复!!对我来说,驱动程序随机连接并重试直到找到 Writer 节点是新的。我发现我的理解还不是那么远。
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2015-12-17
    相关资源
    最近更新 更多