KunlunBase 读写分离方案

2022-07-12 00:00:00 数据 数据库 节点 读写 分离

KunlunBase 数据库集群在数据库内部支持读写分离,并且对应用透明,用户应用程序不需要做任何修改就可以使用数据库的读写分离功能,从而提高整个系统性能及投资回报率。

一、产品架构

KunlunBase 的整体架构主要由计算层和存储层构成,计算层负责 SQL 响应、解释、执行等,存储层负责数据的存储管理,存储层的数据采用多副本存储机制,备机(从副本)通过强同步技术保持数据与主节点一致性。

备机的存储节点的硬件配置与主节点一致,在一般的生产使用过程中,备机节点的主要目的是作为主机出现故障后的替换节点,不接受应用程序的直接数据处理请求,因此,在非故障切换的情况下,备机的存储节点资源利用率相对较低。

KunlunBase 的读写分离方案是通过路由只读操作到备节点,从而可以减少计算节点的资源竞争,降低主节点负载。

二、实现原理

KunlunBase 的读写分离在计算层的远程查询优化器内实现的,当用户的SQL同时满足如下条件:

  1. 当前SQL类型为select;
  2. SQL中不包含用户自定义函数(即create function语句创建的函数),除非当前事务为只读事务;
  3. 如果不在事务中(autocommit=on),则允许读写分离;如果语句在显示事务中,则要满足:
  • 如果在只读事务中,则允许读写分离;
  • 如果在读写事务中,则该事务尚未更新过任何数据;

远程查询优化器就会将相应的SQL 执行计划下发到从备机的节点上执行

KunlunServer 会根据以下规则选择发送select语句到目标存储集群的哪个备机节点:

  • 根据节点权重值选择 (ro_weight)
  • 根据网络延迟(ping)
  • 根据主从副本的数据一致性延迟(latency)

三、配置实施

场景说明:某 OLTP 业务系统有大量的查询操作,在业务高峰期数据库响应速度变慢,导致了业务的性能问题。经检查发现存储节点主节点的存储节点的 IO 资源利用到达瓶颈,但备机节点的 IO 资源利用率低。

以上场景可以通过读写分离方案解决系统性能问题,不需要修改应用, 不需要增加硬件配置,通过读写分离的实施,可以解决性能问题。

实施步骤:

:设置参数,启用读写分离。(根据情况选一种级别)

设置 enable_replica_read = on (on 开启读写, off 关闭)。

用户级别开启:(用户登录后生效)

alter user abc set enable_replica_read = true;

相关文章