13.OBProxy 管理概述
OBProxy 管理概述
OBProxy 概述
OceanBase 数据库与传统单机数据库不同,OceanBase 数据库是分布式数据库,每个表甚至每个表的不同分区都可能存放在不同的机器上。想要对表进行读写,必须先要定位到数据所属的表或是分区的主副本位置,然后才能执行相应的 SQL DML 语句,这在应用层面而言是几乎不可能做到的。OBProxy 作为 OceanBase 数据库专用的反向代理软件,其核心功能就是路由以将客户端发起的数据访问请求转发到正确的 OBServer 节点上。
客户端通过 OBProxy 访问 OceanBase 数据库的数据链路如下图所示,用户通过任意 Client 驱动发出请求,请求通过负载均衡组件访问到任意一台无状态的 OBProxy 上,然后 OBProxy 再将用户请求转发到后端 OceanBase 集群中最佳的 OBServer 节点上去执行。
说明
- 这里负载均衡组件可以是市场上常见的产品,例如 SLB 和 F5 等。
- OBProxy 不负责分库分表,也不作为 SQL 引擎参与执行计划的生成调度,只负责纯粹的反向代理转发。
每个 OBServer 节点均包含完整的 SQL 引擎和存储引擎,用来负责解析用户 SQL 以生成物理执行计划并执行。分布式的 OBServer 节点之间通过 Paxos 协议以保证高可用性。这种架构设计中,OBProxy 只承担基本的路由和容灾功能,而数据库的功能全部交由 OBServer 节点实现。这样更加简单明确的分工可以将各组件性能做得更加极致,OceanBase 数据库整体最高也能做到近似访问单机数据库的性能。
OBProxy 支持将请求正确发送至主副本,并且通过特定配置还支持读写分离和备优先读等场景。另外在 OBServer 节点发生宕机、升级或合并等状态时,可以通过黑名单机制确保用户请求可以被路由至状态正常的 OBServer 节点上。

OCP 支持 obproxy 进程随 ocp_agent 开机自启动功能,当机器重启后,会自动拉起 obproxy 并恢复至机器重启前的状态,详情可参见 OCP Agent 进程。
如何用 OBProxy 实现 OceanBase 的最佳路由策略
本文基于业务中一类常见的路由问题展开,对OceanBase的路由功能及对应配置项做详细介绍,指导用户在业务实践中如何正确的配置路由策略及快速排查路由问题

引言
OBProxy,即OceanBase Database Proxy,也简称为ODP,是 OceanBase数据库的专属服务代理。通过应用OBProxy,由后端OceanBase集群的分布式特性所带来的复杂性得以屏蔽,从而使得访问分布式数据库的体验如同访问单机数据库一般容易。
OBProxy的核心特性是最佳路由,基本逻辑就是ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer 节点,最后将执行结果返回给用户。为了满足客户在不同场景下的路由需求,实现最佳的路由效果,OBPrxoy 支持丰富的路由功能,这就涉及到路由配置项的设置及组合,本文基于业务中一类常见的路由问题展开,对路由功能及对应配置项做详细介绍,指导用户在业务实践中如何正确的配置路由策略及快速排查路由问题。
路由问题
问题描述
只读地址访问到主副本
云客户通过租户的只读地址执行大查询获取数据,结果访问到了主副本,影响了主副本的正常业务。
原因分析
开启了 enable_cached_server 和 enable_primary_zone
在设置 obproxy 的参数 enable_primary_zone = true 和 enable_cached_server =true 的情况下,路由逻辑:
enable_primary_zone= true,用户登录时,会将登录请求发往租户的主副本
enable_cached_server =true,在OBProxy没有解析出表名、表分区计算失败等情况下,请求会复用前一个连接,也就是登录时选择的主副本,这就导致请求无法根据只读地址信息对路由做优化,造成后续的所有请求都发往了主副本。
解决方法
关闭 enable_cached_server 和 enable_primary_zone
路由功能
OBProxy提供了丰富的路由功能,用户可以根据实际需要,设置对应的配置项来控制各种路由策略。
强制路由
1.指定IP路由:target_db_server ,OBProxy 将请求直接路由到指定的 OBServer,具有最高优先级,示例:
ALTER PROXYCONFIG SET target_db_server = '127.0.0.1:2993;11.124.5.193:50109';
OBProxy收到的所有请求都会路由到127.0.0.1:2993,如果127.0.0.1:2993节点不存在或者故障,则路由到11.124.5.193:50109
- 指定zone路由:proxy_primary_zone_name,OBProxy 将请求直接路由到指定的 zone,示例:
ALTER PROXYCONFIG SET proxy_primary_zone_name='z2';
OBProxy收到的所有请求都会路由到 z2
指定IP路由和指定zone路由,是强制性的路由,不会区分是否强读,适用于不关心Leader位置,需要路由到指定节点的场景。
如果是交易支付等强读业务,希望路由到Leader的场景,需要保强制路由配置项没有设置,避免产生大量远程路由、二次路由等问题。
- 特定场景强制路由
非分布式事务路由,事务内语句强制路由至事务开启 OBServer 节点
会话级临时表路由,对会话级临时表进行查询时,会强制路由至第一次查询临时表的 OBServer 节点
CURSOR/PIECES 路由,客户端使用 CURSOR/PIECES 流式获取/上传数据时,所有请求会强制路由至同一 OBServer 节点

浙公网安备 33010602011771号