大数跨境

OceanBase ODP 主备租户读写分离配置指南

OceanBase ODP 主备租户读写分离配置指南 瑞蓝创软件
2026-09-15
2
导读:ODP 主备租户读写分离配置指南
图片

作者简介丁晨瑞蓝创数据库工程师















原创内容未经授权不得随意使用,转载请联系小编并注明来源


一、概述

1.1 背景

在 OceanBase 数据库中,自 4.1.0 版本起将主备管理方式下放到租户级别,集群级不再有主备角色概念。为了实现租户级主备的自动路由,OceanBase 引入了服务(Service) 的概念——一个服务下可以有多个同集群或跨集群的租户,用户通过 ODP 使用指定服务名连接数据库时,可自动路由到主租户。

ODP 自 V4.3.3 起支持对主备租户进行读写分离,开启后 ODP 会将非事务内的 读请求路由到备租户,其他请求(写请求、事务内请求)则 路由到主租户。

1.2 前提条件

组件
版本要求
OCP
V4.3.1 或之后版本
ODP
V4.3.1 或之后版本(读写分离需 V4.3.3+)
OceanBase 数据库
V4.2.4 或之后的 V4.2.x 系列版本

⚠️ 注意: 主备租户路由功能需 OCP、ODP、OceanBase 数据库三者配合使用,缺一不可。

1.3 测试环境信息

项目
主租户
test_mysql( tenant_id: 1004)
备租户
mysql_bak(tenant_id: 1010)
服务名
(Service Name) mysql
ODP 地址
192.168.5.73:2883
备集群名称
ob4421
ODP MetaDB 连接
obclient -h192.168.5.73 -P2883 -uproot@proxysys -paaAA11__

二、配置步骤

步骤一:配置主备租户服务名

需要主备租户的服务名称相同,在OCP上进行配置

主备租户读写分离的前提是主备租户具有 相同的服务名。登录系统租户(sys),查询指定服务名下关联的所有租户:

SELECT t.tenant_id, t.tenant_name
  FROM oceanbase.CDB_OB_SERVICES AS s
  JOIN DBA_OB_TENANTS AS t
  ON s.tenant_id = t.tenant_id
 WHERE s.service_name = 'mysql';

预期输出:

+-----------+-------------+
| tenant_id | tenant_name |
+-----------+-------------+
|      1004 | test_mysql  |
|      1010 | mysql_bak   |
+-----------+-------------+

确认主租户 test_mysql 和备租户 mysql_bak 均已关联到服务名 mysql。

说明: 服务名在 OCP 白屏化创建主备租户时配置,详细介绍可参见 OCP 文档《管理服务名》。如果 OCP 管理了多个集群,每个集群都需要确认服务名配置正确。

步骤二:确认 OCP 接管与 ODP 集群关联

确保以下两个条件满足:

  1. 主备租户所属的集群已被 OCP 接管
  1. 主备租户所属的集群均关联至相同的 ODP(OBProxy)集群

说明: 本次测试环境中,主备租户在同一个集群内。

步骤三:设置备集群优先路由

登录 ODP 的 MetaDB,配置 rootservice_cluster_name 参数,指定读写分离时优先路由的备集群。

-- 登录 ODP 的 MetaDB
-- obclient -h -P -uproot@proxysys -p

