金仓数据库KingbaseES客户端编程接口指南-JDBC(10. JDBC 读写分离最佳实践)

栏目归类:人大金仓数据库
发布时间:2024-03-26 18:54:32

10.?JDBC 读写分离最佳实践

对于不同场景,可根据实际需要选择不同的读写分离配置,以达到不同的预期效果。

10.1.?读写分离最大性能

概念

不考虑备机数据延迟造成的主备不一致问题,所有节点均可承担读负载。

适用场景

应用对强一致性不要求,比如历史报表业务;或者应用有自己的处理规避方式,比如影响业务逻辑的关键查询都放在一个事务内的DML语句后面。

配置

  1. 前端 KES 的读写分离

    URL:

    jdbc:kingbase8://192.168.0.100:54321/test?ConfigurePath=jdbc.conf

    配置文件 jdbc.conf:

    USEDISPATCH=true
    SLAVE_ADD=192.168.0.101,192.168.0.102
    SLAVE_PORT=54321,54321
    nodeList=node1,node2,node3
    HOSTLOADRATE=33
    
  2. 后端 KES 的读写分离集群

    后端采用全异步备机,主库配置为:

    synchronous_standby_names=''
    synchronous_commit=off
    

NOTE

  • 前端配置解释

    表 10.1.1?JDBC的配置项:

    JDBC配置集群节点信息

    节点地址

    一般建议连接串上写主节点的地址,其它备机地址配置SLAVE_ADD和SLAVE_PORT

    节点名字

    nodeList指定各节点的名称,各节点的名称为./repmgr cluster show命令查询出的Name字段。要求开启读写分离时必须配置此项,不允许为空并要与节点的地址配置顺序完全一致。各个节点名称之间用逗号分隔,如:nodeList=node1,node2,node3。

    读写分离开启和主机负载

    • 打开读写分离功能:?USEDISPATCH=true

    • 主机负载率,备机之间轮询平分:?HOSTLOADRATE=33

    表 10.1.2?JDBC的配置方式:

    连接串配置

    只用连接串开启JDBC读写分离一主两备

    jdbc:kingbase8://192.168.0.100:54321/test?USEDISPATCH=true&SLAVE_ADD=192.168.0.101,192.168.0.102&SLAVE_PORT=54321,54321&nodeList=node1,node2,node3

    连接串+配置文件

    连接串+配置文件开启JDBC读写分离一主两备

    jdbc:kingbase8://192.168.0.100:54321/test?ConfigurePath=jdbc.conf

    jdbc.conf配置文件:

    USEDISPATCH=true

    SLAVE_ADD=192.168.0.101,192.168.0.102

    SLAVE_PORT=54321,54321

    nodeList=node1,node2,node3

  • 后端配置解释

    如果'synchronous_standby_names'为空,'synchronous_commit'设置'on'、'remote_apply'、'remote_write'和'local'都提供了同样的同步级别:事务提交只等待本地刷写磁盘。

    下表以一主两备的三个节点集群为例:

    sync_state

    synchronous(repmgr.conf配置)

    synchronous_standby_names(数据库配置-old)

    synchronous_standby_names(数据库配置-new)

    全备节点为sync

    all

    ALL (*)

    ALL (node_name2,node_name3)

    全备节点为quorum

    quorum

    ANY 1(*)

    ANY 1(node_name2,node_name3)

    同步节点为sync,其余为potential

    sync

    1 (*)

    1 (node_name2,node_name3)

    全备节点为async

    async

10.2.?读写分离(读已提交)最大一致性

概念

需要考虑备机数据延迟造成的主备不一致问题,只有强同步或主节点可承担读负载。

适用场景

应用需要强一致性,比如严格依赖查询数据做后面的逻辑分支处理,一个事务插入,后一个事务马上查询这条数据,此时就会需要严格一致性。

  • 强同步节点的定义

    首先是主备之间是同步模式,其次备库的同步级别必须是remote_apply。

  • JDBC对强同步节点的验证方式

    select?application_name,?sync_state?from?pg_stat_replication

    返回的'sync_state'必须是'sync'。

配置

  1. 前端 KES的JDBC读写分离

    在?读写分离最大性能?的基础上,增加一个控制参数“可分发节点选择列表策略”:

    指定可分发节点选择列表策略,1表示所有在线节点均可分发,2表示只分发主节点和同步备机节点,默认取值为:'1'。

    readListStrategy=2

  2. 后端KES的读写分离集群

    主库配置:

    # 1(*) 或者 ALL (*)

    synchronous_standby_names='1(*)'
    synchronous_commit=remote_apply
    

10.3.?读写分离(可重复读)最大一致性

概念

一个事务内的两次相同查询需要获得的数据是完全一致的,此时不能分发,只能全部走主机,备机节点此时无法承担读负载,只用作数据备份,不对外提供服务。

适用场景

应用原来就依赖于严格的RP做业务处理。

配置

  1. 前端 KES 的JDBC读写分离

    在?读写分离最大性能?的基础上,增加一个控制参数“可分发节点选择列表策略”:

    指定可分发节点选择列表策略,1表示事务都不分发,2表示事务中的写语句之前的读语句可以分发,默认取值为:'2'。

    TransactionDispatchStrategy=1

  2. 后端KES的读写分离集群

    主库配置参见?读写分离(读已提交)最大一致性?。

文章来源:https://blog.csdn.net/arthemis_14/article/details/126139224
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
Feichi 技术分享站