使用 X 协议时,Connector/J 支持用于建立会话的客户端故障转移功能。如果在连接 URL 中指定了多个主机,当 Connector/J 无法连接到列出的主机时,它会尝试连接到另一个主机。这是用于配置客户端故障转移的示例 X DevAPI URL:
mysqlx://sandy:mypassword@[host1:33060,host2:33061]/test
配置了客户端故障转移后,当建立连接失败时,Connector/J 会不断尝试连接到主机列表中的主机。尝试连接主机的顺序如下:
-
对于
priority
在连接 URL 中为每个主机设置属性的连接,将根据为主机设置的优先级尝试主机,这些优先级由 0 到 100 之间的任何数字指定,数字越大表示连接的优先级越高。例如:mysqlx://sandy:mypassword@[(address=host1:33060,priority=2),(address=host2:33061,priority=1)]/test
在此示例中,
host1
总是在host2
创建新会话之前尝试。应该为所有主机设置优先级,或者不为任何主机设置优先级。
-
对于
priority
连接 URL 中未为每个主机设置属性的连接:对于 8.0.19 及更高版本,将以随机顺序依次尝试主机。
对于 8.0.18 版及更早版本, 将按照它们在连接 URL 中出现的顺序依次尝试主机 - 列表中较早出现的主机将在列表中较晚出现的主机之前尝试。
请注意,X DevAPI 的服务器故障转移功能仅允许在 Connector/J 尝试建立连接时进行故障转移,但在建立连接后的操作期间则不允许。
使用 X DevAPI 的连接池。
当使用 X DevAPI 的连接池时,Connector/J 会跟踪它连接失败的任何主机,并在失败后的一小段等待时间内避免在创建或检索
Session
. 但是,如果所有其他主机都已尝试过,则将不等待重试那些被排除的主机。一旦尝试了所有主机并且无法建立连接,Connector/J 将抛出 a
com.mysql.cj.exceptions.CJCommunicationsException
并返回消息Unable to connect to any of
the target hosts
。
使用带有 DNS SRV 的 X DevAPI 配置服务器故障转移
有关详细信息,请参阅第 6.14 节“支持 DNS SRV 记录”。