REPLACE INTO proxy_config(cluster_name, tenant_name, name, value, config_level)
VALUES ('''service:mysql''rootservice_cluster_name''ob4421''LEVEL_TENANT');

参数说明:

参数
说明
cluster_name
为空字符串
tenant_name
格式为 service:,本例为 service:mysql
name
配置项名称 rootservice_cluster_name
value
备租户所在的集群名称,本例为 ob4421
config_level
配置级别 LEVEL_TENANT

作用:

  • 读写分离时,优先将读请求路由到指定备集群(ob4421)上的备租户

  • 如果不配置此参数,ODP 默认将读请求发给缓存中的第一个备租户

步骤四:开启读写分离

继续在 ODP 的 MetaDB 中执行,开启主备租户读写分离功能:

REPLACE INTO proxy_config(cluster_name, tenant_name, name, value, config_level)
VALUES ('''service:mysql''enable_standby_read_write_split''true''LEVEL_TENANT');

⚠️ 注意:

  • enable_standby_read_write_split 配置修改 仅对新建连接生效,对已存在的连接不生效。
  • 若 ODP 无法获取备租户的 Service Name 信息,会将读写请求全部发送到主租户。

步骤五:通过 Service Name 连接验证

5.1 使用 Service Name 登录

通过 SERVICE: 关键字指定服务名连接 ODP:

obclient -h192.168.5.73 -P2883 -uroot@service:mysql -paaAA11__ -A

说明: 连接串中 SERVICE: 为关键字(不区分大小写),后接服务名称。也支持以下格式:

  • root@SERVICE#mysql
  • mysql-SERVICE-root

5.2 验证读请求路由到备租户

执行 SELECT 查询,验证读请求是否路由到备租户:

-- 执行查询
SELECT * FROM t1 LIMIT 1;
预期输出:
+------+
| id   |
+------+
|    1 |
+------+

获取 trace_id 并查看路由详情:

-- 获取上次执行的 trace_id
SELECT last_trace_id();
+-----------------------------------+
| last_trace_id()                   |
+-----------------------------------+
| YB42C0A8054B-00065500AB0CE52A-0-0 |
+-----------------------------------+

-- 通过 sql_audit 查看路由详情

SELECT * FROM oceanbase.gv$ob_sql_audit
 WHERE trace_id = 'YB42C0A8054B-00065500AB0CE52A-0-0'\G;
关键字段确认:
TENANT_ID: 1010          -- 备租户 ID
TENANT_NAME: mysql_bak   -- 备租户名称
TENANT_NAME 显示为 mysql_bak,说明读请求已成功路由到备租户。

5.3 验证写请求路由到主租户

执行写操作:

-- 写操作应路由到主租户 test_mysql
INSERT INTO t1 VALUES (2);

通过 gv$ob_sql_audit 查看,查询sql_audit信息为空,但是根据trace_id查看日志发现确实是路由到了主租户执行。

步骤六:查询当前配置

登录 ODP 的 MetaDB,查看当前主备租户读写分离的配置:

SELECT cluster_name, tenant_name, name, value, config_level
  FROM proxy_config
 WHERE tenant_name LIKE 'service:%';

预期输出:

+--------------+---------------+---------------------------------+--------+--------------+
| cluster_name | tenant_name   | name                            | value  | config_level |
+--------------+---------------+---------------------------------+--------+--------------+
|              | service:mysql | rootservice_cluster_name        | ob4421 | LEVEL_TENANT |
|              | service:mysql | enable_standby_read_write_split | true   | LEVEL_TENANT |
+--------------+---------------+---------------------------------+--------+--------------+

三、参考资料

  • OceanBase ODP官方文档-主备租户自动路由与读写分离:https://www.oceanbase.com/docs/common-odp-doc-cn-1000000006242264

  • OCP文档 - 管理服务名:https://www.oceanbase.com/docs/common-ocp-1000000006010578

  • rootservice_cluster_name 配置项说明:https://www.oceanbase.com/docs/common-odp-doc-cn-1000000006242563

  • enable_standby_read_write_split 配置项说明:https://www.oceanbase.com/docs/common-odp-doc-cn-1000000006242565

如果在操作过程中遇到问题,欢迎在评论区留言交流,后续我们会持续分享更多实战运维干货,记得关注不迷路,下次见~

END


瑞蓝创 OceanBase OBCP V4 精英训练营

点击下方图片立即了解详情

瑞蓝创02.png


··
·

·

▼ 点击「阅读原文」,了解更多产品技术文章

【声明】内容源于网络
0
0
瑞蓝创软件
专注于企业信息科技战略咨询、数据中心规划及运维、智能化软件产品研发,致力于为金融、能源、电信、制造等行业提供智能的业务永续及流程自动化解决方案。
内容 76
粉丝 0
瑞蓝创软件 专注于企业信息科技战略咨询、数据中心规划及运维、智能化软件产品研发,致力于为金融、能源、电信、制造等行业提供智能的业务永续及流程自动化解决方案。
总阅读999
粉丝0
内容76