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

OceanBase HTAP 读写分离实战攻略 | 最佳实践 21

原创 OceanBase数据库 2025-06-15
364

在 HTAP 混合负载场景下,当 OLTP 事务型业务与 OLAP 分析型业务共享同一数据库集群时,OLAP 的高资源消耗可能对 OLTP 的低时延要求产生明显干扰。为破解该矛盾,OceanBase 提出三项核心机制实现 AP 场景下的读写分离部署,例如通过将特定比例的读流量引导至 Follower 副本执行,从而缓解复杂分析运算对系统资源的过度争用,避免对实时交易型业务的响应速度造成冲击。


  • 列存副本配置:通过创建或添加列存副本专用于分析查询,将 AP 请求路由到 Follower 副本,隔离 OLTP Leader 副本的资源。适用于业务需要纯列存分析集群,但希望复用现有 OceanBase 集群资源的场景。


🧡注意:使用列存副本需要 OceanBase 4.3.3 及以上版本和 OCP 4.3.3 及以上版本。


  • 弱一致性读策略:通过配置 OB_READ_CONSISTENCY='WEAK' 或 ODP 路由策略,使 AP 请求访问 Follower 副本,降低强一致性读的开销。适用于集群资源足够、OLAP 与 OLTP 共存时无需硬隔离仅需将读请求分发到 Follower 副本的场景。

  • 大查询资源隔离:通过参数限制大查询的 CPU 占用,确保 OLTP 资源优先级。适用于需要根据业务波峰调整资源比例、核心 TP 场景需要优先保证的场景。

一、配置方法

方法一:列存副本配置(AP 加速核心)

列存副本有效解决了两大核心问题:一是应对 AP 请求所需的高性能分析场景时,避免 OLTP Leader 副本因资源有限导致的性能瓶颈;二是突破行存副本难以同时满足 OLTP 低延迟事务处理与 AP 高吞吐分析需求的局限性。


OceanBase 4.3.3 及以上版本支持为 AP 请求创建列存副本。


📕 OceanBase 集群中部署列存副本并配置 ODP

图片
  • 方式一:创建包含列存副本的新租户

1、配置资源单元与资源池,SQL 语句示例如下:

CREATE RESOURCE UNIT unit1, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;CREATE RESOURCE POOL pool1 UNIT='unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');


2、创建租户指定 Locality,SQL 语句示例如下:

CREATE TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,C@zone3', primary_zone='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes = '%';


3、部署并配置 ODP。

具体部署列存副本详细步骤可以通过下方链接参考官网文档:使用列存副本。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012841


  • 方式二:为已有租户增加列存副本

1、在集群中添加新的 Zone,并向新的 Zone 内增加节点。


2、新增资源单元与资源池,SQL 语句示例如下:

CREATE RESOURCE UNIT unit2, MAX_CPU=5, MIN_CPU=5, MEMORY_SIZE= '32G', MAX_IOPS=10000, MIN_IOPS=5000, LOG_DISK_SIZE=5301023539200;CREATE RESOURCE POOL pool2 UNIT = 'unit2', UNIT_NUM = 1, ZONE_LIST = ('zone4');ALTER TENANT tenant_c RESOURCE_POOL_LIST = ('pool1','pool2');


3、修改租户指定 Locality,SQL 语句示例如下:

ALTER TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,F@zone3,C@zone4';


4、部署并配置 ODP。具体部署列存副本详细步骤可以通过下方链接,参考官网文档:使用列存副本。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012841


📕 通过 OCP 设置列存只读副本

您也可以通过 OCP 白屏操作设置列存只读副本,这种方式更为便捷简单。


1、添加只读列存副本:

  • 情况 1:给现有集群添加 Zone:即在 OCP 集群管理中,进到对应的集群中,点击新增 Zone,填入新加的 Zone 信息,选择对应的机器,以及设置配置。

  • 情况 2:给需要创建列存副本的租户添加副本。即完成 Zone 的添加之后,您需要进入到集群对应的租户里,然后给租户添加副本,添加对应的只读列存型副本即可。


2、添加单独的 ODP:如果需要单独的 ODP,那么再创建一个 ODP 单独给 AP 请求使用。


3、配置读写分离:列存副本添加完成之后,就可以设置读写分离策略。


您也可以通过下方链接,参考部署专用 ODP 及弱读请求详细步骤:使用列存副本。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012841


方法二:开启弱一致性读(AP 请求基础前提)

默认路由策略为强一致性,导致 AP 请求无法直接访问 Follower 副本 / 列存副本。通过开启弱一致性读,可使 AP 请求以最终一致性模式访问 Follower 副本,配置方法如下:

