基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
ODP 路由功能
更新时间:2026-07-04 19:26:24
通过 ODP 可以访问不同集群中不同租户的不同机器,这也是 ODP 可以实现集群路由、租户路由和租户内路由的原因,本章将围绕前两部分介绍 ODP 的路由功能。有关租户内路由,详情请参见 租户内路由。
集群路由
集群路由是指 ODP 路由功能支持访问不同的集群,它的关键点在于获取集群名和 rslist 的映射关系。
对于启动参数指定 rslist 的启动方式,集群名和 rslist 的映射关系通过启动参数指定
对于启动参数指定
obproxy_config_server_url的启动方式,集群名和 rslist 的映射关系通过访问 url 获取
注意
这里的 rslist 不需要包含所有的集群机器列表,ODP 会通过访问视图获取集群所有机器,一般 rslist 为 RootServer(OceanBase 的总控服务)所在的机器。

从上图可以看到,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)和指定租户名获取租户的节点信息。

ODP 会将获取到的租户信息保存在本地内存中,并根据一定策略进行缓存信息的更新。对于 sys 租户,通过每 15 秒一次的拉取任务获得最新的信息;对于普通租户,ODP 的刷新频率并不高,普通租户的路由缓存策略如下。
创建:首次访问租户时,通过
__all_virtual_proxy_schema获得普通租户路由信息并创建。淘汰:当 OBServer 节点返回错误码
OB_TENANT_NOT_IN_SERVER时设置缓存失效。更新:当缓存失效后重新访问
__all_virtual_proxy_schema获得普通租户路由信息。
总的来说,在多租户架构下,ODP 通过 sys 租户获得元数据信息(sys 租户本身路由信息就是集群的机器列表),然后通过元数据信息获得租户的路由信息。通过租户路由功能,ODP 支持了 OceanBase 数据库的多租户架构。