示例:jdbc主备集群负载均衡
jdbc可以通过URL中设置多个数据库节点,实现对主备集群的访问。通过在URL设置负载均衡参数”autoBalance”,jdbc可以在建立连接时,依照特定的负载均衡规则将客户端与主备集群的连接依次建立在URL中的各个节点上,以此实现连接的负载均衡。 默认值为”false”,此时jdbc始终与URL中配置的同一个满足建连条件的节点建立连接。连接主备集群时,使用此参数需要保证业务中没有写操作,或者与targetServerType=slave配合,限制客户端只连接备机。目前,jdbc提供了roundrobin、priority roundrobin、leastconn、shuffle四种负载均衡模式,示例如下:
roundrobin 轮询模式,即与URL串上的候选节点轮流建立连接。取值:“roundrobin”、“true”、“balance”。
- 假如客户端想使用轮询模式连接一主两备集群,并且多次创建连接时可以轮流选择集群中的节点建连,可以使用如下配置:
- 假如客户端想使用轮询模式只连接一主两备集群的备机,对备机做只读操作,可以使用如下配置:
- 假如客户端想使用轮询模式只连接一主两备集群的主机,避免写操作路由到备机,可以使用如下配置:
- leastconn:最小连接模式,对候选节点依照各节点有效连接数做优先级排序,优先与连接数少的节点建立连接。 该模式会统计通过当前驱动在当前集群内使用leastconn模式建立的连接,并定时检查这些连接的有效性。取值:“leastconn”。使用最小连接模式连接一主两备集群的参考配置如下:
- priority roundrobin::带优先级的轮询模式,优先对前n个候选节点做轮询建连,取值:“proprity[n]“,n为非负整数。以一主两备集群为例,如果客户端想要优先在主机和备机1上执行业务,备机2只作为其他节点异常时的备用节点,可以设置该参数:
集群状态变化时,jdbc快速负载均衡功能说明
该功能主要针对使用连接池连接主备集群并设置了最小连接模式的场景:连接池通常会维护一定数量的长连接,当集群中某个节点失效时,连接池会在剩余节点上重新创建连接。当失效节点恢复时,由于连接池已经在其他节点上创建了足够数量的长连接,因此除非部分原有连接被主动关闭,新恢复节点会始终处于空闲状态。 该功能开启时,jdbc会定时检测URL中配置的节点的状态。当检测到节点恢复时,jdbc会筛选其他节点上的空闲连接并关闭。连接池感知到缓存连接减少后,会基于leastconn模式在新恢复节点上创建连接,使集群重新负载均衡。该功能由”enableQuickAutoBalance”、“maxIdleTimeBeforeTerminal”、“minReservedConPerCluster”和 “minReservedConPerDatanode”配合使用,具体说明如下:
maxIdleTimeBeforeTerminal:jdbc触发快速负载均衡时,可保留连接的最大空闲时长。jdbc快速负载均衡功能筛选空闲连接时,会将处于idle状态并且持续时间大于等于maxIdleTimeBeforeTerminal的连接视为空闲连接,这些连接可能会被jdbc关闭。该参数只在autoBalance设置为”leastconn”且enableQuickAutoBalance设置为”true”时生效。参数针对连接生效。
单位:秒。
取值范围:[0, 9223372036854775)内的整数。
默认值:30。
minReservedConPerCluster:jdbc触发快速负载均衡时,集群内空闲连接的最小保留百分比。默认情况下,jdbc触发快速负载均衡时,所有被筛选出来的空闲连接都会被关闭。设置该参数可以在触发快速负载均衡时,jdbc至少保留集群内空闲连接的minReservedConPerCluster%。该参数针对集群生效,如果存在多个配置了相同节点并开启快速负载均衡功能的URL都设置了该参数,则取最小值。
默认值:0。
minReservedConPerDatanode:jdbc触发快速负载均衡时,节点内空闲连接的最小保留百分比。设置该参数可以在触发快速负载均衡时,jdbc会至少保留每个节点内空闲连接的minReservedConPerDatanode%。如果URL串同时设置了minReservedConPerDatanode和minReservedConPerCluster,jdbc会保证最终筛选出来的待关闭连接同时满足两个参数。该参数针对集群生效,如果存在多个配置了相同节点并开启快速负载均衡功能的URL都设置了该参数,则取最小值。
取值范围:[0, 100]内的整数。
默认值:0。
下面是jdbc开启快速负载均衡的简单用例,通过以下配置可以在jdcb建立连接时同时开启最小连接模式和集群状态变化时的快速负载均衡功能。功能开启后,jdbc会缓存通过该url创建的有效连接,并定时查询node1、node2、node3的状态。当监测到节点恢复时,jdbc会从缓存连接中筛选空闲连接(默认情况处于idle状态超过30秒)并关闭。由连接池基于leastconn模式新建连接,实现集群内连接数再平衡。
此外可以通过设置额外参数,来控制空闲连接的筛选标准以及集群和每个节点内空闲连接的关闭比例: