首批通过分布式安全可靠测评,为关键业务系统打造
管理服务名
更新时间:2026-04-14 15:16:09
本节为您介绍服务名的相关信息,包括背景介绍、版本限制及功能的使用场景和方法。
背景介绍
OCP V4.2.0 开始支持租户级主备,但由于 OBProxy、OceanBase 的限制,用户在 OCP 上执行主备租户日常切换、容灾切换后,必须修改应用的数据库连接串,此时会无法实现类似主备集群切主后的自动路由到新主的能力。因此,OceanBase 设计了一种支持自动路由的方案,该方案的实现需要 OCP、OBProxy、OceanBase 三者协同工作。
OceanBase 的 SERVICE_NAME(即:服务名)定义了一个服务,通过 SQL 指令将服务名指定给某个租户,OCP 保证主备租户的服务名相同,非主备租户的服务名不同。具体主备租户如下表所示。
| 租户名 | 角色 | 所属 OceanBase 集群 | Service Name |
|---|---|---|---|
| TenantA | PRIMARY | ClusterA | ServiceTest |
| TenantB | STANDBY | ClusterB | ServiceTest |
下图为业务应用通过服务名访问租户的示意图:

OceanBase 提供了为某个租户创建、启动、停止、删除服务名四个操作,对应四条 SQL,其中创建服务名后自动 START,租户的服务名启动成功后,才能通过服务名建立 Session;删除服务名需要先停止。
注意
OceanBase 并没有 “一个服务名必须指定给同一套主备租户” 的限制,即 OceanBase 可以将服务名指定给任意一个租户,上述限制需要 OCP 来做。
版本限制
OCP、OceanBase、OBProxy 需同时满足如下版本要求:
- OCP:[V4.3.1, +∞)。
- OceanBase:V4.2.1.9、[V4.2.4.0, V4.3.0.0)、[V4.3.3.0, +∞)。
- OBProxy:[V4.3.1.0, +∞)。
功能使用
自动路由
实现自动路由需要如下两个条件,缺一不可:
- 主备租户拥有相同的服务名。
- 主备租户所属的 OceanBase 集群关联同一个 OBProxy 集群,该 OBProxy 集群在访问主备租户时可实现切主自动路由。
设置服务名
在 OCP 上为租户设置服务名后,可以通过服务名连接该租户。
obclient -hIP -PPORT -uroot@SERVICE:service1 -pPASSWORD
其中 SERVICE 为关键字,并根据实际服务名替换 service1。OCP 有 3 种方式设置租户服务名:
创建租户时指定:创建租户时可直接指定服务名。

租户详情页设置:在租户详情页为租户添加服务名,并支持对已有服务名进行 编辑 或 删除。

同步服务名:OCP 每分钟会进行一次租户信息同步,将 OceanBase 内部表/视图中的租户信息与 OCP 中的元信息进行对比,并进行更新,此时租户服务名会随之更新。
切主场景应用
日常切换
日常切换新增如下两项预检查:
- 主备租户都未配置服务名,或配置了一致的服务名。
- 主备租户有服务名时,不能与其他无主备关系的租户服务名相同。
日常切换前,如果备租户所在的 OceanBase 集群没有关联主租户所在 OceanBase 集群关联的 OBProxy,OCP 会给出明确警告: 日常切换后可能无法自动路由,但不会强行禁止日常切换。日常切换不会修改租户的服务名,业务应用使用 [用户名]@SERVICE_NAME:[serviceName] 的方式通过 OBProxy 访问 OceanBase 租户,不需要修改连接串。
容灾切换
OceanBase 在执行容灾切换时,会将新主租户的服务名删除,业务将无法通过服务名连接新主租户,因此必须修改连接串。为了实现不修改连接串,OCP 进行了功能包装,即在 OCP 上执行容灾切换前选择是否为新主租户设置服务名,此为可选操作。您可保持新主租户的服务名与原来一致,此时 Failover 后业务可不修改连接串直接访问新主租户。
注意
若新主租户的服务名与原来一致,当 OBProxy 自动访问新主租户时,可能会因为新主租户 RPO!=0 而出现数据不一致的问题。
具体原理如下图所示。租户 B 进行容灾切换之后,原主备关系被分成了两个部分,(租户 B、租户 C)和(租户 A、租户 D、租户 E),其中租户 A、租户 C、租户 D、租户 E 的服务名仍为 ServiceA ,租户 B 的服务名被删除。为了让业务应用不修改连接串,OCP 在容灾切换流程的最后重新将租户 B 的服务名置为 ServiceA,并将租户 A、租户 D、租户 E 的服务名置为 INVALID。INVALID 状态是 OCP 的概念,作用是对 OBProxy 屏蔽该租户的服务名,避免其访问旧主,Config Server 只会返回服务名状态不为 INVALID 的租户。

主备解耦
对 OceanBase 来说,主备解耦和备租户 Failover 是同一条指令,但在 OCP 上是两个不同的功能入口。如下图所示的主备关系,原主租户此时处于正常状态,解耦后 OceanBase 只会自动将租户 B 的服务名删除,OCP 同时将租户 C 的服务名删除,避免不属于主备关系的租户拥有同一个服务名。

多集群模式适配
当主备 OceanBase 集群分别部署在主备 OCP 集群时,主备 OCP 均可以同时返回主备 OceanBase 的 RS List 信息,此方式可以在主备 OceanBase 集群 Swithover 时不需要修改应用连接串。示意图如下:

主备 OceanBase 任意集群与 OBProxy 建立关联后,OBProxy 即可同时获取主备 OceanBase 的 RS List,主要取决于两个条件:
- 主备 OceanBase 集群的集群名相同,OBProxy 请求 RS List 时使用一个集群名即可。
- 主备 OceanBase 集群的 proxyro@sys 密码一致,只关联其中一个,proxyro 密码可以通用。
为了支持多集群模式下做到类似主备 OceanBase 集群的能力,OCP 从 V4.3.2 开始支持跨 OCP 集群建立 OceanBase 与 OBProxy 关联的能力:
支持为 OceanBase 集群关联远程 OBProxy 集群,下拉列表中展示远程 OBProxy 集群。

支持为 OBProxy 集群关联远程 OceanBase 集群,下拉列表中展示远程 OceanBase 集群。

创建 OceanBase 集群时同时关联 OBProxy 集群,下拉列表展示远程 OBProxy 集群。

本地 OBProxy 集群与远程 OceanBase 集群建立关联后,可通过本地 OBProxy 访问远程 OceanBase 集群上的租户。