---
title: "通过命令行部署 OBProxy | OceanBase 文档中心"
description: 通过命令行部署 OBProxy OBProxy 可以将用户发起的数据访问请求转发到正确的 OBServer 上，转发到后端 OBServer 的请求返回数据时，依然要通过 OBProxy 回发给客户端。本节主要介绍通过使用 RPM 包安装 OBProxy。 注意 OBProxy 在任何一个机器上部署后，通过向外暴露一…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 通过命令行部署 OBProxy

更新时间：2024-02-19 10:26:26

OBProxy 可以将用户发起的数据访问请求转发到正确的 OBServer 上，转发到后端 OBServer 的请求返回数据时，依然要通过 OBProxy 回发给客户端。本节主要介绍通过使用 RPM 包安装 OBProxy。

> **注意**
>
>  
>
> - OBProxy 在任何一个机器上部署后，通过向外暴露一个 ip:port 来提供 OceanBase 的代理服务。用户可以像访问 MySQL 数据库一样通过该 ip:port 即可访问 OceanBase 数据库，一般推荐部署在 OBServer 节点上。
>  - 建议一台机器上只部署一个 OBProxy 服务，并且使用约定的 2883 端口。当同一台机器上部署多个OBProxy 服务时，需要指定不同端口和不同的配置文件路径予以区分，端口可以自定义为 3306 或 1521、或者其他端口。

## 安装 OBProxy

1. 安装 OBProxy RPM 包。

   其中 `$rpm_dir` 表示存放 RPM 包的目录，`$rpm_name` 表示 RPM 包的名称。

   ```shell
   [root@xxx /]# cd $rpm_dir
   [root@xxx $rpm_dir]# sudo rpm -ivh $rpm_name

   ```

   #### 说明

   OBProxy 软件会默认安装在目录 `/opt/taobao/install` 下。如果需要指定其他目录，可以通过设置 `--prefix` 参数来指定，例如安装在 `/home/admin` 目录下：`rpm -ivh --prefix=/home/admin $rpm_name`。

   示例如下：

   ```shell
   [root@xxx admin]# sudo rpm -ivh obproxy-3.2.3-20220310201314.el7.x86_64.rpm
   Preparing...                          ################################# [100%]
   Updating / installing...
      1:obproxy-3.2.3-20220310201314.el7 ################################# [100%]

   ```
 2. （可选）创建到 obproxy 的软链接。

   > **说明**
   >
   >  
   >
   > 创建到 obproxy 的软链接可以隐藏掉版本信息，方便后期操作。

   obproxy 安装目录在 /opt/taobao/install 下。obproxy 进程 home 目录是 `/opt/taobao/install/obproxy`，这是一个软链接，实际指向相应的 obproxy 版本软件目录。

   ```shell
   [root@xxx admin]# su - admin
   -bash-4.2$ cd /opt/taobao/install
   -bash-4.2$ sudo ln -s obproxy-3.2.3 obproxy
   -bash-4.2$ ll
   total 8
   drwxr-xr-x 9 root  root  4096 Mar 22 10:24 ajdk-8.3.6-b129
   lrwxrwxrwx 1 root  root    13 Apr 28 10:25 obproxy -> obproxy-3.2.3
   drwxr-xr-x 4 admin admin 4096 Apr 27 17:56 obproxy-3.2.3

   --把 obproxy 的所有者和所属组都改为 admin。
   [root@xxx install]# chown -R admin:admin obproxy
   [root@xxx install]# ll
   total 8
   drwxr-xr-x 9 root  root   4096 Mar 22 10:24 ajdk-8.3.6-b129
   lrwxrwxrwx 1 admin admin    13 Apr 28 10:25 obproxy -> obproxy-3.2.3
   drwxr-xr-x 4 admin admin  4096 Apr 27 17:56 obproxy-3.2.3

   ```
 3. 建立 obproxy 进程运行日志目录。

   obproxy 进程的运行日志目录通过软链接指向 `/home/admin/logs/obproxy/log`。

   ```shell
   [root@xxx admin]# su - admin
   -bash-4.2$ mkdir -p /home/admin/logs/obproxy/log
   -bash-4.2$ for t in {log};do ln -s /opt/taobao/install/obproxy/$t /home/admin/logs/obproxy/log/$t; done
   -bash-4.2$ tree /opt/taobao/install/obproxy
   /opt/taobao/install/obproxy
   |-- bin
   |   |-- obp_xflush.py
   |   |-- obproxy
   |   |-- obproxyd.sh
   |   `-- unzip.py
   |-- log -> /home/admin/logs/obproxy/log
   |-- minidump -> /home/admin/logs/obproxy/minidump
   |-- start_obproxy.sh
   `-- tools
       |-- dump_syms
       |-- log4cplus.conf
       |-- minidump.sh
       |-- minidump_stackwalk
       `-- obproxy.sym

   3 directories, 11 files

   ```

## 初始化 OBProxy

### 初始化 OBProxy 账户

OBProxy 需要跟后端 OBServer 节点保持通信。所以需要提前在 OceanBase 集群的 sys 租户下为 OBProxy 创建连接用户（proxyro）和密码。后续在启动 OBProxy 时可通过设置 proxy 启动参数的方式来告知 proxy。

> **说明**
>
>  
>
> proxyro 用户是 OBProxy 访问 OceanBase 集群的用户。一个 OceanBase 集群对应一个 proxyro 账号。

示例如下：

创建 proxyro 用户并授予 `SELECT` 权限。

```sql
$ obclient -h127.1 -uroot@sys -P2881 -p -c -A
Enter password:

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

