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


    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的读写分离集群

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

  • 相关阅读:
    下载excel模板
    PostGIS简单使用
    Using LDAP to authenticate users
    Android Kotlin 协程初探
    基于java+springboot+mybatis+vue+elementui的准妈妈孕期交流平台
    基于虚拟机源码分析move合约(零):Move虚拟机执行原理
    【深度学习】pytorch——Autograd
    MATLAB | 面积图、饼状图、水平柱状图的斜线填充(阴影填充)
    numpy和matlab的多维数组展平:ravel, flatten, reshape, (:)
    PIL.image保存图片
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/126139224