gpt4 book ai didi

java - mariadb 连接器 J Aurora 快速故障转移实现

转载 作者:行者123 更新时间:2023-11-29 10:32:21 25 4
gpt4 key购买 nike

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

如果能分享您的相关知识或任何评论,我真的很感激。

在最新版本中,我们只需注册 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

最佳答案

这里有一些提示:极光有很多例子。一个是“作者”(Master),另一个是“读者”(Slaves)。

当写入器关闭时,一个从属设备将晋升为新的主控设备,其他从属设备现在将从该新的主控设备进行复制(自动重新启动)。如果旧主人再上来,它就会变成奴隶。

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

到 aurora 的“连接”意味着到实例的 2 个底层连接:一个到主站,一个到从站。 Driver会根据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 共享的)以避免重复使用。驱动程序尝试重新连接随机可用主机,直到没有未列入黑名单的主机,然后可以重试黑名单主机一段时间(取决于参数)。如果连接成功,则实例被“取消列入黑名单”。

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

关于java - mariadb 连接器 J Aurora 快速故障转移实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47163044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com