使用 X 协议时,Connector/J 支持用于建立会话的客户端故障转移功能。如果在连接 URL 中指定了多个主机,当 Connector/J 无法连接到列出的主机时,它会尝试连接到另一个主机。这是一个用于配置客户端故障转移的 X DevAPI URL 示例
mysqlx://sandy:mypassword@[host1:33060,host2:33061]/test
配置客户端故障转移后,当建立连接失败时,Connector/J 会继续尝试连接到主机列表中的主机。尝试连接主机的顺序如下:
-
对于在连接 URL 中为每个主机设置了
priority
属性的连接, 将根据为主机设置的优先级尝试连接,优先级由 0 到 100 之间的任何数字指定,数字越大表示连接的优先级越高。例如:mysqlx://sandy:mypassword@[(address=host1:33060,priority=2),(address=host2:33061,priority=1)]/test
在此示例中,创建新会话时,始终会在
host2
之前尝试host1
。应为所有主机设置优先级,或不为任何主机设置优先级。
对于在连接 URL 中没有为每个主机设置
priority
属性的连接, 将按随机顺序逐个尝试连接主机。
请注意,X DevAPI 的服务器故障转移功能仅允许在 Connector/J 尝试建立连接时进行故障转移,而在连接已经建立后的操作期间不允许进行故障转移。
使用 X DevAPI 进行连接池。 当使用 X DevAPI 进行连接池时,Connector/J 会跟踪它无法连接到的任何主机,并在故障发生后的短时间内,在创建或检索 Session
时避免连接到该主机。但是,如果已经尝试了所有其他主机,则会立即重试那些被排除的主机。一旦尝试了所有主机并且无法建立任何连接,Connector/J 将抛出 com.mysql.cj.exceptions.CJCommunicationsException
并返回消息 无法连接到任何目标主机
。
使用带有 DNS SRV 的 X DevAPI 配置服务器故障转移
有关详细信息,请参阅第 6.14 节 “对 DNS SRV 记录的支持”。