-- 全局会话设置(推荐)  SET GLOBAL OB_READ_CONSISTENCY='WEAK';  
-- 或通过 ODP 级配置:ALTER PROXYCONFIG SET OBPROXY_READ_CONSISTENCY=1; -- 1 表示弱读


方法三:大查询资源隔离配置

AP 大查询可能占用过多 CPU 资源,导致 OLTP 请求延迟。OceanBase 数据库通过参数限制大查询资源占用,避免阻塞 OLTP,减少大查询对小查询的资源占用。通过参数限制 AP 查询资源占用,避免阻塞 OLTP,设置方法如下:  

ALTER SYSTEM SET LARGE_QUERY_THRESHOLD = '10s';     -- 超过 10 秒为大查询,默认为 5  ALTER SYSTEM SET LARGE_QUERY_WORKER_PERCENTAGE = 25; -- 大查询仅占用 25% CPU资源,默认为 30


OceanBase 数据库通过限制大查询能使用的租户活跃工作线程数来约束大查询最多能够使用的 CPU 资源,以此来保证系统还会有足够的 CPU 资源来执行 OLTP(例如,交易型的小事务)负载。通过这样的方式来保证对响应时间比较敏感的 OLTP 负载能够得到足够多的 CPU 资源尽快地被执行。


另外需要注意的是,虽然 OceanBase 数据库可以做到大查询和 OLTP 资源的分配,large_query_threshold 参数也应设置在一个在合理的范围内,不应该设置成为一个过大的值。否则大查询很容易抢占系统的 CPU 资源进而引发 OLTP 响应过慢甚至队列堆积的问题。

二、典型配置案例

案例一:列存副本专用路由

适用于电商大促后分析用户行为数据的场景,其优势在于完全隔离 OLAP 与 OLTP 资源,列存加速聚合计算(如 SUM, GROUP BY)。具体配置步骤如下:  

1、创建列存副本 Zone(zone5)并绑定到分析请求专用 ODP。 


2、设置路由策略: 

ALTER PROXYCONFIG SET PROXY_ROUTE_POLICY="follower_only";


3、验证路由:

EXPLAIN SELECT * FROM analysis_table WHERE region = 'east';  -- 确认计划中数据来源为 zone5 的列存副本

案例二:跨机房 AP 请求就近路由

适用于跨地域部署下 AP 请求就近访问列存副本的场景。其优势是上海机房的 AP 请求优先访问 zone5 的列存副本,避免跨城延迟。具体配置步骤如下:

1、绑定 Zone 地理位置: 

ALTER SYSTEM MODIFY ZONE "zone5" SET REGION="SHANGHAI", IDC="idc5";  -- 列存副本所在机房


2、设置路由偏好:

ALTER PROXYCONFIG SET PROXY_ROUTE_POLICY="follower_first";

三、附录

(一)关键配置参数说明

图片

(二)ODP 路由策略与 LDC 基础

1、随机路由策略

OceanBase 的 ODP 代理支持三级路由策略,为了保证弱一致性的读请求能够优先路由到 Follower 副本上,还需要对 ODP 设置 proxy_route_policy 参数。


当设置为 FOLLOWER_FIRST 时,请求优先发送到 Follower 副本上,如果 Follower 不可用,则发送到 Leader 副本。

ALTER PROXYCONFIG SET PROXY_ROUTE_POLICY="follower_first";


2、LDC 配置(可选)

典型 AP 场景均是单独创建列存副本,无需考虑配置 LDC 路由。若集群内部配置读写分离,您可以参考本章节,了解按地理位置优化路由: 

👉 设置 Zone 地理位置: 

ALTER SYSTEM MODIFY ZONE "zone5" SET REGION="SHANGHAI", IDC="idc5";


👉 绑定 ODP 的 LDC 信息: 

  • 方法一:ODP 进程启动时通过 -o 参数指定设置 LDC 信息:

./obproxy -o proxy_idc_name=idc5


  • 方法二:通过执行 SQL 语句设置 LDC 信息:

obclient> alter proxyconfig set proxy_idc_name='idc1';


如需了解 OceanBase 的路由策略,并尝试部署与配置,您可以通过下方链接,查看详细的官网文档:OceanBase 数据库代理 ODP,OBProxy:

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002839661


如需了解 OceanBase 数据库代理(OceanBase Database Proxy,简称 ODP,又称 OBProxy)常用的路由功能及配置方式,在业务实践中正确配置路由策略及快速排查路由问题,您可以通过下方链接,查看 ODP 路由最佳实践:

https://www.oceanbase.com/docs/common-best-practices-1000000001591716

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

评论