大数跨境
0
0

最佳实践 21 | OceanBase HTAP 读写分离实战指南

最佳实践 21 | OceanBase HTAP 读写分离实战指南 OceanBase数据库学堂
2025-06-12
0
导读:列存副本、弱读配置与资源隔离策略汇总

在 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


【声明】内容源于网络
0
0
OceanBase数据库学堂
关注获取数据库前沿技术、应用实战与精彩活动。
内容 261
粉丝 0
OceanBase数据库学堂 关注获取数据库前沿技术、应用实战与精彩活动。
总阅读9
粉丝0
内容261