---
title: "使用源码构建 oblogproxy - OceanBase 数据库 V4.2.0 | OceanBase 文档中心"
description: 使用源码构建 oblogproxy 您可以通过下载安装包和使用源码两种方式安装部署 oblogproxy。本文将介绍如何使用源码构建 oblogproxy。 前提条件 已安装 CMake，要求版本 3.20 及以上。下载安装，请参考 CMake 官方网站 。 编译 oblogproxy 安装依赖 根据操作系统的不同，…
---
切换语言

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

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

# 使用源码构建 oblogproxy

更新时间：2024-04-19 09:30:55

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.0/zh-CN/700.reference/1500.components-and-tools/300.data-integrate/400.cdc/300.oblogproxy/100.install-and-deploy-oblogproxy/200.use-source-code-to-build-an-oblogproxy.md)  

您可以通过下载安装包和使用源码两种方式安装部署 oblogproxy。本文将介绍如何使用源码构建 oblogproxy。

## 前提条件

已安装 CMake，要求版本 3.20 及以上。下载安装，请参考 [CMake 官方网站](https://cmake.org/download/) 。

## 编译 oblogproxy

### 安装依赖

根据操作系统的不同，安装依赖的情况可以分为以下两种

- 基于 Fedora（包括 CentOS，Fedora，OpenAnolis，RedHat，UOS 等）

  ```bash
  yum install git wget rpm rpm-build cpio gcc gcc-c++ make glibc-devel glibc-headers libstdc++-static binutils

  ```
 - 基于 Debian（包括 Debian，Ubuntu 等）

  ```bash
  apt-get install git wget rpm rpm2cpio cpio gcc make build-essential binutils

  ```

### 编译操作

```bash
mkdir buildenv && cd buildenv
# 生成
cmake ..
# 执行
make -j 6

```

#### 说明

进行完该步操作，当前目录将产出 `logproxy` 二进制文件。

### 编译选项

在执行 CMake 编译时，可以添加编译选项改变默认的行为。例如, 编译出 Demo，成功后，当前目录还会产出 `demo_client` 二进制。

```bash
mkdir buildenv && cd buildenv
cmake -DWITH_DEMO=ON ..
make -j 6

```

#### 自定义 libobcdc.so

1. 获取 libobcdc.so

   您可以自己指定编译所使用的 obcdc，可在下载预编译包或者自行编译两种方式中任选其一。

      - 下载预编译包

       您可在 [Release 页面](https://github.com/oceanbase/oceanbase/releases) 下载预编译包，obcdc 的包名是 `oceanbase-ce-cdc-${package_version}`，可根据自己的系统选择下载。

       然后进行解压：

       ```bash
       rpm2cpio oceanbase-ce-cdc-${package_version} | cpio -idv

       ```

       在 RPM 包解压的目录下，会有 `home/admin/oceanbase` 目录，包含了以下 obcdc 运行必要的组件：

            - 库文件：包括 `libobcdc.so`，在 `lib64/` 目录下。
            - 头文件：`libobcdc.h`、`ob_errno.h` 在 `include/libobcdc/` 目录。
      - 编译 obcdc

       详细操作，请参考 [obcdc 编译说明](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000035819)。

       ```bash
       git clone https://github.com/oceanbase/oceanbase.git && cd oceanbase

       ./build.sh release -DOB_BUILD_CDC=ON --init --make

       ```

       编译产出物有：

            - libobcdc.so：在 `${PROJECT_BUILD_DIR}/src/logservice/libobcdc/src/` 目录下。
            - obcdc_tailf：在 `$${PROJECT_BUILD_DIR}/src/logservice/libobcdc/tests/` 目录下。
 2. 编译 oblogproxy

   若您选择自定义 libobcdc.so，在编译 oblogproxy 时需要在编译命令中打开自定义 obcdc 的开关并指定路径，示例以 `libobcdc.so` 和 `libobcdc.h` 都放在了 `/path/to/obcdc` 下。

   ```bash
   mkdir buildenv && cd buildenv
   # 设置 CMake 环境变量从而可以找到预编译的 obcdc
   CMAKE_INCLUDE_PATH=/path/to/obcdc CMAKE_LIBRARY_PATH=/path/to/obcdc cmake -DUSE_LIBOBLOG=ON ..
   # 执行
   make -j 6

   ```

#### 全部编译参数

| 选项 | 默认 | 说明 |
| --- | --- | --- |
| WITH_DEBUG | ON | 调试模式带 Debug 符号 |
| WITH_ASAN | OFF | 编译带 [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) |
| WITH_TEST | OFF | 测试 |
| WITH_DEMO | OFF | Demo |
| WITH_GLOG | ON | 使用 glog |
| WITH_DEPS | ON | 自动下载预编译依赖 |
| USE_LIBOBLOG | OFF | 使用自定义预编译的 obcdc |
| USE_CXX11_ABI | ON | 是否使用 C++ 11 ABI    **注意**   如果您使用了预编译的依赖（obcdc），需要保持一致，否则会找不到符号。 |

### 编译依赖说明

默认情况下，CMake 会自动下载并编译依赖库。但有几个组件需要特别说明：

- openssl：当前使用的版本是：1.0.1e。

  #### 注意

  1.0.* 和 1.1.* 版本 API 少量不兼容，当前 obcdc 和 logproxy 都是基于 1.0.* 实现的，因此，您需注意版本是否一致。
 - obcdc：如前文描述，您也可以自行获取或编译，并由环境变量指定路径，运行时需要指定 LD_LIBRARY_PATH。
 - libaio：obcdc 依赖。

## 安装 oblogproxy

### 配置系统租户

oblogproxy 单一配置文件，用代码目录下的 `conf.json`。

出于安全考虑，oblogproxy 需要配置某个用户的用户名和密码，该用户必须是 OceanBase 的 sys 租户用户才能连接。

#### 注意

此处的用户名不应包含集群名称或租户名称。

您获得 OBServer 节点的 sys 租户账号和密码后，需要通过加密配置给 oblogproxy。执行以下命令即可得到账号和密码的密文：

```bash
# 这里假设账号和密码分别为：user，pswd
./logproxy -x user
# 执行后将会输出 4B9C75F64934174F4E77EE0E9A58****
./logproxy -x pswd
# 执行后将会输出 DCE2AF09D006D6A440816880B938****

```

把获得的账号和密码的密文分别配置到 `/usr/local/oblogproxy/conf/conf.json` 中的 `ob_sys_username` 和 `ob_sys_password` 字段，例如：

```bash
{
  "ob_sys_username": "4B9C75F64934174F4E77EE0E9A58****",
  "ob_sys_password": "DCE2AF09D006D6A440816880B938****"
}

```

### 组织程序目录

```bash
# 创建程序目录
mkdir -p ./oblogproxy/bin ./oblogproxy/run
# 复制配置文件
cp -r ../conf ./oblogproxy/
# 复制起停脚本
cp ../script/run.sh ./oblogproxy/
# 复制程序二进制
cp logproxy ./oblogproxy/bin/

```

### 运行 oblogproxy

您可以通过以下命令启动该服务：

```bash
cd ./oblogproxy
# 指定 libobcdc.so 目录，让 oblogproxy 可以动态依赖
export LD_LIBRARY_PATH=/path/to/libobcdc
bash ./run.sh start

```

默认监听 `2983` 端口，修改 `conf.json` 中的 `service_port` 字段可更换监听端口。oblogproxy 的服务日志位于 `logs/`，LogReader（任务线程）的服务日志位于 `run/{client-id}/logs/`。

#### 说明

此时可以使用 oblogclient 进行 OceanBase 数据订阅，更多信息，请参考 [使用文档](https://github.com/oceanbase/oblogclient)。

## 链路加密

### oblogclient 与 oblogproxy 间 TLS 通信

修改 `conf.json` 中以下字段：

- `channel_type`："tls"，开启与 oblogclient 通信的 TLS。
 - `tls_ca_cert_file`：CA 证书文件路径。
 - `tls_cert_file`：服务器端签名证书路径。
 - `tls_key_file`：服务器端的私钥路径。
 - `tls_verify_peer`：true，开启 oblogclient 验证。

  #### 注意

     - 对应的 oblogclient 也需要相应配置，详细情况，参考 [oblogclient 链路加密](https://github.com/oceanbase/oblogclient)。
     - 以上路径均需使用绝对路径。

### oblogproxy（obcdc）与 OBServer 节点间 TLS 通信

#### 说明

oblogproxy 运行 obcdc 与 OBServer 节点进行交互。

- `liboblog_tls`：true，开启与 OBServer 节点通信的 TLS。
 - `liboblog_tls_cert_path`：OBServer 节点相关证书文件路径（绝对路径），可以复制 OBServer 节点部署文件路径下的 `wallet` 文件夹，需要确保此路径包含：ca.pem，client-cert.pem，client-key.pem。

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