暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

openGauss5.0.0 jdbc新特性

916

jdbc负载均衡功能介绍

jdbc可以通过URL中设置多个数据库节点,实现对主备集群的访问。通过在URL设置负载均衡参数"autoBalance",jdbc可以在建立连接时,依照特定的负载均衡规则将客户端与主备集群的连接依次建立在URL中的各个节点上,以此实现连接的负载均衡。 
5.0.0以前,jdbc提供了roundrobin、priority roundrobin、shuffe、 false四种负载均衡模式,具体介绍如下:

  • roundrobin: 轮询模式,即与各候选节点轮流建立连接。
    取值:“roundrobin”、“true”、“balance”
  • priority roundrobin: 带优先级的轮询模式,优先对前n个候选节点做轮询建连
    取值:“proprity[n]”,n为非负整数。
  • shuffle: 随机模式,即随机选择候选节点建立连接
    取值:“shuffle”。
    loadBalanceHosts设置为"true"等同于autoBalance设置为"shuffle"。(autoBalance优先级更高)
  • false: 无负载均衡,始终与URL串中配置的同一个满足建连条件的节点创建连接。

5.0.0特性增强

opengauss-jdbc-5.0.0相对以前版本,在负载均衡方面主要有以下两点增强新增负载均衡算法
1. leastconn (最小连接) 模式:

  • 应用场景:主要针对集群状态会发生变化,或客户端配置多个同一集群连接串的场景。
  • 功能说明:实现客户端级别的集群内新建连接的负载均衡,即客户端通过jdbc向主备集群创建连接时,优先选择在集群中连接数最少的节点创建连接

2. 在最小连接模式的基础上,新增集群状态时集群快速负载均衡功能:

  • 应用场景:使用连接池连接主备集群时,连接池通常会维护一定数量的长连接,当集群中某个节点失效时,连接池会在剩余节点上补充连接。当失效节点恢复时,由于连接池已经在其他节点上创建了足量的长连接,除非已有连接主动关闭,新恢复节点会始终处于空闲状态。
  • 功能说明:快速负载均衡功能开启时,jdbc会监测集群中各节点的状态。当某个节点恢复时,jdbc会从其他节点上筛选出空闲连接并关闭。新建连接会基于leastconn模式优先在新恢复节点上创建连接实现集群内连接数再平衡。

总体实现框架

集群状态变化时,JDBC快速负载均衡总体方案如下所示
image.png

jdbc负载均衡用法介绍

  • jdbc可以通过在URL串中配置参数autoBalance,在建立连接时根据特定算法选择节点建连,以实现基于连接的负载均衡功能,具体用法如下
  1. 轮询模式:多次连接时轮流选择集群中的节点建连
jdbc:opengauss://node1,node2,node3/database?autoBalance=roundrobin
复制
  1. 随机模式:每次建连时随机选择候选节点
jdbc:opengauss://node1,node2,node3/database?autoBalance=shuffle
复制
  1. 带优先级的轮询模式:优先对前n个节点做轮询建连
jdbc:opengauss://node1,node2,node3/database?autoBalance=proprity2
复制
  1. 最小连接模式: jdbc缓存客户端进程与各集群内节点的连接数,优先向连接数少的节点建连
jdbc:opengauss://node1,node2,node3/database?autoBalance=leastconn
复制
  • TargetSeverType可以控制客户端连接节点的主备类型,并且优先级大于autoBalance,可以将两个参数配合使用,在负载均衡的基础上,控制客户端只连主/备节点。
  1. 配置targetServerType=master,限制客户端只连主,避免写操作路由到备节点
jdbc:opengauss://node1,node2,node3/database?autoBalance=roundrobin&targetServerType=master
复制
  1. 配置targetSeverType=slave,限制客户端只对备节点做负载均衡
jdbc:opengauss://node1,node2,node3/database?autoBalance=roundrobin&targetServerType=slave
复制
  • 最小连接模式会将同一客户端进程内、都配置了最小连接模式、同一节点集合的连接视为属于同一集群,统一进行负载均衡。
  1. 如果客户端需要对同一集群配置多个不同参数的URL串时,可以配置leastconn参数,在满足URL串各参数限制的基础上,对这些连接统一做负载均衡
jdbc:opengauss://node1,node2,node3/database?autoBalance=leastconn&targetServerType=master
jdbc:opengauss://node1,node2,node3/database?autoBalance=leastconn&targetServerType=slave
jdbc:opengauss://node1,node2node3/database?autoBalance=leastconn
复制

说明:若第一个连接串发起200连接,dn1(主)上有200个连接;若第二个连接串发起200个连接,dn2(备)dn3(备)上各有100个连接;若第三个连接串发起300个连接,dn2和dn3各分配100个连接(此时三个节点都有200个连接),剩余100个连接再平均分配到三个节点上,每个节点再分配约33个连接

测试

架构:

主节点 197.0.193.141
备节点 197.0.193.145
备节点 197.0.193.143
备节点 197.0.193.142

roundrobin 轮询模式

即与URL串上的候选节点轮流建立连接。取值:“roundrobin”、“true”、“balance”。

url=jdbc:opengauss://197.0.193.141:26000,197.0.193.145:26000,197.0.193.143:26000,197.0.193.142:26000/postgres?autoBalance=roundrobin
复制

初始连接数
image.png
image.png
image.png
发起200并发后
image.png

shuffle 随机模式

每次都随机选择URL串中的某个节点建立连接。取值:“shuffle”。

url=jdbc:opengauss://197.0.193.141:26000,197.0.193.145:26000,197.0.193.142:26000,197.0.193.143:26000/postgres?autoBalance=shuffle
复制

第一次测试:
连接在141 142 145上
image.png
日志:
image.png
第二次测试:
连接在142 143 145上
image.png
第三次测试:
连接在141 145 142 143上
image.png

leastconn 最小连接模式

对候选节点依照各节点有效连接数做优先级排序,优先与连接数少的节点建立连接。 该模式会统计通过当前驱动在当前集群内使用leastconn模式建立的连接,并定时检查这些连接的有效性。
取值:“leastconn”
初始连接数:
image.png
image.png
image.png
image.png

url=jdbc:opengauss://197.0.193.141:26000,197.0.193.145:26000,197.0.193.142:26000,197.0.193.143:26000/postgres?autoBalance=leastconn&targetServerType=master
复制

使用如上配置发起100并发

主节点上有100连接
image.png

url=jdbc:opengauss://197.0.193.141:26000,197.0.193.145:26000,197.0.193.142:26000,197.0.193.143:26000/sys?autoBalance=leastconn
复制

使用如上配置发起60并发
主节点只有第一次发起的100连接,剩余60连接平均分到其余三个备节点,每个备节点分配20个连接
image.png
image.png
image.png
image.png

priority roundrobin 带优先级的轮询模式

优先对前n个候选节点做轮询建连,取值:“proprity[n]”,n为非负整数。
如果客户端想要优先在主机和备机1上执行业务,备机2只作为其他节点异常时的备用节点,可以设置该参数:

url=jdbc:opengauss://197.0.193.141:26000,197.0.193.145:26000,197.0.193.142:26000,197.0.193.143:26000/postgres?autoBalance=priority2
复制

image.png

最后修改时间:2023-07-26 14:19:38
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论