---
title: "使用 obd 部署 ODP - 数据库代理  V4.2.1 | OceanBase 文档中心"
description: 使用 obd 部署 ODP 本文介绍如何使用 obd 部署 ODP，其步骤如下： 检查安装环境 选择合适版本 通过 obd 安装 安装后检查 您也可以通过以下方式部署 ODP： 通过 OCP 安装部署 ODP 请参考 使用 OCP 部署 ODP 。 通过命令行安装部署 ODP 请参考 通过命令行部署 ODP 。 前提…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.2.1

# 使用 obd 部署 ODP

更新时间：2026-07-22 16:51:01

[编辑](https://github.com/oceanbase/oceanbase-proxy-doc/edit/V4.2.1/zh-CN/200.install/50.install-by-obd.md)  

本文介绍如何使用 obd 部署 ODP，其步骤如下：

1. 检查安装环境
 2. 选择合适版本
 3. 通过 obd 安装
 4. 安装后检查

您也可以通过以下方式部署 ODP：

- 通过 OCP 安装部署 ODP 请参考 [使用 OCP 部署 ODP](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000000050273)。
 - 通过命令行安装部署 ODP 请参考 [通过命令行部署 ODP](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000000050270)。

## 前提条件

- 平台：X86_64、ARM
 - 操作系统：Linux Redhat 5u|6u|7u x86-64 及以上
 - CPU：ODP 启动成功后，CPU 占用 0.7 C 左右
 - 内存：ODP 启动成功后，内存占用 100 M 左右
 - 磁盘空间：对磁盘大小没有特别需求，根据数据大小决定，推荐 10G 及以上
 - OceanBase 集群：您需至少准备一个 OceanBase 集群，详细信息请参考 **OceanBase 数据库文档** 中 [部署数据库](https://www.oceanbase.com/docs/common-oceanbase-database-1000000000033157) 章节。
 - （可选）obconfigserver：若您部署了 obconfigserver，可通过配置 obproxy_config_server_url 启动 ODP，此时的 ODP 可代理 obconfigserver 中注册的所有集群。

## 选择合适版本

如果只是学习使用，一般安装最新的版本即可。如果是生产环境，建议关注每个版本的功能迭代和 bugfix 情况。

ODP 的代码已经开源，在 OceanBase 开源项目中找到 OBProxy 项目，点击 [Releases](https://github.com/oceanbase/obproxy/releases) 可以查看每个版本的详细信息。ODP 每个版本都经过了功能测试、压力测试和性能测试，可以放心使用。

## 操作步骤

#### 注意

- 以下内容以 x86 架构的 CentOS Linux 7.9 镜像作为环境，其他环境可能略有不同。
 - 部署 ODP 之前，为了数据安全，建议您切换到非 root 用户。

### 步骤 1：下载安装 obd

按照以下步骤下载并安装 obd。 如您的机器可以访问公网，并能够添加三方 YUM 软件源，您可以运行以下命令，使用 OceanBase 的官方软件源安装 obd：

```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
sudo yum install -y ob-deploy
source /etc/profile.d/obd.sh

```

如果您的机器无法访问公网，可使用其他机器通过官网 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 下载 obd 安装包，之后将该安装包传入您所使用的机器进行安装，具体介绍可参见官网《OceanBase 安装部署工具》文档 [快速上手/安装并配置 obd](https://www.oceanbase.com/docs/community-obd-cn-1000000001188791)。

### 步骤 2：修改配置文件

obd 安装成功后，可在 `/usr/obd/example/` 目录下查看 obd 提供的配置文件，并根据需要选择合适的配置文件。此处以配置文件 `example/obproxy/obproxy-only-example.yaml` 为例：

```yaml
obproxy-ce:
  version: 4.2.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.
    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
    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。 |
| home_path | 必选 | 无 | ODP 安装路径。 |
| obproxy_config_server_url | 可选 | 无 | obconfigserver 的 url，配置后可使用 ODP 代理 obconfigserver 中注册的所有集群。若未部署 obconfigserver，您也可使用 `rs_list` 配置项。 |
| 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 有变动时需要重启 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 中获取该值。 |
| obproxy_sys_password | 可选 | - obd V2.1.0 之前版本默认为空 - obd V2.1.0 及之后版本默认为随机字符串 | ODP 管理员账户（root@proxysys）的密码。使用 obd V2.1.0 及之后版本时，未设置的情况下会自动生成随机字符串，可在部署成功后通过 `obd cluster edit-config` 命令查看配置文件中对应的配置项获取密码。 |
| observer_sys_password | 可选 | 同时部署 OceanBase 数据库时默认与 `proxyro_password` 相同，单独部署时根据 obd 版本不同有如下两种情况：   - obd V2.1.0 之前版本默认为空 - obd V2.1.0 及之后版本默认为随机字符串 | ODP 连接 OceanBase 集群使用的账户名（proxyro@sys）的密码，配置密码需和 OceanBase 数据库中 `proxyro_password` 的值相同。若和 `proxyro_password` 的值不同，部署集群后无法使用 ODP 代理连接 OceanBase 数据库。 |

### 步骤 3：部署 ODP

若您的机器可以访问公网，则直接执行第 4~5 步，若您的机器无法访问公网，则需先通过 [Releases](https://github.com/oceanbase/obproxy/releases) 页面或官网 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 下载 ODP 安装包，之后将该安装包复制到本地镜像库，具体操作如下。

#### 说明

本步骤中提到的 obd 命令的具体介绍可参见官网《OceanBase 安装部署工具》文档 [obd 命令/集群命令组](https://www.oceanbase.com/docs/community-obd-cn-1000000001188787) 一文。

1. 执行如下命令禁用远程镜像仓库：

   ```bash
   obd mirror disable <mirror repo name>

   ```

   其中，参数 `mirror repo name` 为需禁用的镜像仓库名。如果指定为 `remote`，则会禁用所有远程镜像仓库。
 2. 执行如下命令将 ODP 安装包复制到本地镜像库：

   ```bash
   obd mirror clone <path> [-f]

   ```

   其中，参数 `path` 为 RPM 包的路径。选项 `-f` 表示 `--force`，为可选选项，默认不开启。开启时，若镜像已经存在，则强制覆盖已有镜像。
 3. 执行以下命令，查看本地镜像库的 RPM 列表：

   ```bash
   obd mirror list local

   ```
 4. 执行如下命令部署 ODP:

   ```bash
   obd cluster deploy <deploy_name> -c <deploy_config_path>

   ```

   其中，参数 `deploy_name` 为部署集群名称，可以理解为配置文件的别名，`deploy_config_path` 为配置文件路径。

   #### 说明

   在线安装时，执行了 `obd cluster deploy` 命令之后，obd 将检查本地镜像库是否有 ODP 安装包。如果没有安装包，obd 将自动从 yum 源获取。
 5. 执行如下命令启动 ODP：

   ```bash
   obd cluster start <deploy_name>

   ```

### 步骤 4：安装后检查

1. 通过如下命令查看部署情况：

   ```bash
   obd cluster display <deploy_name>

   # 示例
   [admin@test ~]$ obd cluster display obtest
   Get local repositories and plugins ok
   Open ssh connection ok
   Cluster status check ok
   Connect to observer ok
   Wait for observer init ok
   +----------------------------------------------+
   |                 observer                     |
   +------------+---------+------+-------+--------+
   | ip         | version | port | zone  | status |
   +------------+---------+------+-------+--------+
   | 10.10.10.2 | 4.0.0.0 | 2881 | zone1 | ACTIVE |
   | 10.10.10.3 | 4.0.0.0 | 2881 | zone2 | ACTIVE |
   | 10.10.10.4 | 4.0.0.0 | 2881 | zone3 | ACTIVE |
   +------------+---------+------+-------+--------+
   obclient -h10.10.10.2 -P2881 -uroot -p****** -Doceanbase

   Connect to obproxy ok
   +----------------------------------------------+
   |                 obproxy                      |
   +------------+------+-----------------+--------+
   | ip         | port | prometheus_port | status |
   +------------+------+-----------------+--------+
   | 10.10.10.1 | 2883 | 2884            | active |
   +------------+------+-----------------+--------+
   obclient -h10.10.10.1 -P2883 -uroot -p****** -Doceanbase

   ```

   通过该命令可以看到 `obproxy` 信息，其中 port 列为 2883 表示提供 SQL 服务的端口是 2883，也就是 JDBC URL 中需要填写的 PORT。
 2. 通过 `obd cluster display` 命令做过状态检查后，可以使用终端登录到 obproxy 进程所在机器，执行 `ps -ef | grep obproxy` 命令查看进程信息。

   ```bash
   [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` 控制对操作系统版本的检查，检查不通过会导致启动失败，关键日志如下：

```bash
[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 数据库，报错如下：

```bash
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11

```

此时需要根据具体情况选择不同的解决方法：

1. 该用户不存在

   可使用 `root@sys` 用户通过直连的方式进入 OceanBase 数据库，之后在 sys 租户下创建 proxyro 用户。

   ```sql
   create user proxyro identified by '*******';
   grant select on *.* to proxyro;

   ```
 2. 该用户的密码与 ODP 的配置项 `observer_sys_password` 不一致，此时有两种解决方法

      1. 可使用 `root@sys` 用户通过直连的方式进入 OceanBase 数据库后修改 proxyro 用户的密码，使之与启动 ODP 时设置的`observer_sys_password` 参数密码一致。

        ```bash
        ALTER USER proxyro IDENTIFIED BY 'password';

        ```
      2. 使用 `root@proxysys` 账号登录 ODP，修改 `proxyro@sys` 的密码，修改后需要重启。

        ```sql
        alter proxyconfig set observer_sys_password = 'password';

        ```

#### 注意

上述语句中的 `password` 需要填写密码的原始值，而非 sha1 后的值。

  上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
