Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mariadb connector J Aurora快速故障切换实施_Java_Mysql_Jdbc_Mariadb_Aurora - Fatal编程技术网

Java mariadb connector J Aurora快速故障切换实施

Java mariadb connector J Aurora快速故障切换实施,java,mysql,jdbc,mariadb,aurora,Java,Mysql,Jdbc,Mariadb,Aurora,我试图理解Mariadb Connetor J的极光快速故障切换实现。虽然我不是java应用程序工程师,但我的主要工作是DBA。我想我对OOP语言知之甚少,并且已经阅读了与Aurora实现相关的mariadb connector J的源代码。但这很难,也不能对我的猜测有信心 我真的很感激你能分享你对它的知识或只是一些评论 在最新版本中,我们只需注册Aurora集群的集群端点,驱动程序就会自动找到每个实例端点 我猜这个逻辑是怎么运作的 驱动程序根据了解服务器id列上所有实例标识符的信息\u sc

我试图理解Mariadb Connetor J的极光快速故障切换实现。虽然我不是java应用程序工程师,但我的主要工作是DBA。我想我对OOP语言知之甚少,并且已经阅读了与Aurora实现相关的mariadb connector J的源代码。但这很难,也不能对我的猜测有信心

我真的很感激你能分享你对它的知识或只是一些评论

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

我猜这个逻辑是怎么运作的

  • 驱动程序根据了解服务器id列上所有实例标识符的信息\u schema.REPLICA\u HOST\u STATUS生成每个端点连接字符串。有一个关于端点字符串的模式。所以,一旦驱动程序成功地从集群端点连接任何实例,驱动程序就可以生成每个实例端点

  • 在git every实例终结点之后,驱动程序抛出一个查询“显示全局状态,如‘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
以下是一些提示: 极光有很多例子,一个是“作者”(主人),另一个是“读者”(奴隶)

当写入程序关闭时,一个从机将升级为新主机,其他从机现在将从此新主机复制(自动重新启动)。如果旧主机再次出现,它将成为从机

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

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

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

可以添加Aurora实例,因此在初始连接时,使用用户集群端点,将使用信息\u schema.replica\u host\u status检索实例的当前列表

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

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

以下是一些提示: 极光有很多例子,一个是“作者”(主人),另一个是“读者”(奴隶)

当写入程序关闭时,一个从机将升级为新主机,其他从机现在将从此新主机复制(自动重新启动)。如果旧主机再次出现,它将成为从机

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

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

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

可以添加Aurora实例,因此在初始连接时,使用用户集群端点,将使用信息\u schema.replica\u host\u status检索实例的当前列表

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


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

感谢您的详细回复!!对我来说,驱动程序随机连接并重试,直到找到Writer节点。我发现我的理解还不太清楚。谢谢您的回复详细回复!!对我来说,这个驱动程序随机连接并重试,直到找到Writer节点。我发现我的理解还不太清楚。