- java/
- Java mariadb connector J Aurora快速故障切换实施
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节点。我发现我的理解还不太清楚。