【赵渝强老师】OceanBase的连接与路由管理

作者:赵渝强老师日期:2025/11/17

在这里插入图片描述

OceanBase数据库连接路由管理组件ODP(OceanBase Database Proxy)是OceanBase数据库专用的连接路由管理集群。OceanBase数据库用户的数据会以多副本的形式存放在各个OBServer节点上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标OBServer节点,最后将执行结果返回给用户。

一、 ODP简介

OceanBase数据库与传统单机数据库不同,OceanBase数据库是分布式数据库,每个表甚至每个表的不同分区都可能存放在不同的机器上。想要对表进行读写,必须先要定位到数据所属的表或是分区的主副本位置,然后才能执行相应的SQL语句,这在应用层面而言是几乎不可能做到的。ODP作为OceanBase数据库专用的反向代理软件,其核心功能是路由,将客户端发起的数据访问请求转发到正确的OBServer节点上,并将OBServer节点的响应结果转发给客户端。

视频讲解如下
【赵渝强老师】OceanBase的连接与路由管理

作为OceanBase数据库的关键组件,ODP具有以下特性:

  • 连接管理:针对一个客户端的物理连接,ODP维持自身到后端多个OBServer节点的连接,并维持了每个OBServer节点连接的会话状态,保证了客户端高效访问各个OBServer节点。
  • 最佳路由:ODP充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、OceanBase多地部署的最优链路,以及OceanBase各机器的状态及负载情况,将用户的请求路由到最佳的OBServer节点,最大程度地保证了OceanBase整体的高性能运转。
  • 高性能转发:ODP完整兼容MySQL协议,并支持OceanBase自研协议,采用多线程异步框架和透明流式转发的设计,保证了数据的高性能转发,同时确保了自身对机器资源的最小消耗。
  • 易运维:ODP本身无状态,支持无限水平扩展,支持同时访问多个OceanBase集群。可通过丰富的内部命令对ODP状态进行实时监控,这使得运维简单便利。
  • 高可用:ODP高可用分为两部分:一方面保证自身高可用,持续提供代理服务;另一方面ODP是OceanBase高可用体系的主要组成部分,可以对用户屏蔽宕机、升级等情况,保证OceanBase数据库服务的稳定和快速恢复。
  • 专有协议:ODP与OBServer节点默认采用了OceanBase专有协议,如增加报文的CRC校验保证与OBServer节点链路的正确性,增强传输协议以支持Oracle兼容性的数据类型和交互模型。

客户端通过ODP访问OceanBase数据库的数据链路如下图所示。
在这里插入图片描述

二、 使用ODP连接数据库集群

部署好ODP集群后,便可以通过OBProxy连接OceanBase数据库集群了,下面是具体的操作步骤。
(1)在中控机上执行命令查看集群的节点信息。

1obd cluster display myob-cluster
2
3# 输出的信息如下:
4......
5Connect to obproxy ok
6+-------------------------------------------------------------------+
7|                             obproxy-ce                            |
8+---------------+------+-----------------+-----------------+--------+
9| ip            | port | prometheus_port | rpc_listen_port | status |
10+---------------+------+-----------------+-----------------+--------+
11| 192.168.79.11 | 2883 | 2884            | 2885            | active |
12| 192.168.79.13 | 2883 | 2884            | 2885            | active |
13+---------------+------+-----------------+-----------------+--------+
14obclient -h192.168.79.11 -P2883 -uroot@proxysys -p'Welcome_1' -Doceanbase -A 
15......
16
17# 提示:从输出的信息可以看出,ODP集群中包含两台OBProxy,
18# 它们分别运行在:192.168.79.11和192.168.79.13主机上。
19

(2)登录192.168.79.11主机,查看OBProxy的目录结构。

1tree /root/obproxy/ -L 1
2
3# 输出的信息如下:
4/root/obproxy/
5├── bin					保存ODP的可执行二进制文件
6├── control-config
7├── etc					保存配置信息的目录
8├── lib
9├── log					保存日志文件的目录
10├── obproxyd.sh			OBProxy的守护进程
11├── run					保存OBProxy启动的进程号信息
12└── sharding-config		保存Sharding(分片)相关的配置文件
13
14# 提示:如果OBProxy进程不存在,或者异常宕机。
15# obproxyd.sh脚本负责重新启动OBProxy进程。
16

