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

简介: ODP(OceanBase Database Proxy)是OceanBase数据库专用的连接路由组件,负责将客户端SQL请求智能路由至最佳OBServer节点,具备高性能转发、高可用、易运维等特性,支持读写分离与多副本负载均衡,是分布式数据库访问的核心代理服务。

b406.png

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


一、 ODP简介


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


作为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数据库的数据链路如下图所示。

image.png


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


部署好ODP集群后,便可以通过OBProxy连接OceanBase数据库集群了,下面是具体的操作步骤。

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

obd cluster display myob-cluster
# 输出的信息如下:
......
Connect to obproxy ok
+-------------------------------------------------------------------+
|                             obproxy-ce                            |
+---------------+------+-----------------+-----------------+--------+
| ip            | port | prometheus_port | rpc_listen_port | status |
+---------------+------+-----------------+-----------------+--------+
| 192.168.79.11 | 2883 | 2884            | 2885            | active |
| 192.168.79.13 | 2883 | 2884            | 2885            | active |
+---------------+------+-----------------+-----------------+--------+
obclient -h192.168.79.11 -P2883 -uroot@proxysys -p'Welcome_1' -Doceanbase -A 
......
# 提示:从输出的信息可以看出,ODP集群中包含两台OBProxy,
# 它们分别运行在:192.168.79.11和192.168.79.13主机上。

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

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

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

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

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

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

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

obd cluster edit-config myob-cluster

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

global:
    ......
    root_password: Welcome_1
    appname: myob-cluster
    ocp_agent_monitor_password: ztkrtULS7u
    proxyro_password: YqNSd87E3K
    ......
  
  修改为:
  
  global:
    ......
    root_password: Welcome_1
    appname: myob-cluster
    ocp_agent_monitor_password: ztkrtULS7u
    proxyro_password: Welcome_1
    ......

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

obd cluster reload myob-cluster

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

obclient -h192.168.79.11 -P2883 -uroot@sys#myob-cluster -pWelcome_1 -Doceanbase -A
ob> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| LBACSYS            |
| mysql              |
| oceanbase          |
| ocs                |
| ORAAUDITOR         |
| scott              |
| SYS                |
| sys_external_tbs   |
| test               |
+--------------------+
10 rows in set (0.011 sec)


三、 查看ODP配置属性


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

(1)执行命令登录OceanBase数据库或者ODP。

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

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

ob> show proxyconfig \G;
# 输出的信息如下:
......
*************************** 326. row ***************************
         name: json_config_cluster_count
        value: 1
         info: ob cluster count, meta db cluster not included
  need_reboot: false
visible_level: virtual
        range: NULL
 config_level: NULL
*************************** 327. row ***************************
         name: json_config_modified_time
        value: 2025-04-15 14:12:20.271644
         info: json config modified time
  need_reboot: false
visible_level: virtual
        range: NULL
 config_level: NULL
327 rows in set (0.012 sec)

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

ob> show proxyconfig like '%full%'\G;
# 输出的信息如下:
*************************** 1. row ***************************
         name: enable_full_username
        value: False
        info: used for non-cloud user, if set true, username must have tenant and cluster
  need_reboot: false
visible_level: SYS
        range: 
 config_level: LEVEL_GLOBAL
*************************** 2. row ***************************
         name: enable_cloud_full_username
        value: False
         info: used for cloud user, if set false, treat all login user as username
  need_reboot: false
visible_level: SYS
        range: 
 config_level: LEVEL_VIP
*************************** 3. row ***************************
         name: enable_full_link_trace
        value: False
         info: if enable proxy will use full link trace to trace query execution
  need_reboot: false
visible_level: USER
        range: 
 config_level: LEVEL_GLOBAL
3 rows in set (0.009 sec)

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

ob> select * from proxy_config;
# 输出信息如下:
+---------------------------------+-----------------+--------------+
......                                              
| server_state_refresh_interval   | 20s             | LEVEL_GLOBAL |
| cache_cleaner_clean_interval    | 20s             | LEVEL_GLOBAL |
| proxy_hot_upgrade_check_interval| 5s              | LEVEL_GLOBAL |
| proxy_info_check_interval       | 60s             | LEVEL_GLOBAL |
| refresh_config                  | False           | LEVEL_GLOBAL |
| refresh_idc_list                | False           | LEVEL_GLOBAL |
| refresh_rslist                  | False           | LEVEL_GLOBAL |
| refresh_json_config             | False           | LEVEL_GLOBAL |
| enable_xa_route                 | True            | LEVEL_GLOBAL |
| observer_sys_password           | d809d427528be882| LEVEL_GLOBAL |
+---------------------------------+-----------------+--------------+
319 rows in set (0.056 sec)
# 提示:该命令仅在使用root@proxysys用户登录ODP时可执行,其他用户下执行会报错。


