首批通过分布式安全可靠测评,为关键业务系统打造
使用 obd 部署 ODP
更新时间:2025-10-19 08:12:32
本文介绍如何使用 obd 部署 ODP,其步骤如下:
检查安装环境
选择合适版本
通过 obd 安装
安装后检查
您也可以通过以下方式部署 ODP:
通过 OCP 安装部署 ODP 请参考 使用 OCP 部署 ODP。
通过命令行安装部署 ODP 请参考 通过命令行部署 ODP。
前提条件
CPU:ODP 启动成功后,CPU 占用 0.7 C 左右。
内存:ODP 启动成功后,内存占用 100 M 左右。
磁盘空间:对磁盘大小没有特别需求,根据数据大小决定,推荐 10G 及以上。
OceanBase 集群:您需至少准备一个 OceanBase 集群,详细信息请参考 OceanBase 数据库文档 中 部署数据库 章节。
已安装 obd,建议安装最新版本。具体步骤可参见官网《OceanBase 安装部署工具》文档 快速上手/安装 obd 中 使用 RPM 包安装 部分。
(可选)obconfigserver:若您部署了 obconfigserver,可通过配置
obproxy_config_server_url启动 ODP,此时的 ODP 可代理 obconfigserver 中注册的所有集群。
选择合适版本
如果只是学习使用,一般安装最新的版本即可。如果是生产环境,建议关注每个版本的功能迭代和 bugfix 情况。
ODP 的代码已经开源,在 OceanBase 开源项目中找到 OBProxy 项目,点击 Releases 可以查看每个版本的详细信息。ODP 每个版本都经过了功能测试、压力测试和性能测试,可以放心使用。
操作步骤
注意
以下内容以 x86 架构的 CentOS Linux 7.9 镜像作为环境,并以 obd V3.4.0 为例提供操作指导,不同 obd 版本或不同环境下可能略有不同。
部署 ODP 之前,为了数据安全,建议您切换到非 root 用户,本文以使用 admin 用户为例。
此处以两种方式部署 ODP:
使用
obd cluster component add命令添加 ODP 到已有 OceanBase 集群。该方法部署时,会自动获取已有 OceanBase 集群信息,无需配置
rs_list、observer_sys_password等信息。部署完成后,obd 通过 OceanBase 集群的部署名进行管理。直接使用
obd cluster deploy命令部署 ODP。需手动配置待连接的 OceanBase 集群信息,部署完成后,obd 通过部署时设置的部署名进行管理。
步骤 1:修改配置文件
执行如下命令创建配置文件:
vim add_odp.yaml
内容如下,此处以部署社区版 ODP 为例,若您计划部署企业版,需将配置文件中的 obproxy-ce 修改为 obproxy。
obproxy-ce:
version: 4.3.0.0
servers:
- 10.10.10.1
global:
listen_port: 2883 # External port. The default value is 2883.
prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884.
rpc_listen_port: 2885
enable_obproxy_rpc_service: true
home_path: /home/admin/obproxy
enable_cluster_checkout: false
skip_proxy_sys_private_check: true
enable_strict_kernel_release: false
client_session_id_version: 2 #This parameter is used to specify whether to use the new logic to generate the client session ID. The parameter type is integer. The value range is [1, 2] and the default value is 2 (use the new logic).
proxy_id: 5 #This parameter is used to set the ID for an ODP. The parameter type is integer. The default value is 0 and the value range is [0, 8191].
obproxy_sys_password: ****** # obproxy sys user password, can be empty. When a depends exists, obd gets this value from the oceanbase-ce of the depends.
| 配置项 | 是否必选 | 默认值 | 说明 |
|---|---|---|---|
| version | 可选 | 默认为最新版本 | 待安装组件的版本,使用该配置项可以指定部署的 ODP 的版本;未配置的情况下,obd 默认部署最新版本 ODP。 |
| servers | 必选 | 无 | 每台机器需要用 - name: 机器标识名 (换行)ip: 机器 IP 指定,多个机器就指定多次,机器标识名不能重复。在机器 IP 不重复的情况下,也可以使用 - <ip> (换行)- <ip> 的格式指定,此时 - <ip> 的格式相当于 - name: 机器 IP(换行)ip: 机器 IP。 |
| listen_port | 必选 | 2883 | ODP 监听端口,默认 2883。 |
| prometheus_listen_port | 必选 | 2884 | ODP prometheus 监听端口,默认 2884。 |
| rpc_listen_port | 可选 | 2885 | ODP 中 RPC 服务监听端口,默认为 2885。
说明该配置项自 obd V2.10.0 版本新增,并且在 |
| enable_obproxy_rpc_service | 可选 | true | 控制是否启用 ODP RPC 服务,默认为 true 表示启用 RPC 服务,取值为 false 时表示停止 RPC 服务,此时 rpc_listen_port 配置将不生效。
说明
|
| home_path | 必选 | 无 | ODP 安装路径。 |
| enable_cluster_checkout | 可选 | true | 控制是否需要校验 cluster name,开启后,ODP 会在登陆时发送集群名到 OBServer 节点进行检查。 |
| enable_strict_kernel_release | 必选 | false | 是否需要校验 OS 内核,如果为 true,则 ODP 仅支持 5u/6u/7u 版本的 RedHat。为 false 时不关心 Linux 内核版本的发布,ODP 可能不稳定。 |
| client_session_id_version | 可选 | 2 | 用于设置是否使用新的 Client Session ID 生成逻辑。仅可配置为 1 或 2,配置为 2 时使用新的 Client Session ID 生成逻辑。
说明obd 自 V2.7.0 起支持配置文件中配置 |
| proxy_id | 可选 | 0 | 用于设置标识 ODP 的 ID,以保障不同 ODP 生成的 Client Session ID 不会发生冲突。当存在多个 ODP 服务同一个 OceanBase 集群时,不同 ODP 的 proxy_id 配置项不能配置为相同的值。根据 client_session_id_version 配置项的取值不同,proxy_id 配置项的取值范围有如下两种情况。
说明obd 自 V2.7.0 起支持配置文件中配置 |
| obproxy_sys_password | 可选 | 默认为随机字符串 | ODP 管理员账户(root@proxysys)的密码。使用 obd V2.1.0 及之后版本时,未设置的情况下会自动生成随机字符串,可在部署成功后通过 obd cluster edit-config 命令查看配置文件中对应的配置项获取密码。 |
步骤 2:添加 ODP 到已有 OceanBase 集群
若您的机器可以访问公网,则直接执行第 4 步。若您的机器无法访问公网,或计划部署企业版 ODP,则需先获取 ODP 安装包,之后参照下文第 1~3 步将安装包复制到 obd 本地镜像库。社区版 ODP 通过 Releases 页面或官网 OceanBase 软件下载中心 下载安装包。
说明
本步骤中提到的 obd 命令的具体介绍可参见官网《OceanBase 安装部署工具》文档 obd 命令/集群命令组 一文。
执行如下命令禁用远程镜像仓库:
obd mirror disable remote禁用后可通过
obd mirror list命令进行确认,查看 Type=remote 对应行的Enabled列展示为False,说明已关闭远程镜像源。示例如下:+-----------------------------------------------------------------------------+ | Mirror Repository List | +----------------------------+--------+---------+----------+------------------+ | SectionName | Type | Enabled | Avaiable | Update Time | +----------------------------+--------+---------+----------+------------------+ | local | local | - | True | 2025-02-19 15:56 | | oceanbase.community.stable | remote | False | False | 2025-02-19 15:54 | | oceanbase.development-kit | remote | False | False | 2025-02-19 15:54 | +----------------------------+--------+---------+----------+------------------+执行如下命令将 ODP 安装包复制到本地镜像库:
obd mirror clone <path> [-f]其中,参数
path为 RPM 包的路径。选项-f表示--force,为可选选项,默认不开启。开启时,若镜像已经存在,则强制覆盖已有镜像。执行以下命令,查看本地镜像库的 RPM 列表:
obd mirror list local添加 ODP 到已有 OceanBase 集群
obd cluster component add test -c add_odp.yaml此处以已有的 OceanBase 集群部署名为
test,配置文件名为add_odp.yaml为例,您需根据实际情况设置集群部署名,并指定配置文件的相对路径。可执行obd cluster list查看 obd 管理的集群(Name列)。
步骤 1:修改配置文件
obd 安装成功后,可在 /usr/obd/example/ 目录下查看 obd 提供的配置文件,并根据需要选择合适的配置文件。此处以配置文件 example/obproxy/obproxy-only-example.yaml 为例进行介绍。
修改用户信息
## Only need to configure when remote login is required user: username: admin # password: your password if need key_file: /home/admin/.ssh/id_rsa # port: your ssh port, default 22 # timeout: ssh connection timeout (second), default 30username为登录到目标机器(安装 OceanBase 集群的机器)的用户名,确保您的用户名有下文home_path的写权限。password和key_file均用于验证用户,通常情况下只需要填写一个。注意
在配置秘钥路径后,如果您的秘钥不需要口令,请注释或者删除
password,以免password被视为秘钥口令用于登录,导致校验失败。修改 ODP 配置
obd 支持部署社区版和企业版 ODP,此处以部署社区版 ODP 为例,若您计划部署企业版,需将配置文件中的
obproxy-ce修改为obproxy。obproxy-ce: version: 4.3.0.0 servers: - 10.10.10.1 global: listen_port: 2883 # External port. The default value is 2883. prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884. rpc_listen_port: 2885 enable_obproxy_rpc_service: true home_path: /home/admin/obproxy obproxy_config_server_url: http://10.10.10.1:8080/services?Action=GetObProxyConfig # rs_list: 10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881 enable_cluster_checkout: false skip_proxy_sys_private_check: true enable_strict_kernel_release: false cluster_name: obcluster client_session_id_version: 2 #This parameter is used to specify whether to use the new logic to generate the client session ID. The parameter type is integer. The value range is [1, 2] and the default value is 2 (use the new logic). proxy_id: 5 #This parameter is used to set the ID for an ODP. The parameter type is integer. The default value is 0 and the value range is [0, 8191]. obproxy_sys_password: ****** # obproxy sys user password, can be empty. When a depends exists, obd gets this value from the oceanbase-ce of the depends. observer_sys_password: ****** # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty. When a depends exists, obd gets this value配置项 是否必选 默认值 说明 version 可选 默认为最新版本 待安装组件的版本,使用该配置项可以指定部署的 ODP 的版本;未配置的情况下,obd 默认部署最新版本 ODP。 servers 必选 无 每台机器需要用 - name: 机器标识名 (换行)ip: 机器 IP指定,多个机器就指定多次,机器标识名不能重复。
在机器 IP 不重复的情况下,也可以使用- <ip> (换行)- <ip>的格式指定,此时- <ip>的格式相当于- name: 机器 IP(换行)ip: 机器 IP。listen_port 必选 2883 ODP 监听端口,默认 2883。 prometheus_listen_port 必选 2884 ODP prometheus 监听端口,默认 2884。 rpc_listen_port 可选 2885 ODP 中 RPC 服务监听端口,默认为 2885。 说明
该配置项自 obd V2.10.0 版本新增,并且在
enable_obproxy_rpc_service取值为true时生效。enable_obproxy_rpc_service 可选 true 控制是否启用 ODP RPC 服务,默认为 true表示启用 RPC 服务,取值为false时表示停止 RPC 服务,此时rpc_listen_port配置将不生效。说明
该配置项自 obd V2.10.0 版本新增。
- 若未配置该配置项,升级 ODP 后该配置项默认值将被置为
false。
home_path 必选 无 ODP 安装路径。 obproxy_config_server_url 可选 无 obconfigserver 的 url,配置后可使用 ODP 代理 obconfigserver 中注册的所有集群。若未部署 obconfigserver,您也可使用 rs_list配置项。注意
rs_list和obproxy_config_server_url配置项只需配置一个即可,若您选择配置rs_list配置项,则无需配置obproxy_config_server_url配置项。rs_list 可选 无 OceanBase 集群的 OBServer 节点列表,格式为 ip:mysql_port;ip:mysql_port,使用 rs_list 配置部署的情况下您只可代理所配置的这一个集群。注意
rs_list和obproxy_config_server_url配置项只需配置一个即可,若您选择配置rs_list配置项,则无需配置obproxy_config_server_url配置项。- 若通过配置
rs_list启动 ODP,当 OceanBase 数据库中 Root Service 列表有变动时,需手动更新rs_list配置项,并重启 ODP 使变动生效。
enable_cluster_checkout 可选 true 控制是否需要校验 cluster name,开启后,ODP 会在登陆时发送集群名到 OBServer 节点进行检查。 enable_strict_kernel_release 必选 false 是否需要校验 OS 内核,如果为 true,则 ODP 仅支持 5u/6u/7u 版本的 RedHat。为 false 时不关心 Linux 内核版本的发布,ODP 可能不稳定。 cluster_name 可选 无 表示 ODP 可以代理的 OceanBase 集群的名字,当存在依赖项时,obd 将会从依赖项 oceanbase-ce 中获取该值。 client_session_id_version 可选 2 用于设置是否使用新的 Client Session ID 生成逻辑。仅可配置为 1或2,配置为2时使用新的 Client Session ID 生成逻辑。说明
obd 自 V2.7.0 起支持配置文件中配置
client_session_id_version配置项。proxy_id 可选 0 用于设置标识 ODP 的 ID,以保障不同 ODP 生成的 Client Session ID 不会发生冲突。当存在多个 ODP 服务同一个 OceanBase 集群时,不同 ODP 的 proxy_id配置项不能配置为相同的值。根据client_session_id_version配置项的取值不同,proxy_id配置项的取值范围有如下两种情况。- 配置项
client_session_id_version的值配置为1时,配置项proxy_id的取值范围为 [0,255]。 - 配置项
client_session_id_version的值配置为2时,配置项proxy_id的取值范围为 [0,8191]。
说明
obd 自 V2.7.0 起支持配置文件中配置
proxy_id配置项。obproxy_sys_password 可选 默认为随机字符串 ODP 管理员账户(root@proxysys)的密码。使用 obd V2.1.0 及之后版本时,未设置的情况下会自动生成随机字符串,可在部署成功后通过 obd cluster edit-config命令查看配置文件中对应的配置项获取密码。observer_sys_password 可选 同时部署 OceanBase 数据库时默认与 proxyro_password相同,单独部署时默认为随机字符串ODP 连接 OceanBase 集群使用的账户名(proxyro@sys)的密码,配置密码需和 OceanBase 数据库中 proxyro_password的值相同。若和proxyro_password的值不同,部署集群后无法使用 ODP 代理连接 OceanBase 数据库。
步骤 2:部署 ODP
若您的机器可以访问公网,则直接执行第 4~5 步。若您的机器无法访问公网,或计划部署企业版 ODP,则需先获取 ODP 安装包,之后参照下文第 1~3 步将安装包复制到 obd 本地镜像库。社区版 ODP 通过 Releases 页面或官网 OceanBase 软件下载中心 下载安装包。
说明
本步骤中提到的 obd 命令的具体介绍可参见官网《OceanBase 安装部署工具》文档 obd 命令/集群命令组 一文。
执行如下命令禁用远程镜像仓库:
obd mirror disable remote禁用后可通过
obd mirror list命令进行确认,查看 Type=remote 对应行的Enabled列展示为False,说明已关闭远程镜像源。示例如下:+-----------------------------------------------------------------------------+ | Mirror Repository List | +----------------------------+--------+---------+----------+------------------+ | SectionName | Type | Enabled | Avaiable | Update Time | +----------------------------+--------+---------+----------+------------------+ | local | local | - | True | 2025-02-19 15:56 | | oceanbase.community.stable | remote | False | False | 2025-02-19 15:54 | | oceanbase.development-kit | remote | False | False | 2025-02-19 15:54 | +----------------------------+--------+---------+----------+------------------+执行如下命令将 ODP 安装包复制到本地镜像库:
obd mirror clone <path> [-f]其中,参数
path为 RPM 包的路径。选项-f表示--force,为可选选项,默认不开启。开启时,若镜像已经存在,则强制覆盖已有镜像。执行以下命令,查看本地镜像库的 RPM 列表:
obd mirror list local执行如下命令部署 ODP:
obd cluster deploy test -c obproxy-only-example.yaml此处以使用
obproxy-only-example.yaml配置文件部署名为test的集群为例,您需根据实际情况设置集群部署名,并指定配置文件的相对路径。说明
在线安装时,执行了
obd cluster deploy命令之后,obd 将检查本地镜像库是否有 ODP 安装包。如果没有安装包,obd 将自动从 yum 源获取。执行如下命令启动 ODP:
obd cluster start test
安装后检查
通过如下命令查看部署情况。
obd cluster display test添加 ODP 到已有 OceanBase 集群场景下的输出示例如下,若 ODP 是直接部署的,输出中将不存在 oceanbase-ce 信息。
Get local repositories and plugins ok Open ssh connection ok Cluster status check ok Connect to observer ok Wait for observer init ok +----------------------------------------------+ | oceanbase-ce | +------------+---------+------+-------+--------+ | ip | version | port | zone | status | +------------+---------+------+-------+--------+ | 10.10.10.2 | 4.3.0.0 | 2881 | zone1 | ACTIVE | | 10.10.10.3 | 4.3.0.0 | 2881 | zone2 | ACTIVE | | 10.10.10.4 | 4.3.0.0 | 2881 | zone3 | ACTIVE | +------------+---------+------+-------+--------+ obclient -h10.10.10.2 -P2881 -uroot@sys -p****** -Doceanbase -A Connect to obproxy ok +-------------------------------------------------------------------+ | obproxy-ce | +---------------+------+-----------------+-----------------+--------+ | ip | port | prometheus_port | rpc_listen_port | status | +---------------+------+-----------------+-----------------+--------+ | 10.10.10.1 | 2883 | 2884 | 2885 | active | +---------------+------+-----------------+-----------------+--------+ obclient -h10.10.10.1 -P2883 -uroot@proxysys -p'********' -Doceanbase -A通过该命令可以看到
obproxy-ce信息,其中port列为2883表示提供 SQL 服务的端口是2883,也就是 JDBC URL 中需要填写的 PORT。通过
obd cluster display命令做过状态检查后,可以使用终端登录到 obproxy 进程所在机器,执行ps -ef | grep obproxy命令查看进程信息。[admin@test ~]# ps -ef | grep obproxy | grep -v grep admin 6868 1 0 Nov12 ? 00:02:09 bash /home/admin/obproxy/obproxyd.sh /home/admin/obproxy 10.10.10.1 2883 daemon admin 6901 1 0 Nov12 ? 00:44:11 /home/admin/obproxy/bin/obproxy --listen_port 2883从上述示例中可以看到两个进程:
obproxyd.sh进程和obproxy进程。其中,obproxy就是 ODP 的进程名,obproxyd.sh是 ODP 的守护脚本,负责启动obproxy,对obproxy做健康检查,如果obproxy进程不存在,obproxyd.sh会主动拉起进程。
部署常见问题
启动失败
对于 Linux 系统,ODP 通过配置项 enable_strict_kernel_release 控制对操作系统版本的检查,检查不通过会导致启动失败,关键日志如下:
[2021-10-13 10:38:17.235062] WARN [PROXY] get_kernel_release_by_uname (ob_config_server_processor.cpp:1039) [2060][Y0-0] [lt=14] [dc=0] unknown uname release(uinfo.release="4.18.0-80.el8.x86_64", ret=-4016)
您可使用 uname 命令查看内核信息,该选项目前只允许 el 系列和 alios 系列通过,检查策略偏保守型,可能会产生一些误报。其它 linux 系统如果遇到上面问题,可以通过关闭该配置项予以解决。
无法连接 OceanBase 数据库
ODP 通过 proxyro 用户和 OceanBase 数据库建立连接。当该用户不存在或该用户的密码与 ODP 的配置项 observer_sys_password 不一致时,将导致无法连接 OceanBase 数据库,报错如下:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11
此时需要根据具体情况选择不同的解决方法:
该用户不存在
可使用
root@sys用户通过直连的方式进入 OceanBase 数据库,之后在 sys 租户下创建 proxyro 用户。create user proxyro identified by '*******'; grant select on *.* to proxyro;该用户的密码与 ODP 的配置项
observer_sys_password不一致,此时有两种解决方法可使用
root@sys用户通过直连的方式进入 OceanBase 数据库后修改 proxyro 用户的密码,使之与启动 ODP 时设置的observer_sys_password参数密码一致。ALTER USER proxyro IDENTIFIED BY 'password';使用
root@proxysys账号登录 ODP,修改proxyro@sys的密码,修改后需要重启。alter proxyconfig set observer_sys_password = 'password';
注意
上述语句中的 password 需要填写密码的原始值,而非 sha1 后的值。