(3)通过操作的的ps命令可以查看到OBProxy的进程信息。

1ps -ef | grep obproxy
2
3# 输出的信息如下:
4root  4895 ... bash /root/obproxy/obproxyd.sh /root/obproxy 192.168.79.11 2883 daemon
5root  4904 ... /root/obproxy/bin/obproxy --listen_port 2883
6root 10892 ... grep obproxy
7
8# 提示:这里的进程号4895与4904与run目录下的进程号文件保持一致,如下所示:
9[root@node11 obproxy]# ls run/
10obproxy-192.168.79.11-2883.pid  obproxyd-192.168.79.11-2883.pid
11[root@node11 obproxy]# cat run/*
124904
134895
14

(4)通过OBProxy连接OceanBase数据库集群

1obclient -h192.168.79.11 -P2883 -uroot@sys#myob-cluster -pWelcome_1 -Doceanbase -A
2
3# 提示:该命令也可以简写成下面的形式:
4obclient -h192.168.79.11 -P2883 -uroot -pWelcome_1 -Doceanbase -A
5
6# 此时如果出现下面的错误:
7ERROR 2013 (HY000): 
8Lost connection to MySQL server at 'reading authorization packet', 
9system error: 11
10
11# 这是由于集群配置信息中的proxyro_password不一致造成。
12

(5)在中控机上执行下面的命令编辑集群的配置信息。

1obd cluster edit-config myob-cluster
2

(6)将global下的proxyro_password修改为正确的密码,保存并退出。

1  global:
2    ......
3    root_password: Welcome_1
4    appname: myob-cluster
5    ocp_agent_monitor_password: ztkrtULS7u
6    proxyro_password: YqNSd87E3K
7    ......
8	
9  修改为:
10  
11  global:
12    ......
13    root_password: Welcome_1
14    appname: myob-cluster
15    ocp_agent_monitor_password: ztkrtULS7u
16    proxyro_password: Welcome_1
17    ......
18

(7)重新加载配置信息。

1obd cluster reload myob-cluster
2

(8)通过OBProxy连接OceanBase数据库集群

1obclient -h192.168.79.11 -P2883 -uroot@sys#myob-cluster -pWelcome_1 -Doceanbase -A
2
3ob> show databases;
4+--------------------+
5| Database           |
6+--------------------+
7| information_schema |
8| LBACSYS            |
9| mysql              |
10| oceanbase          |
11| ocs                |
12| ORAAUDITOR         |
13| scott              |
14| SYS                |
15| sys_external_tbs   |
16| test               |
17+--------------------+
1810 rows in set (0.011 sec)
19

《OceanBase数据库课程:MySQ模式》

三、 查看ODP配置属性

通过使用root@sys用户通过ODP代理登录OceanBase数据库,或使用root@proxysys用户登录ODP均可以查看ODP的配置参数。下面是具体的操作步骤:
(1)执行命令登录OceanBase数据库或者ODP

1# 登录OceanBase数据库
2obclient -h192.168.79.11 -P2883 -uroot@sys#myob-cluster -pWelcome_1 -Doceanbase -A
3
4# 登录ODP
5obclient -h192.168.79.11 -P2883 -uroot@proxysys -p'Welcome_1' -Doceanbase -A
6

(2)查看ODP的参数配置。

1ob> show proxyconfig \G;
2
3# 输出的信息如下:
4......
5*************************** 326. row ***************************
6         name: json_config_cluster_count
7        value: 1
8         info: ob cluster count, meta db cluster not included
9  need_reboot: false
10visible_level: virtual
11        range: NULL
12 config_level: NULL
13*************************** 327. row ***************************
14         name: json_config_modified_time
15        value: 2025-04-15 14:12:20.271644
16         info: json config modified time
17  need_reboot: false
18visible_level: virtual
19        range: NULL
20 config_level: NULL
21327 rows in set (0.012 sec)
22

