---
title: "ODP 路由功能 | OceanBase 文档中心"
description: ODP 路由功能 通过 ODP 可以访问不同集群中不同租户的不同机器，这也是 ODP 可以实现集群路由、租户路由和租户内路由的原因，本章将围绕前两部分介绍 ODP 的路由功能。有关租户内路由，详情请参见 租户内路由 。 集群路由 集群路由是指 ODP 路由功能支持访问不同的集群，它的关键点在于获取集群名和 rslis…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.1.0 企业版

# ODP 路由功能

更新时间：2026-07-04 19:26:24

通过 ODP 可以访问不同集群中不同租户的不同机器，这也是 ODP 可以实现集群路由、租户路由和租户内路由的原因，本章将围绕前两部分介绍 ODP 的路由功能。有关租户内路由，详情请参见 [租户内路由](https://www.oceanbase.com/docs/enterprise-odp-enterprise-cn-10000000001717339)。

## 集群路由

集群路由是指 ODP 路由功能支持访问不同的集群，它的关键点在于获取集群名和 rslist 的映射关系。

- 对于启动参数指定 rslist 的启动方式，集群名和 rslist 的映射关系通过启动参数指定
 - 对于启动参数指定 `obproxy_config_server_url` 的启动方式，集群名和 rslist 的映射关系通过访问 url 获取

#### 注意

这里的 rslist 不需要包含所有的集群机器列表，ODP 会通过访问视图获取集群所有机器，一般 rslist 为 RootServer（OceanBase 的总控服务）所在的机器。

![集群路由](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odp/V4.0.0/zh-CN/6.data-routing/2.routing-function-01.png)

从上图可以看到，OCP 是集群路由时非常重要的一个模块。如果 OCP 模块出现异常，常见的问题有如下两个。

- 服务不可用：ODP 无法通过 OCP 获取集群名和 rslist 的映射关系，导致登录失败。
 - 返回结果有误：例如 ODP 通过 HTTP 协议访问 OCP 获取结果，获取到的结果为 JSON 格式，如果返回结果非 JSON 格式，会导致结果解析失败。

ODP 是在用户登录首次访问集群时获取 rslist，并保存到内存中，后续再访问该集群，可直接从 ODP 的内存中获取。

#### 注意

若 OCP 在集群内存信息创建好后出现异常，即使 ODP 仍可以正常工作，也要及时排查 OCP 问题。

## 租户路由

OceanBase 数据库中，一个集群有多个租户，租户路由是指 ODP 路由功能支持访问不同的租户。在众多租户中，sys 租户比较特殊，类似于管理员租户，和集群管理相关。本节将分开讨论 sys 租户路由和普通租户路由。

### sys 租户路由

ODP 完成集群路由后可获得集群的 rslist，此时 ODP 会通过 `proxyro@sys` 账号登录 rslist 中的一台机器，并通过视图 `DBA_OB_SERVERS` 获取集群的所有机器节点。在 OceanBase 数据库的现有实现中，sys 在每个节点都有分布，因此，`DBA_OB_SERVERS` 返回的结果也就是 sys 租户的路由信息。

ODP 会每 15 秒访问一次 `DBA_OB_SERVERS`，维护最新的路由信息，这样可以感知到集群发生的节点变更。

除了集群机器列表，ODP 还会通过 sys 租户获取 partition 分布信息、Zone 信息、租户信息等。由此可见 sys 租户对 ODP 的重要性。

### 普通租户路由

与 sys 租户的路由信息就是集群的机器列表不同，普通租户路由信息是租户资源所在的机器。

#### 注意

查询租户路由信息并不是通过 unit 相关的表，而是通过特殊表名 `__all_dummy` 表示查询租户信息。ODP 需要通过内部表 `__all_virtual_proxy_schema` 获取租户的机器列表，在访问 `__all_virtual_proxy_schema` 时，ODP 指定表名（`__all_dummy`）和指定租户名获取租户的节点信息。

![租户路由](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odp/V4.0.0/zh-CN/6.data-routing/2.routing-function-02.png)

ODP 会将获取到的租户信息保存在本地内存中，并根据一定策略进行缓存信息的更新。对于 sys 租户，通过每 15 秒一次的拉取任务获得最新的信息；对于普通租户，ODP 的刷新频率并不高，普通租户的路由缓存策略如下。

- 创建：首次访问租户时，通过 `__all_virtual_proxy_schema` 获得普通租户路由信息并创建。
 - 淘汰：当 OBServer 节点返回错误码 `OB_TENANT_NOT_IN_SERVER` 时设置缓存失效。
 - 更新：当缓存失效后重新访问 `__all_virtual_proxy_schema` 获得普通租户路由信息。

总的来说，在多租户架构下，ODP 通过 sys 租户获得元数据信息（sys 租户本身路由信息就是集群的机器列表），然后通过元数据信息获得租户的路由信息。通过租户路由功能，ODP 支持了 OceanBase 数据库的多租户架构。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
