首批通过分布式安全可靠测评,为关键业务系统打造
通过命令行部署 ODP
更新时间:2026-01-05 17:05:14
ODP 可以将用户发起的数据访问请求转发到正确的 OBServer 节点上,转发到后端 OBServer 节点的请求返回数据时,依然要通过 ODP 回发给客户端。本节主要介绍通过使用 RPM 包安装 ODP。
您也可以通过如下两种方法部署 ODP:
使用 OCP 安装部署 ODP,详细操作请参见 使用 OCP 部署 ODP。
使用 obd 安装部署 ODP,详细操作请参见 使用 obd 部署 ODP
注意
ODP 在任何一台机器上部署后,通过向外暴露一个
ip:port来提供 OceanBase 的代理服务。用户可以像访问 MySQL 数据库一样通过该ip:port访问 OceanBase 数据库,一般推荐部署在 OBServer 节点上。建议一台机器上只部署一个 ODP 服务,并且使用约定的 2883 端口。当同一台机器上部署多个 ODP 服务时,需要指定不同端口和不同的配置文件路径予以区分,端口可以自定义为 3306 或 1521、或者其他端口。
本文中的示例 IP 均做了脱敏处理,在使用对应命令时应根据自己机器真实 IP 填写。
环境准备
平台:X86_64、ARM
操作系统:Linux Redhat 5u|6u|7u x86-64 及以上
CPU:ODP 启动成功后,CPU 占用 0.7 C 左右
内存:ODP 启动成功后,内存占用 100M 左右
磁盘空间:对磁盘大小没有特别需求,根据数据大小决定,推荐 10G 及以上
OceanBase 集群:详细信息请参考 OceanBase 数据库文档 中 部署数据库 章节。
安装 ODP
在 root 用户下执行如下命令添加 sudoers 文件的写权限
# 添加 sudoers 文件的写权限 chmod u+w /etc/sudoers echo 'admin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers # 撤销 sudoers 文件写权限 chmod u-w /etc/sudoers执行如下命令安装 ODP 的 RPM 包:
-bash-4.2$ cd $rpm_dir -bash-4.2$ sudo rpm -ivh $rpm_name其中
$rpm_dir表示存放 RPM 包的目录,$rpm_name表示 RPM 包的名称。说明
您可联系技术人员获取最新的 ODP RPM 包,也可在 OceanBase 软件下载中心 页面搜索 OceanBase 数据库代理,根据实际情况下载对应的 ODP RPM 包。
ODP 企业版默认安装目录在
/opt/taobao/install下,社区版默认安装目录在/home/admin下。
示例如下:
-bash-4.2$ sudo rpm -ivh obproxy-4.0.0-20221103165243.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:obproxy-4.0.0-20221103165243.el7 ################################# [100%](可选)创建到 ODP 的软链接
创建到 ODP 的软链接可以隐藏掉版本信息,方便后期操作。此处以企业版 ODP 为例介绍创建软链接操作。
-bash-4.2$ cd /opt/taobao/install -bash-4.2$ sudo ln -s obproxy-4.0.0 obproxy -bash-4.2$ ll total 8 drwxr-xr-x 9 root root 4096 Sep 26 15:24 ajdk-8.3.6-b129 lrwxrwxrwx 1 root root 13 Nov 14 12:03 obproxy -> obproxy-4.0.0 drwxr-xr-x 4 admin admin 4096 Nov 14 11:59 obproxy-4.0.0 # 把 obproxy 的所有者和所属组都改为 admin。 -bash-4.2$ sudo chown -R admin:admin obproxy -bash-4.2$ ll total 8 drwxr-xr-x 9 root root 4096 Sep 26 15:24 ajdk-8.3.6-b129 lrwxrwxrwx 1 admin admin 13 Nov 14 12:03 obproxy -> obproxy-4.0.0 drwxr-xr-x 4 admin admin 4096 Nov 14 11:59 obproxy-4.0.0
初始化 ODP
ODP 需要跟后端 OBServer 节点保持通信,所以需要提前在 OceanBase 集群的 sys 租户下为 ODP 创建连接用户(proxyro)和密码。后续在启动 ODP 时可通过设置 proxy 启动参数的方式来告知 proxy。
说明
proxyro 用户是 ODP 访问 OceanBase 集群的用户。一个 OceanBase 集群对应一个 proxyro 账号。
您可参考如下步骤查看集群中是否存在 proxyro 用户:
通过 IP 直连的方式登录到集群。
obclient -h10.10.10.1 -uroot@sys -P2881 -p -c -A执行以下命令查看 sys 租户下的用户。
obclient> select user,password from mysql.user;若输出结果显示已有 proxyro 用户,可直接执行 启动 ODP。若输出结果中无 proxyro 用户,可参考下述命令创建 proxyro 用户。
创建 proxyro 用户。
示例如下:
obclient> CREATE USER proxyro IDENTIFIED BY '******'; Query OK, 0 rows affected obclient> GRANT SELECT ON *.* TO proxyro; Query OK, 0 rows affected obclient> SHOW GRANTS FOR proxyro; +----------------------------------+ | Grants for proxyro@% | +----------------------------------+ | GRANT SELECT ON *.* TO 'proxyro' | +----------------------------------+ 1 row in set
启动 ODP
支持通过以下两种方式来启动 ODP 进程:
在启动命令中指定
-r参数来指定 OceanBase 集群的 RootServer 信息该启动方式不需要额外配置,一般用于开发调试阶段。通过该方法启动 ODP 后,当 OceanBase 数据库中 Root Service 列表有变动时,需手动更新
rootservice_list配置项,并重启 ODP 使配置生效。在启动命令中指定
obproxy_config_server_url参数项来查询获取 OceanBase 集群的 RootServer 信息该方式需要配置
obproxy_config_server_url,故会依赖 Config Server 的启动。推荐使用该方式启动 ODP。
注意
启动 ODP 时,请使用 admin 用户登录并在 ODP 软件的 home 目录下执行启动命令。使用其他用户或者在其他目录下启动 ODP 都可能带来问题。
操作步骤
使用 admin 用户登录到待启动的 ODP 所在的机器。
在 ODP 的安装目录下执行如下命令,启动 ODP。
说明
在启动 ODP 前,如果需要了解 ODP 的启动参数有哪些,可以通过
./bin/obproxy -h命令查看。方法一:在启动命令中指定
-r参数,命令如下./bin/obproxy -p <obproxy_port> -s <rpc_port> -r <'ip:port'> -n <appname> -o -c <cluster_name>其中:
-p:指定 ODP 监听的端口号,客户端通过 MySQL 连接该端口访问 OceanBase 数据库。仅在第一次启动时需要指定该参数,后续续日常启动或升级等均不需要添加此参数。-s:指定 RPC 服务监听端口。-r:指定的 OceanBase 集群的 RootServer 信息,包括 IP 地址和端口号信息。该 Port 指的是 OBServer 节点的 SQL Port,不是 RPC Port。-n(可选):用于指定待启动的 ODP 的应用名。ODP 的应用名可以通过
app_name配置项来修改,默认为undefined。-o:指定硬件或者内核参数配置。如果不指定,则使用系统默认配置。-c:指定 OceanBase 集群。
示例:
[admin@001 obproxy]$ ./bin/obproxy -p 2883 -s 2885 -r'10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881' -o observer_sys_password=$sha1_value,obproxy_sys_password=$sha1_value,enable_cluster_checkout=false,proxy_id=1,client_session_id_version=2 -n test -c mycluster注意
observer_sys_password需和 OceanBase 数据库中的 proxyro 用户密码一致,obproxy_sys_password是使用root@proxysys账号登录 ODP 的密码。$sha1_value应根据实际设置密码替换。此处设置的密码是 sha1 后的值,而不是原始值。例如:proxyro 用户设置的密码是123456,则需要设置observer_sys_password的值是7c4a8d09ca3762af61e59520943dc26494f8941b。proxy_id配置为 1 仅为示例,您可将proxy_id配置为 0~8191 范围中除 2 以外的任意值,不与其他 ODP 重复即可。详细介绍可参见 proxy_id。
方法二:在启动命令中指定
obproxy_config_server_url参数,命令如下./bin/obproxy -p <obproxy_port> -s <rpc_port> -n <appname> -o obproxy_config_server_url='your_config_url'其中:
-p:指定 ODP 监听的端口号,客户端通过 MySQL 连接该端口访问 OceanBase 数据库。仅在第一次启动时需要指定该参数,后续续日常启动或升级等均不需要添加此参数。-s:指定 RPC 服务监听端口。-n:指定应用名。ODP 的应用名可以通过
app_name配置项来修改,默认为undefined。-o:指定硬件或者内核参数配置。如果不指定,则使用系统默认配置。obproxy_config_server_url:指定 Config Server 的访问地址。
示例:
[admin@001 obproxy]$ ./bin/obproxy -p 2883 -s 2885 -n test -o obproxy_config_server_url='http://xx.xx.xx.xx:8877/obproxy_config',observer_sys_password=$sha1_value,obproxy_sys_password=$sha1_value,proxy_id=1,client_session_id_version=2注意
observer_sys_password需和 OceanBase 数据库中的 proxyro 用户密码一致,obproxy_sys_password是使用root@proxysys账号登录 ODP 的密码。$sha1_value应根据实际设置密码替换。此处设置的密码是 sha1 后的值,而不是原始值。例如:proxyro 用户设置的密码是123456,则需要设置observer_sys_password的值是7c4a8d09ca3762af61e59520943dc26494f8941b。proxy_id配置为 1 仅为示例,您可将proxy_id配置为 0~8191 范围中除 2 以外的任意值,不与其他 ODP 重复即可。详细介绍可参见 proxy_id。
启动后,执行以下命令,查看 ODP 进程是否存在。
[admin@001 ~]$ ps -ef | grep obproxy
OceanBase 数据库连接示例
通过 ODP 连接时,用户名的格式需要包含集群名、实例名和用户名。格式有如下四种,常用格式为前两种。
用户名@租户名#集群名集群名:租户名:用户名集群名-租户名-用户名集群名.租户名.用户名
$ obclient -h10.10.10.1 -uroot@sys#mycluster -P2883 -p -c -A
Enter password:
# 或
$ obclient -h10.10.10.1 -umycluster:sys:root -P2883 -p -c -A
Enter password:
常见问题
问题描述:使用 ODP 连接 OceanBase 数据库报错如下。
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 0
产生原因:ODP 中 observer_sys_password 设置的密码和 OceanBase 数据库中 proxyro 用户的密码不一致,ODP 无法通过该用户与 OBServer 节点保持通信。
解决方法:您可根据实际情况选择如下两种解决方法。
通过直连的方式连接 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 后的值。