(3)使用like关键字查看ODP的参数配置。

1ob> show proxyconfig like '%full%'\G;
2
3# 输出的信息如下:
4*************************** 1. row ***************************
5         name: enable_full_username
6        value: False
7        info: used for non-cloud user, if set true, username must have tenant and cluster
8  need_reboot: false
9visible_level: SYS
10        range: 
11 config_level: LEVEL_GLOBAL
12*************************** 2. row ***************************
13         name: enable_cloud_full_username
14        value: False
15         info: used for cloud user, if set false, treat all login user as username
16  need_reboot: false
17visible_level: SYS
18        range: 
19 config_level: LEVEL_VIP
20*************************** 3. row ***************************
21         name: enable_full_link_trace
22        value: False
23         info: if enable proxy will use full link trace to trace query execution
24  need_reboot: false
25visible_level: USER
26        range: 
27 config_level: LEVEL_GLOBAL
283 rows in set (0.009 sec)
29

(4)执行select * from proxy_config命令查看配置参数。

1ob> select * from proxy_config;
2
3# 输出信息如下:
4+---------------------------------+-----------------+--------------+
5......                                              
6| server_state_refresh_interval   | 20s             | LEVEL_GLOBAL |
7| cache_cleaner_clean_interval    | 20s             | LEVEL_GLOBAL |
8| proxy_hot_upgrade_check_interval| 5s              | LEVEL_GLOBAL |
9| proxy_info_check_interval       | 60s             | LEVEL_GLOBAL |
10| refresh_config                  | False           | LEVEL_GLOBAL |
11| refresh_idc_list                | False           | LEVEL_GLOBAL |
12| refresh_rslist                  | False           | LEVEL_GLOBAL |
13| refresh_json_config             | False           | LEVEL_GLOBAL |
14| enable_xa_route                 | True            | LEVEL_GLOBAL |
15| observer_sys_password           | d809d427528be882| LEVEL_GLOBAL |
16+---------------------------------+-----------------+--------------+
17319 rows in set (0.056 sec)
18
19# 提示:该命令仅在使用root@proxysys用户登录ODP时可执行,其他用户下执行会报错。
20

《OceanBase数据库课程:Oracle模式》

四、 修改ODP配置属性

修改ODP配置属性的值可以通过以下两种方式实现:

  • 在ODP运行时,使用root@proxysys用户登录ODP后,执行alter proxyconfig命令修改ODP配置项。
  • 在ODP启动时,启动命令中添加-o选项修改配置项。

这里以配置属性enable_cluster_checkout为例来进行演示。该属性用于控制是否进行集群名称校验,默认值是False。如果启用集群校验,在登录时ODP会发送集群名称,服务器会对其进行检查。下面是具体的操作步骤。

方式一:通过alter proxyconfig命令

(1)登录ODP

1obclient -h192.168.79.11 -P2883 -uroot@proxysys -pWelcome_1
2

(2)查看配置属性enable_cluster_checkout的值。

1ob> show proxyconfig like 'enable_cluster_checkout' \G;
2
3# 输出信息如下:
4*************************** 1. row ***************************
5         name: enable_cluster_checkout
6        value: False
7         info: if enable cluster checkout, proxy will send cluster 
8		       name when login and server will check it
9  need_reboot: false
10visible_level: USER
11        range: 
12 config_level: LEVEL_GLOBAL
131 row in set (0.002 sec)
14

(3)通过alter proxyconfig命令修改属性。

1ob> alter proxyconfig set enable_cluster_checkout=True;
2

(4)重新查看配置属性enable_cluster_checkout的值。

1ob> show proxyconfig like 'enable_cluster_checkout' \G;
2
3# 输出信息如下:
4*************************** 1. row ***************************
5         name: enable_cluster_checkout
6        value: True
7         info: if enable cluster checkout, proxy will send cluster 
8		       name when login and server will check it
9  need_reboot: false
10visible_level: USER
11        range: 
12 config_level: LEVEL_GLOBAL
131 row in set (0.002 sec)
14

方式二:通过启动命令的-o选项

(1)在中控机上执行命令查看集群的节点信息。

1obd cluster display myob-cluster
2
3# 输出的信息如下:
4......
5Connect to obproxy ok
6+-------------------------------------------------------------------+
7|                             obproxy-ce                            |
8+---------------+------+-----------------+-----------------+--------+
9| ip            | port | prometheus_port | rpc_listen_port | status |
10+---------------+------+-----------------+-----------------+--------+
11| 192.168.79.11 | 2883 | 2884            | 2885            | active |
12| 192.168.79.13 | 2883 | 2884            | 2885            | active |
13+---------------+------+-----------------+-----------------+--------+
14obclient -h192.168.79.11 -P2883 -uroot@proxysys -p'Welcome_1' -Doceanbase -A 
15......
16

(2)以192.168.79.11主机上的OBProxy为例,查看OBProxy进程信息并停止OBProxy

1ps -ef|grep obproxy
2
3# 输出信息如下:
4Root 7574 1 ... bash /root/obproxy/obproxyd.sh /root/obproxy 192.168.79.11 2883 daemon
5root 7583   1  ... /root/obproxy/bin/obproxy --listen_port 2883
6root 11441 5714  ... grep obproxy
7
8# 停止obproxy 进程和obproxyd进程
9kill -9 7574
10kill -9 7583
11
12# 提示:obproxyd进程也需要停止。
13# 否则当obproxy进程停止后,obproxyd会自动重启obproxy进程。
14

(3)重启OBProxy,并通过-o选项修改配置参数的值。

1cd /root/obproxy/
2bin/obproxy -p 2883 -r'192.168.79.11:2881;192.168.79.12:2881;192.168.79.13:2881' \
3  -o enable_cluster_checkout=True -c myob-cluster
4

(4)连接OBProxy确认配置参数已修改。

1obclient -h192.168.79.11 -P2883 -uroot@proxysys -pWelcome_1
2
3ob> show proxyconfig like 'enable_cluster_checkout' \G;
4
5# 输出的信息如下:
6*************************** 1. row ***************************
7         name: enable_cluster_checkout
8        value: True
9         info: if enable cluster checkout, proxy will send 
10		       cluster name when login and server will check it
11  need_reboot: false
12visible_level: USER
13        range: 
14 config_level: LEVEL_GLOBAL
151 row in set (0.009 sec)
16

《OceanBase数据库课程:MySQ模式》

《OceanBase数据库课程:Oracle模式》


【赵渝强老师】OceanBase的连接与路由管理》 是转载文章,点击查看原文


相关推荐


Redis(127)Redis的内部数据结构是什么?
Victor3562025/11/16

Redis 是一个高性能的内存数据库,其底层实现依赖于多种数据结构。这些数据结构不仅决定了 Redis 的高性能,也使得 Redis 在处理不同类型的数据时能够保持高效。下面详细介绍 Redis 的内部数据结构,并结合具体代码示例进行解释。 1. 字符串(String) 字符串是 Redis 中最基本的数据类型。它不仅可以存储文本,还可以存储二进制数据,如图像或序列化对象。 示例代码 import redis.clients.jedis.Jedis; public class RedisStr


基于STM32与RS485总线的串口通信
listhi5202025/11/14

一、硬件架构设计 1. 硬件连接示意图 STM32(F103C8T6) MAX485芯片 LabVIEW PC - - USART1_TX → DI → RO (MAX485) USART1_RX ← RO → DI (MAX485) DE/RE → GPIOA.8 → DE/RE (控制) GND → GND 3.3V → VCC 2. 关键元器件选型 元件型号作用MCUSTM32F103C8T6主控芯片R


电脑硬盘数据恢复原理及核心技术解析
电脑小白技术2025/11/13

数据恢复技术的核心在于理解文件删除的底层逻辑。当文件被删除时,操作系统并未立即清除数据,而是将文件占用的空间标记为可覆盖。这意味着,只要这些空间未被新数据覆盖,文件就有机会被恢复。数据恢复技术通过扫描硬盘,寻找这些被标记为可覆盖但尚未被覆盖的数据块,从而实现文件的恢复。 在实际应用中,数据恢复技术已成功帮助无数人找回误删的重要文件。无论是个人用户还是企业,数据恢复技术都发挥着不可替代的作用。通过本文,我们将深入探讨数据恢复技术的原理、方法及其应用案例,带您了解这一神秘而实用的技术。 硬盘


