ITPub博客

首页 > 数据库 > 国内数据库 > OceanBase ODP 主备租户读写分离配置指南

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

原创 国内数据库 作者:瑞蓝创_RLC_888 时间:2026-09-15 16:54:35 0 删除 编辑

一、概述

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 |
+--------------+---------------+---------------------------------+--------+--------------+

三、参考资料

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047467/viewspace-3182445/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于企业信息科技战略咨询、数据中心规划及运维、智能化软件产品研发,致力于为金融、能源、电信、制造等行业提供智能的业务永续及流程自动化解决方案。

注册时间:2025-09-08

  • 博文量
    89
  • 访问量
    86692