10bet网址
MySQL Connector/J 8.0开发指南
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 0.8 mb
PDF (A4)- 0.8 mb
HTML下载(TGZ)- 152.7 kb
HTML下载(邮政编码)- 171.9 kb


MySQL Connector/J 8.0开发指南/多主机连接/高级负载均衡和故障转移配置

9.5负载均衡和故障切换高级配置

Connector/J为MySQL集群或多源部署提供了一个有用的负载平衡实现第9.3节“使用连接器/J配置负载均衡”而且支持多源复制拓扑.同样的实现用于在支持复制的连接的只读副本之间平衡负载。

当试图在多个服务器之间平衡工作负载时,驱动程序必须确定何时交换服务器是安全的,例如,在事务中间这样做可能会导致问题。重要的是不要丢失国家信息。因此,Connector/J只会在以下情况之一发生时尝试选择新服务器:

  1. 在事务边界(事务显式提交或回滚)。

  2. 遇到通信异常(以“08”开头的SQL状态)。

  3. 当一个SQLException异常类定义的扩展点匹配user定义的条件loadBalanceSQLStateFailoverloadBalanceSQLExceptionSubclassFailoverloadBalanceExceptionChecker属性。

第三个条件围绕三个属性展开,允许您控制哪个属性SQLException异常触发故障转移:

  • loadBalanceExceptionChecker- - -loadBalanceExceptionChecker财产是关键。它接受一个实现newcom.mysql.cj.jdbc.ha.LoadBalanceExceptionChecker接口。这个接口非常简单,你只需要实现以下方法:

    公共布尔函数shouldExceptionTriggerFailover

    一个SQLException异常传入,并返回一个布尔值。的值真正的触发故障转移,没有。

    您可以使用它来实现您自己的自定义逻辑。这可能很有用的一个例子是,当使用MySQL集群处理瞬时错误时,某些缓冲区可能会过载。下面的代码片段说明了这一点:

    公共类NdbLoadBalanceExceptionChecker扩展了StandardLoadBalanceExceptionChecker{公共布尔型shouldExceptionTriggerFailover(SQLException ex){返回super.shouldExceptionTriggerFailover(ex) || checkNdbException(ex);} private boolean checkNdbException(SQLException ex){//必须解析消息,因为大多数NDB错误//都映射到相同的DEMC。返回(ex.getMessage()。startsWith("锁定等待超时已超过")|| (ex.getMessage()。startsWith("Got temporary error") && ex.getMessage()。endsWith(“从NDB”)));}}

    上面的代码扩展了com.mysql.cj.jdbc.ha.StandardLoadBalanceExceptionChecker,这是默认实现。对于那些想要使用属性进行某种程度的控制,而不需要编写Java代码的人来说,其中内置了一些方便的快捷方式。这个默认实现使用了剩下的两个属性:loadBalanceSQLStateFailover而且loadBalanceSQLExceptionSubclassFailover

  • loadBalanceSQLStateFailover-允许定义以逗号分隔的列表SQLState编码前缀,针对前缀aSQLException异常比较。如果前缀匹配,则触发故障转移。因此,例如,如果给定SQLException异常以“00”或“12345”开头:

    loadBalanceSQLStateFailover = 00, 12345
  • loadBalanceSQLExceptionSubclassFailover-可与loadBalanceSQLStateFailover或者是它自己。的某些子类SQLException异常要触发故障转移,只需提供一个以逗号分隔的完全限定类或接口名列表,以便进行检查。例如,如果你想要所有SQLTransientConnectionExceptions要触发故障转移,你需要指定:

    loadBalanceSQLExceptionSubclassFailover = java.sql.SQLTransientConnectionException

前面列举的三个故障转移条件适用于大多数情况,如果自动提交时,Connector/J不会重新平衡,并继续使用相同的物理连接。这可能会产生问题,特别是在使用负载平衡在多个副本之间分配只读负载时。但是,可以将Connector/J配置为在执行一定数量的语句后重新平衡自动提交启用。此功能依赖于以下属性:

  • loadBalanceAutoCommitStatementThreshold-定义将触发驱动潜在交换物理服务器连接的匹配语句的数量。默认值0保留连接的行为自动提交启用的从不平衡。

  • loadBalanceAutoCommitStatementRegex-语句必须匹配的正则表达式。默认值为空,可匹配所有语句。因此,例如,使用以下属性将导致Connector/J在每隔第三条包含字符串的语句之后重新平衡测验

    loadBalanceAutoCommitStatementThreshold = 3 loadBalanceAutoCommitStatementRegex = *。*

    loadBalanceAutoCommitStatementRegex在很多情况下都是有用的。应用程序可能使用临时表、服务器端会话状态变量或连接状态,在这些情况下,让驱动程序在处理完成之前任意交换物理连接可能会导致数据丢失或其他问题。这允许您识别只在交换物理连接安全时才执行的触发器语句。

配置DNS SRV的负载分担和故障切换

看到第6.14节“DNS SRV记录的支持”获取详细信息。