AR眼镜基于上下文智能识别:电力运维高效规范操作应用方案|阿法龙XR云平台
北京阿法龙科技有限公司2025/11/12

传统电力运维依赖人工经验判断设备状态、查阅纸质、移动端手册,存在操作效率低、信息不对称、误操作风险高等痛点。随着AR技术与AI算法的融合升级,AR 眼镜已从被动显示提示向主动智能识别演进。依托AI图像识别、上下文语义理解技术,实现开关、仪表、设备状态的自动识别与精准交互,辅助运维人员规范操作流程、提升巡检效率,降低人为失误导致的安全风险。 AR终端采用轻量化AR眼镜,集成高清摄像头、麦克风,支持双手解放操作。本方案的算法核心包含设备识别模型(训练开关、仪表、互感器等电力设备特征库)、状态解析模


快速定位bug,编写测试用例
程序员小远2025/11/10

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快    作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在团队里你在开发中的地位显而易见 ,口碑、升值、加薪那应该是你遥不可及的梦。 但是作为测试人员来说,尽管你不能深入的去分析问题,但是你能发现系统存在的问题,这点也是值得肯定的,所以继续加油! 所以今天给大家分享的主题是:"怎么快速定位bug" 一、定位问题的重要性 很多测试人员可能会说,我


编写微服务api
CV_J2025/11/8

1.创建实体类模块 2.导入lombok <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> </dependencies> 3.添加实体类 packag


使用CameraX 1.5进行高速拍摄和慢动作视频拍摄
稀有猿诉2025/11/5

本文译自「High-Speed Capture and Slow-Motion Video with CameraX 1.5」,原文链接android-developers.googleblog.com/2025/10/hig…,由Leo Huang发布于2025年10月28日。 清晰捕捉快速运动的画面是现代相机应用的关键特性。这可以通过高速拍摄来实现——即以 120 或 240 fps 等速率采集帧。这种高保真拍摄可用于两种截然不同的用途:创建高帧率视频以进行逐帧的详细分析,或生成慢动作视


MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统
罗西的思考2025/10/31

MPK(Mirage Persistent Kernel)源码笔记(4)--- 转译系统 0x00 概要 0x01 Task和Event 1.1 可执行任务 1.2 事件 0x02 生成CUDA代码 2.1 生成代码 2.2 注册代码 2.3 获取代码 0x03 生成任务图 3.1 入口 3.2 runtime.cc主体 3.3 建立依赖关系 3.4 输出代码 0xFF 参考 0x00 概要 此处的”转译系统“包含两部分: 把计算图转换为任务图。 将 Mir


目标使用过期的TLS1.0 版协议
oneslide2025/10/29

文章目录 目标使用过期的TLS1.0 版协议详细描述解决办法启用测试办法注意事项 目标主机支持RSA密钥交换详细描述解决办法 目标使用过期的TLS1.0 版协议 详细描述 该插件连接到目标主机服务,检测到目标服务加密通信使用的SSL加密算法。 远程服务利用旧版 TLS 加密流量。 解决办法 启用 TLS 1.2 和/或 1.3 支持,禁用 TLS 1.0 支持 nginx样例配置如下: server { list


LabVIEW开发双光子成像
LabVIEW开发2025/10/26

双光子成像技术作为一种先进的光学成像手段,广泛应用于生物医学研究领域,尤其适用于活体细胞与组织的成像研究。LabVIEW软件在双光子成像系统中的应用,涵盖系统设计、数据采集、图像处理及用户界面开发等核心环节。 双光子原理 双光子成像技术基于双光子吸收效应:当两个光子近乎同时被荧光分子吸收时,可激发该分子产生荧光。该技术的核心优势在于能够实现深层组织的高分辨率成像 —— 较长波长的光在生物组织中散射程度更低,从而具备更强的组织穿透能力。 LabVIEW开发 在双光子成像系统中,La

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0