首批通过分布式安全可靠测评,为关键业务系统打造
主备租户切主自动路由
更新时间:2026-04-27 15:35:53
本节为您介绍如何进行主备租户切主自动路由。
应用场景
双机房部署主备租户,使用服务名(Service Name)实现主备切换自动路由,业务无需修改连接串。关于服务名的更多介绍,可参见 管理服务名。
前提条件
- OCP、OceanBase、OBProxy 需同时满足如下版本要求:
- OCP:[V4.3.1, +∞)。
- OceanBase:[V4.2.1.9, V4.2.2.0)、[V4.2.4.0, V4.3.0.0)、[V4.3.3.0, +∞)。
- OBProxy:[V4.3.1.0, +∞)。
- 集群处于 正常运行 状态。
- 切主前主备租户均处于 正常运行 状态。
技术原理
在 OCP 中为主备租户设置相同的服务名,并使用同一个 OBProxy 分别关联主备租户所属 OceanBase 集群后,OBProxy 将通过 OCP 提供的租户服务名信息自动感知主租户的位置,并将请求路由到主租户。对主备租户进行切换后,业务 Session 可实现自动路由到新主租户。
为实现此能力,业务应用须通过服务名连接到业务数据库,连接串示例如下。
obclient -h${IP} -P${PORT} -u${USERNAME}@SERVICE:${SERVICE_NAME} -D${DB_NAME}
- IP: 同时与主备租户关联的 OBProxy 的 IP 地址或上层 LB 地址。
- PORT: 同时与主备租户关联的 OBProxy 的 IP 地址或上层 LB 端口。
- USERNAME: 连接数据库的用户名。
- SERVICE_NAME: 主备租户共同的服务名。
- DB_NAME: 业务数据库名。
主备租户 Swichover
Switchover 不会修改租户的服务名,业务应用使用 [用户名]@SERVICE_NAME:[serviceName] 的方式通过 OBProxy 访问租户,不需要修改连接串。
备租户 Failover
执行备租户 Failover 后,OceanBase 会将新主租户的服务名删除,业务无法通过服务名连接新主租户,因此必须修改连接串。为了实现 Failover 后不修改连接串,OCP 进行了功能包装,即在 OCP 上执行 Failover 前选择是否为新主租户设置服务名,此为可选操作。您可选择为新主租户保留原服务名,此时 Failover 后业务可不修改连接串直接访问新主租户。
注意
若选择为新主租户保留原服务名,OBProxy 将自动访问新主租户,此时可能会因为新主租户 RPO != 0 而出现数据不一致的问题。
以下为租户 Failover 不修改连接串的原理示意图。如图所示,租户 B Failover 之后,原主备关系被分成了两个部分,(B、C)和 (A、D、E),其中租户 A、租户 C、租户 D、租户 E 的服务名仍为 ServiceA ,租户 B 的服务名被删除。为了让业务应用不修改连接串,OCP 在 Failover 流程的最后重新将租户 B 的服务名重新置为 ServiceA,并将租户 A、租户 D、租户 E 的服务名置为 INVALID。INVALID 状态是 OCP 的概念,作用是对 OBProxy 屏蔽该租户的服务名,避免其访问旧主,Config Server(OCP)只会返回服务名状态不为 INVALID 的租户。

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

操作步骤
步骤一: 配置服务名
在 创建租户 页面配置服务名。
- 进入新建租户页面。
- 当租户所属集群及 OBProxy 版本满足要求时,可在 基本设置 模块设置租户服务名。
在 租户概览 页面配置服务名。
进入租户 概览 页面。
当租户所属集群及 OBProxy 版本满足要求时,可在 基本信息 模块为租户添加服务名。
- 支持同步修改主备租户服务名。
- 支持对租户服务名进行其它操作,包括 编辑 和 删除。
步骤二: 关联 OBProxy 集群
将主备租户所属的 OceanBase 集群关联至同一个 OBProxy 集群。