四、 修改ODP配置属性


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

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


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


方式一:通过alter proxyconfig命令


(1)登录ODP。

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

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

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

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

ob> alter proxyconfig set enable_cluster_checkout=True;

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

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


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


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

obd cluster display myob-cluster
# 输出的信息如下:
......
Connect to obproxy ok
+-------------------------------------------------------------------+
|                             obproxy-ce                            |
+---------------+------+-----------------+-----------------+--------+
| ip            | port | prometheus_port | rpc_listen_port | status |
+---------------+------+-----------------+-----------------+--------+
| 192.168.79.11 | 2883 | 2884            | 2885            | active |
| 192.168.79.13 | 2883 | 2884            | 2885            | active |
+---------------+------+-----------------+-----------------+--------+
obclient -h192.168.79.11 -P2883 -uroot@proxysys -p'Welcome_1' -Doceanbase -A 
......

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

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

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

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

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

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


相关文章
|
3月前
|
NoSQL 测试技术 Redis
【赵渝强老师】Redis数据的迁移
Redis提供move、dump+restore和migrate三种方式实现数据迁移。move用于库内迁移,dump+restore跨实例传输,migrate则原子性地完成键的迁移与删除,支持多键批量操作,提升效率。
209 5
|
5月前
|
存储 Linux C语言
【零基础友好】Linux 初学者指令指南:常用指令 + 实操案例,一步一步教你用(收藏级)
本教程系统讲解Linux操作系统基础操作与常用指令,涵盖账号管理、路径操作、文件处理、目录管理、文本查看、时间设置、文件搜索、压缩解压等内容,适合初学者快速掌握Linux命令行核心技能。
【零基础友好】Linux 初学者指令指南:常用指令 + 实操案例,一步一步教你用(收藏级)
|
4月前
|
人工智能 API 开发工具
AskTable:可嵌入任何系统的 AI 数据智能体引擎
AskTable 是一款以 Table 为核心的数据 AI 基础设施。它通过标准化 API、SDK、iFrame 与智能体协议(MCP),让 AI 能直接理解、查询和分析表格数据,轻松嵌入企业现有系统。 AskTable 提供从数据接入、语义分析到可视化生成的完整能力,可无缝集成至网页、移动端、钉钉、企业微信或 Dify/HiAgent 等智能体平台。
617 157
|
4月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
7月前
|
数据库 数据中心 OceanBase
【赵渝强老师】OceanBase租户的资源管理
OceanBase数据库支持多租户架构,通过资源配置(Unit Config)、资源单元(Unit)和资源池(Resource Pool)实现资源隔离与管理。用户可灵活定义资源规格,分配CPU、内存等资源,并通过资源池管理租户资源分配,提升系统资源利用率和管理效率。
214 0
|
8月前
|
Oracle 关系型数据库 MySQL
【赵渝强老师】OceanBase中的租户
OceanBase数据库采用多租户架构,支持云数据库部署。租户是资源分配单位,分为系统租户、用户租户和Meta租户。系统租户管理集群生命周期,用户租户提供完整数据库功能(支持MySQL和Oracle模式),Meta租户存储用户租户的私有数据。多租户架构降低运维复杂度,支持多种部署形式,确保数据隔离与安全。
534 0
|
9月前
|
Arthas 监控 Java
Arthas getstatic(查看类的静态属性 )
Arthas getstatic(查看类的静态属性 )
258 7
|
6月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
12月前
|
SQL 人工智能 数据可视化
数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式
数据项目复杂,涉及代码、数据、运行环境等多部分。随着AI发展,数据科学团队面临挑战。协作式数据文档(如阿里云DataV Note)成为提升效率的关键工具。它支持跨角色协同、异构数据处理、多语言分析及高效沟通,帮助创建知识库,实现可重现的数据科学过程,并通过一键分享报告促进数据驱动决策。未来,大模型AI将进一步增强其功能,如智能绘图、总结探索、NLP2SQL/Python和AutoReport,为数据分析带来更多可能。
704 142