```

### 启动 OBProxy

> **注意**
>
>  
>
> 启动 OBProxy 时，请在 admin 用户下并在 OBProxy 软件的 home 目录。其他用户或者其他目录下启动都可能带来问题。

1. OBProxy 启动时需要知道 OceanBase 集群在哪里，这是通过参数 rootservice_list 指定。

   下面以三副本 OceanBase 集群为例。

   ```javascript
   [root@xxx admin]# su - admin
   -bash-4.2$ cd /opt/taobao/install/obproxy && bin/obproxy -r "10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881" -p 2883 -o "observer_sys_password=$sha1_value,enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo

   ```

   > **说明**
   >
   >  
   >    - `$sha1_value` 应根据实际设置密码替换。设置 proxy 启动参数方式，设置的密码是 sha1 后的值，而不是原始值。例如：proxyro 用户设置的密码是 `123456`，则需要设置 `observer_sys_password` 的值是 `7c4a8d09ca3762af61e59520943dc26494f8941b`。
   >    - 示例 IP 做了脱敏处理，这不是安装需求。在启动时应根据自己机器真实 IP 填写。

   参数解释：

   | **参数** | **说明** |
   | --- | --- |
   | `-r` | 指定 OBServer 服务器 IP 和端口。 |
   | `-p` | 指定服务端口号，一般指定为 `2883`。 |
   | `-c` | 指定集群名称。 |
   | `-o` | 指定硬件或者内核参数配置。 |
 2. （可选）如果前面模拟了 OCP Web 服务，OBProxy 启动时也可以指定 API 地址。

   ```shell
   -bash-4.2$ cd /opt/taobao/install/obproxy && bin/obproxy -p 2883 -c obdemo -o "obproxy_config_server_url=http://10.10.10.1:8088/services?Action=GetObProxyConfig&User_ID=alibaba-inc&uid=ocpmaster,enable_cluster_checkout=false,enable_strict_kernel_release=false,enable_metadb_used=false"

   ```
 3. 启动之后，可以检查进程是否存在。

   ```shell
   -bash-4.2$ ps -ef|grep obproxy

   ```
 4. 停止 OBProxy 进程的方法是直接 kill。

   ```shell
   kill -9 `pidof obproxy`

   ```
 5. 再次启动 OBProxy 进程时就不需要指定那么参数。因为参数已经写到参数文件里。

   ```shell
   cd /opt/taobao/install/obproxy && bin/obproxy

   ```
 6. OBProxy 的运行日志在 `/opt/taobao/install/obproxy/log` 下，也就是 `/home/admin/logs/obproxy/log` 下。

   ```shell
   [root@xxx obproxy]# ll log
   lrwxrwxrwx 1 admin admin 28 Apr 27 17:56 log -> /home/admin/logs/obproxy/log

   ```

## OceanBase 数据库连接示例

通过 OBProxy 连接时，用户名的格式需要包含用户名、租户名和集群名。格式为： **用户名@租户名#集群名** 或 **集群名:租户名:用户名**。

```shell
$ obclient -h10.10.10.1 -uroot@sys#obdemo -P2883 -p -c -A oceanbase
Enter password:

```

或

```shell
$ obclient -h10.10.10.1 -uobdemo:sys:root -P2883 -p -c -A oceanbase
Enter password:

```

## 调整 OBProxy 参数

下面是 obproxy 的一些参数配置用于减少运行日志量或降低 CPU 消耗，请根据实际情况修改。

```sql
obclient> ALTER PROXYCONFIG SET slow_proxy_process_time_threshold='1000ms';
Query OK, 0 rows affected

obclient> ALTER PROXYCONFIG SET xflush_log_level=ERROR;
Query OK, 0 rows affected

obclient> ALTER PROXYCONFIG SET syslog_level=WARN;
Query OK, 0 rows affected

obclient> ALTER PROXYCONFIG SET enable_compression_protocol=false;
Query OK, 0 rows affected

obclient> SHOW PROXYCONFIG LIKE '%compress%'\G
*************************** 1. row ***************************
         name: enable_compression_protocol
        value: False
         info: if enabled, proxy will use compression protocol with server
  need_reboot: false
visible_level: USER
*************************** 2. row ***************************
         name: enable_syslog_file_compress
        value: False
         info: Whether to enable archive log compression
  need_reboot: false
visible_level: SYS
2 rows in set

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
