首批通过分布式安全可靠测评,为关键业务系统打造
原理介绍
更新时间:2026-04-14 17:41:09
背景介绍
ODP 为用户提供了数据库接入和路由功能,您直接连接 ODP 就可以正常使用 OceanBase 数据库。在使用数据库功能时,ODP 和 OBServer 节点进行交互,且交互流程透明,连接管理就是该交互过程中的关键点之一。
特性
ODP 的连接管理有如下三个特性:
代理特性:ODP 既是客户端,也是服务端,还需要保证交互行为符合 MySQL 协议规范。
功能特性:ODP 实现了很多的连接功能特性,如访问不同集群、不同租户,再如支持主备库、分布式下的 PS 功能,以及兼容 kill、show processlist 等命令。
高可用特性:ODP 可以处理超时、机器状态变化、网络状态变化等问题,屏蔽后端异常,让用户无感知。
连接映射关系
OceanBase 数据库不同于单机数据库,当通过客户端与单机数据库建立连接时,客户端与数据库之间只有一个物理连接,如下图所示。

当通过 ODP 与 OceanBase 数据库建立连接时,客户端与 ODP 之间存在一个物理连接,而 ODP 与 OBServer 节点间可能存在多个物理连接,如下图所示。其中 Client 与 ODP 的连接称为客户端连接,ODP 与 OBServer 节点间的连接称为服务端连接。

当客户端所访问的数据存在于不同 OBServer 节点上时,ODP 会与 OceanBase 数据库建立多个物理连接并管理复用这些连接,在客户端视角看来仅存在一个逻辑连接。ODP 基于此可以提供多种功能特性,比如主备库分离、读写分离、分区表数据路由、分布式 PS、屏蔽后端异常等等。
连接功能特性
ODP 将连接的映射关系改变为 M:N,因此有些连接功能需要额外处理。举例说明:通过 show processlist 命令查看连接数时,希望看到的是客户端和 ODP 之间的连接数,而不是 ODP 与 OceanBase 数据库间的连接数。
下面我们对常见的连接功能展开详细介绍。
连接粘性
ODP 还未实现所有功能的状态同步,如事务状态、临时表状态、cursor 状态等。对于这些功能,ODP 只会将后续请求都发往状态开始的节点,这样就不需要进行状态同步,而缺点是无法充分发挥分布式系统的优势。因此,ODP 将根据功能重要程度,逐步支持相关功能的分布式化。
show processlist和kill命令配套使用show processlist命令用于展示客户端和服务端之间的连接,对于 ODP 来说,show processlist命令只展示客户端和 ODP 之间的连接,不展示 ODP 和 OBServer 节点之间的连接。kill命令用于断开一个客户端连接,客户端连接关闭后,ODP 也会关闭对应的服务端连接。对于 ODP 的kill命令,需要先获取对应的 ID(使用show processlist命令即可获取 ID)。负载均衡影响
因为 ODP 对
show processlist和kill命令做了处理,所以show processlist和kill命令只有都发往同一台 ODP 才能正常工作。在公有云等环境,ODP 前面有负载均衡,负载均衡后面挂在多个 ODP 上,此时,如果执行
show prcesslist和kill命令是两个不同的连接,负载均衡组件可能将请求发往不同的 ODP,在这种情况下,建议不要使用相关命令。