---
title: "部署 obconfigserver - 安装部署工具 OBD V3.6.0 | OceanBase 文档中心"
description: 部署 obconfigserver 部署 obconfigserver 时，您可以选择单独部署，也可以和 OceanBase 数据库以及 ODP 一起部署，本文将介绍 obconfigserver 常见的几种部署方法。 组件介绍 oceanbase-ce OceanBase 数据库社区版，OceanBase 数据库一…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*Qq8pT6yBPTcAAAAAAAAAAAAADiGDAQ/original) 安装部署工具 OBDV 3.6.0

# 部署 obconfigserver

更新时间：2025-10-18 20:08:12

[编辑](https://github.com/oceanbase/obd-doc/edit/V3.6.0/zh-CN/400.user-guide/300.command-line-operations/200.deploy-component/350.deploy-ob-configserver.md)  

部署 obconfigserver 时，您可以选择单独部署，也可以和 OceanBase 数据库以及 ODP 一起部署，本文将介绍 obconfigserver 常见的几种部署方法。

## 组件介绍

- oceanbase-ce

  OceanBase 数据库社区版，OceanBase 数据库一款完全自研的企业级原生分布式数据库，详细信息请参见 [OceanBase 数据库文档](https://www.oceanbase.com/docs/oceanbase-database-cn)。
 - obproxy-ce

  OceanBase Database Proxy，OceanBase 数据库代理，是 OceanBase 数据库专用的代理服务器，简称为 ODP（又称为 OBProxy）。详细信息请参见 [OceanBase 数据库代理文档](https://www.oceanbase.com/docs/odp-doc-cn)。
 - ob-configserver

  OceanBase Configserver，简称为 obconfigserver，可提供 OceanBase 的元数据注册，存储和查询服务。详细信息请参见 [ob-configserver](https://github.com/oceanbase/ob-configserver/tree/main)。

## 前提条件

在开始之前，请确保您已满足以下条件：

- 直接部署 obconfigserver 要求您已安装 V2.3.0 或之后版本的 obd，为集群新增 obconfigserver 要求您已安装 V2.5.0 或之后版本的 obd，建议安装最新版本。安装 obd 的详细操作您可参见 [安装 obd](https://www.oceanbase.com/docs/common-obd-cn-1000000003892241)。

  #### 说明

  建议通过下载 OceanBase All in One 进行安装，OceanBase All in One 目前提供部署所需要的全部组件（除 obbinlog 组件），且组件已经经过相互适配测试，为官方推荐版本。
 - 您的机器可以联网，或者 obd 本地镜像库中有部署所需安装包。

  可执行 `obd mirror list local` 命令查看本地镜像库中的安装包。若您通过 OceanBase All in One 安装 obd，本地镜像库中默认包含所有部署所需组件的安装包。
 - 同时部署 OceanBase 集群时，需确保 OBServer 节点机器支持 AVX 指令集（仅 x86 架构服务器有此限制）。可执行 `lscpu | grep Flags | grep avx` 命令查看是否支持 AVX 指令集。

  #### 说明

  当使用 x86 架构机器时，若待部署的 OceanBase 数据库版本在以下范围中，不再限制机器是否支持 AVX 指令集：

     - 对于 V4.2.x 版本，要求为 V4.2.5.6 或之后版本。
     - 对于 V4.3.x 版本，要求为 V4.3.5.4 或之后版本。
     - 对于 V4.4.x 版本，要求为 V4.4.1.0 或之后版本。
 - 离线部署场景下，若同时部署 OceanBase 集群，且使用 ARM 架构服务器部署，需查看 OBServer 节点机器是否支持 LSE 指令集，可执行 `lscpu | grep Flags | grep atomics` 命令查看是否支持。若机器不支持 LSE 指令集，需下载带 `nonlse` 的 OceanBase 数据库安装包，并使用 `obd mirror clone` 命令将安装包上传到 obd 本地镜像库。

  #### 说明

  OceanBase All in One 包中未包含带有 `nonlse` 的 OceanBase 数据库安装包。

## 操作步骤

本节分为如下三种场景介绍如何使用 obd 命令部署 obconfigserver，您可根据实际情况选择合适的部署方式：

- 同时部署 OceanBase 数据库和 ODP

  在同一份配置文件中同时配置 obconfigserver、OceanBase 数据库和 ODP，部署成功后一同部署的 OceanBase 数据库会被注册到 obconfigserver 中，并且 ODP 也是使用 config url 方式启动，也就是说可以通过该 ODP 连接任何被注册到当前 obconfigserver 中的集群。

  #### 注意

  使用 ODP 连接 OceanBase 数据库时，需保证 ODP 中的配置项 `observer_sys_password` 与 OceanBase 数据库中 proxyro@sys 用户密码一致，否则连接会报错。
 - 为集群新增 obconfigserver

  使用 `obd cluster component add` 命令向 obd 管理的 OceanBase 集群中新增 obconfigserver，若已存在的 OceanBase 集群中有部署 ODP，执行成功并重启 ODP 后，ODP 将使用新增 obconfigserver 的 config url 启动。
 - 仅部署 obconfigserver

  部署成功后，需手动将 OceanBase 集群注册到该 obconfigserver 中，并修改 ODP 的 `obproxy_config_server_url` 配置项，具体操作可参见下文 [使用 obconfigserver](#使用%20obconfigserver) 介绍。

    同时部署 OceanBase 数据库、ODP   为集群新增 obconfigserver   仅部署 obconfigserver

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

创建一个配置文件，此处以配置文件名为 `config.yaml` 为例，该配置文件中各个组件的配置及注意事项如下所示。

1. 用户配置

   ```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 30

   ```

   `username` 为登录到目标机器的用户名，确保您的用户名有 `home_path` 的写权限。`password` 和 `key_file` 均用于验证用户，通常情况下只需要填写一个。

   #### 注意

   在配置秘钥路径后，如果您的秘钥不需要口令，请注释或者删除 `password`，以免 `password` 被视为秘钥口令用于登录，导致校验失败。
 2. OceanBase 数据库

   ```yaml
   oceanbase-ce:
     depends:
       - ob-configserver
     servers:
       - name: server1
         # Please don't use hostname, only IP can be supported
         ip: 10.10.10.2
       - name: server2
         ip: 10.10.10.3
       - name: server3
         ip: 10.10.10.4
     global:
       # The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
       home_path: /home/admin/observer
       # The directory for data storage. The default value is $home_path/store.
       # data_dir: /data
       # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
       # redo_dir: /redo
       # Please set devname as the network adaptor's name whose ip is  in the setting of severs.
       # if set severs as "127.0.0.1", please set devname as "lo"
       # if current ip is 192.168.1.10, and the ip's network adaptor's name is "eth0", please use "eth0"
       devname: eth0
       cluster_id: 1
       # please set memory limit to a suitable value which is matching resource.
       memory_limit: 6G # The maximum running memory for an observer
       system_memory: 1G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
       datafile_size: 20G # Size of the data file.
       log_disk_size: 15G # The size of disk space used by the clog files.
       cpu_count: 16
       scenario: htap
       enable_auto_start: true
       mysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
       rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
       obshell_port: 2886
       production_mode: false
       enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.
       max_syslog_file_count: 4 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
       # Cluster name for OceanBase Database. The default value is obcluster. When you deploy OceanBase Database and obproxy, this value must be the same as the cluster_name for obproxy.
       appname: test
       root_password: ****** # root user password
       proxyro_password: ****** # proxyro user password, consistent with obproxy's observer_sys_password, can be empty
     server1:
       zone: zone1
     server2:
       zone: zone2
     server3:
       zone: zone3

   ```

   配置文件中各配置项含义可参见 [配置文件说明](https://www.oceanbase.com/docs/common-obd-cn-1000000003892319) 一文 **配置项说明** 部分。需要注意的配置项如下：

      - depends：您需配置 oceanbase-ce 组件依赖于 ob-configserver 组件，否则无法将该 OceanBase 数据库注册到 obconfigserver 中。
      - appname：用于配置集群的名字，不配置的情况下 OceanBase 数据库无法注册到 obconfigserver 中。
      - 若待部署的 OceanBase 数据库版本号不小于 V4.2.5，配置文件中未配置 `scenario` 时，obd 会提供交互式选项供用户选择负载类型。
      - 配置 `enable_auto_start` 为 `true` 即表示开启 observer 进程开机自启动功能，该功能需确保部署用户拥有 sudo 权限，且部署环境非容器环境。
 3. ODP 组件

   ```yaml
   obproxy-ce:
     # Set dependent components for the component.
     # When the associated configurations are not done, obd will automatically get the these configurations from the dependent components.
     depends:
       - oceanbase-ce
       - ob-configserver
     servers:
       - 10.10.10.5
     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
       home_path: /home/admin/obproxy
       # oceanbase root server list
       # format: ip:mysql_port;ip:mysql_port. When a depends exists, obd gets this value from the oceanbase-ce of the depends.
       # rs_list: 10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881
       enable_cluster_checkout: false
       # observer cluster name, consistent with oceanbase-ce's appname. When a depends exists, obd gets this value from the oceanbase-ce of the depends.
       # cluster_name: obcluster
       skip_proxy_sys_private_check: true
       enable_strict_kernel_release: false
       # 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 password, consistent with oceanbase-ce's proxyro_password, can be empty. When a depends exists, obd gets this value from the oceanbase-ce of the depends.

   ```

   配置文件中各配置项含义可参见 [配置文件说明](https://www.oceanbase.com/docs/common-obd-cn-1000000003892319) 一文 **配置项说明** 部分。您需注意请勿配置 `rs_list` 配置项，否则 ODP 无法获取 obconfigserver 中注册的集群信息。
 4. obconfigserver 组件

   ```yaml
   ob-configserver:
     servers:
       - 10.10.10.1
     global:
       listen_port: 8080 # The port of ob-configserver web
       server_ip: 0.0.0.0 # Listen to the ob-configserver server IP。When you want to listen to the specified IP address,use it.
       home_path: /home/admin/ob-configserver  # The working directory for prometheus. ob-configserver is started under this directory. This is a required field.
       ## log config
       # log_level: info # Log printing level of ob-configserver。The default value is `info`
       # log_maxsize: 30 # The total size of manager ob-configserver.Log size is measured in Megabytes.The default value is 30
       # log_maxage：7 # The days of manager expired ob-configserver.Log retention days. The default value is 7
       # log_maxbackups: 10  #The number of manager expired ob-configserver.Log. The default value is 10
       # log_localtime: true #  Switch of ob-configserver.Log naming with localtime. The default value is true
       # log_compress: true # Compress ob-configserver.Log switch. The default value is true

       ## vip config, configserver will generate url with vip_address and port and return it to the client
       ## do not use some random value that can't be connected
       # vip_address: "10.10.10.1"
       # vip_port：8080
       ## storage config
       # storage:
         ## database type, support sqlite3 or mysql
         # sqlite3:
         # database_type: sqlite3
         # connection_url: "/home/admin/ob-configserver/.data.db?cache=shared&_fk=1"

         # mysql:
         # database_type: mysql
         # connection_url: "$user:$password@tcp($IP:$PORT)/$metadb?parseTime=true"

   ```

   配置文件中注释的配置项未打开时将使用默认值，您也可取消注释并配置为其他值。配置文件中需要注意的有如下几个配置项：

      - `server_ip`：ob-configserver 服务访问白名单，默认为 `0.0.0.0`，表示 ob-configserver 所在服务器的所有 IP 都可以访问。
      - `vip_address` 和 `vip_port`：`vip_address` 和 `vip_port` 为负载均衡访问地址配置项。若要在 `servers` 下配置多个节点，您需使用负载均衡，请在配置好负载均衡后，在配置文件中填写负载均衡地址 IP 与端口。
      - `database_type`：数据库类型，提供 `sqlite3` 与 `mysql`，默认为 `sqlite3` 类型，推荐使用 `mysql` 类型。
      - `connection_url`：数据库连接 URL。选择 `sqlite3` 类型时默认为 `$home_path/.data.db?cache=shared&_fk=1`；选择 `mysql` 类型时，`connection_url` 可以是 OceanBase 数据库，也可以是原生 MySQL。指定的数据库用户需要有 URL 里对应库 DDL 和 DML 的权限，需注意的是，使用 OceanBase 数据库时这里的库名请勿使用 oceanbase 库，否则会提示没有权限。

### 步骤二：启动 obconfigserver

1. 部署 obconfigserver

   ```shell
   [admin@obtest ~]$ obd cluster deploy test -c config.yaml

   ```

   此处以使用配置文件 `config.yaml` 部署 `test` 集群为例，您需根据实际情况修改部署集群名和配置文件名。
 2. 启动 obconfigserver

   ```shell
   [admin@obtest ~]$ obd cluster start test

   ```

   输出如下，可以看到 obconfigserver 访问地址的打印信息。

   ```shell
   +-----------------------------------------------------------+
   |                      ob-configserver                      |
   +---------+------+---------------+----------+--------+------+
   | server  | port | vip_address   | vip_port | status | pid  |
   +---------+------+---------------+----------+--------+------+
   | 0.0.0.0 | 8080 | 10.10.10.1    | 8080     | active | 6270 |
   +---------+------+---------------+----------+--------+------+
   curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig'
   Wait for observer init ok
   +-------------------------------------------------+
   |                 oceanbase-ce                    |
   +---------------+---------+------+-------+--------+
   | ip            | version | port | zone  | status |
   +---------------+---------+------+-------+--------+
   | 10.10.10.2    | 4.3.5.0 | 2881 | zone1 | ACTIVE |
   +---------------+---------+------+-------+--------+
   | 10.10.10.3    | 4.3.5.0 | 2881 | zone2 | ACTIVE |
   +---------------+---------+------+-------+--------+
   | 10.10.10.4    | 4.3.5.0 | 2881 | zone3 | ACTIVE |
   +---------------+---------+------+-------+--------+
   obclient -h10.10.10.2 -P2881 -uroot -p'********' -Doceanbase -A

   +----------------------------------------------------------------+
   |                           obproxy-ce                           |
   +------------+------+-----------------+-----------------+--------+
   | ip         | port | prometheus_port | rpc_listen_port | status |
   +------------+------+-----------------+-----------------+--------+
   | 10.10.10.5 | 2883 | 2884            | 2885            | active |
   +------------+------+-----------------+-----------------+--------+
   obclient -h10.10.10.5 -P2883 -uroot@proxysys -p'********' -Doceanbase -A

   obshell program health check ok
   display ob-dashboard ok
   +-----------------------------------------------------------+
   |                        ob-dashboard                       |
   +---------------------------+------+---------------+--------+
   | url                       | user | password      | status |
   +---------------------------+------+---------------+--------+
   | http://10.10.10.2:2886    | root | '********'    | active |
   +---------------------------+------+---------------+--------+

   ```

1. 创建配置文件

   为 obd 管理的 OceanBase 集群新增 obconfigserver 时，新创建的配置文件中只需要配置 ob-configserver 组件的信息，示例如下：

       ## vip config, configserver will generate url with vip_address and port and return it to the client
       ## do not use some random value that can't be connected
       # vip_address: "10.10.10.1"
       # vip_port：8080
       ## storage config
       # storage:
         ## database type, support sqlite3 or mysql
         # sqlite3:
         # database_type: sqlite3
         # connection_url: "/home/admin/ob-configserver/.data.db?cache=shared&_fk=1"

      - `server_ip`：ob-configserver 服务访问白名单，默认为 `0.0.0.0`，表示 ob-configserver 所在服务器的所有 IP 都可以访问。
      - `vip_address` 和 `vip_port`：`vip_address` 和 `vip_port` 为负载均衡访问地址配置项。若要在 `servers` 下配置多个节点，您需使用负载均衡，请在配置好负载均衡后，在配置文件中填写负载均衡地址 IP 与端口。
      - `database_type`：数据库类型，提供 `sqlite3` 与 `mysql`，默认为 `sqlite3` 类型，推荐使用 `mysql` 类型。
      - `connection_url`：数据库连接 URL。选择 `sqlite3` 类型时默认为 `$home_path/.data.db?cache=shared&_fk=1`；选择 `mysql` 类型时，`connection_url` 可以是 OceanBase 数据库，也可以是原生 MySQL。指定的数据库用户需要有 URL 里对应库 DDL 和 DML 的权限，需注意的是，使用 OceanBase 数据库时这里的库名请勿使用 oceanbase 库，否则会提示没有权限。
 2. 执行新增组件命令

   ```shell
   obd cluster component add test1 -c configserver.yaml

   ```

   此处以已存在的 OceanBase 集群名为 `test1`（执行 `obd cluster list` 命令输出的 `Name`），新增 obconfigserver 时创建的配置文件名为 `configserver.yaml` 为例，您需根据实际集群名和组件名进行替换。

   命令执行后输出如下：

   ```shell
   Connect to ob-configserver ok
   +-----------------------------------------------------------------+
   |                         ob-configserver                         |
   +---------------+------+---------------+----------+--------+------+
   | server        | port | vip_address   | vip_port | status | pid  |
   +---------------+------+---------------+----------+--------+------+
   | 10.10.10.1    | 8080 | 10.10.10.1    | 8080     | active | 2725 |
   +---------------+------+---------------+----------+--------+------+
   curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig'

   ```

   当待新增组件的集群中存在 ODP 时，根据 obd 版本的不同有如下两种情况：

      - obd 为 V3.2.0 或之后版本时，支持交互式控制是否重启集群，只需在输出中的如下位置输入 `restart` 即可使用新增的 obconfigserver 重启 ODP。

       ```shell
       Restart `obproxy-ce,oceanbase-ce` for test to take effect. You can do it manually later or enter `restart` now:

       ```

       如果此处直接按 Enter 回车，或输入非 restart 值，obd 不会重启集群，流程结束后 ODP 仍是使用 rslist 方式启动。
      - obd 为 V3.2.0 之前版本时，会在输出中输出重启命令，您只需复制并执行输出中的 `obd cluster restart` 命令。执行命令后，将使用新增的 obconfigserver 重启 ODP。

       ```shell
       obd cluster restart demo -c obproxy-ce

       ```

创建一个配置文件，此处以配置文件名为 `config-only.yaml` 为例，该配置文件中各个组件的配置及注意事项如下所示。

1. 用户配置

   ```

   #### 注意

   在配置秘钥路径后，如果您的秘钥不需要口令，请注释或者删除 `password`，以免 `password` 被视为秘钥口令用于登录，导致校验失败。
 2. 配置 ob-configserver 组件

       ## vip config, configserver will generate url with vip_address and port and return it to the client
       ## do not use some random value that can't be connected
       # vip_address: "10.10.10.1"
       # vip_port：8080
       ## storage config
       # storage:
         ## database type, support sqlite3 or mysql
         # sqlite3:
         # database_type: sqlite3
         # connection_url: "/home/admin/ob-configserver/.data.db?cache=shared&_fk=1"

      - `server_ip`：ob-configserver 服务访问白名单，默认为 `0.0.0.0`，表示 ob-configserver 所在服务器的所有 IP 都可以访问。
      - `vip_address` 和 `vip_port`：`vip_address` 和 `vip_port` 为负载均衡访问地址配置项。若要在 `servers` 下配置多个节点，您需使用负载均衡，请在配置好负载均衡后，在配置文件中填写负载均衡地址 IP 与端口。
      - `database_type`：数据库类型，提供 `sqlite3` 与 `mysql`，默认为 `sqlite3` 类型，推荐使用 `mysql` 类型。
      - `connection_url`：数据库连接 URL。选择 `sqlite3` 类型时默认为 `$home_path/.data.db?cache=shared&_fk=1`；选择 `mysql` 类型时，`connection_url` 可以是 OceanBase 数据库，也可以是原生 MySQL。指定的数据库用户需要有 URL 里对应库 DDL 和 DML 的权限，需注意的是，使用 OceanBase 数据库时这里的库名请勿使用 oceanbase 库，否则会提示没有权限。
 3. 部署 obconfigsever

   ```shell
   [admin@obtest ~]$ obd cluster deploy config-only -c config-only.yaml

   ```

   此处以使用配置文件 `config-only.yaml` 部署 `config-only` 集群为例，您需根据实际情况修改部署集群名和配置文件名。
 4. 启动 obconfigserver

   ```shell
   [admin@obtest ~]$ obd cluster start config-only

   ```

   ```shell
   +-----------------------------------------------------------+
   |                      ob-configserver                      |
   +---------+------+---------------+----------+--------+------+
   | server  | port | vip_address   | vip_port | status | pid  |
   +---------+------+---------------+----------+--------+------+
   | 0.0.0.0 | 8080 | 10.10.10.1    | 8080     | active | 6270 |
   +---------+------+---------------+----------+--------+------+
   curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig'

   ```

## 使用 obconfigserver

本节介绍部署 obconfigserver 后如何使用，具体包含如何向 obconfigserver 中注册 OceanBase 集群、如何查看注册信息、如何启动 ODP，以及如何删除被注册到 obconfigserve 中的集群。

### 注册 OceanBase 集群

本节介绍如何将 OceanBase 集群注册到 obconfigserver 中。有修改 OceanBase 集群配置文件和执行 SQL 命令两种方式，您可根据实际需要选择任一方式进行操作。

    修改 OceanBase 集群配置项   执行 SQL 命令

#### 注意

- 待注册的 OceanBase 集群配置文件需配置 `appname` 配置项，否则配置 `obconfig_url` 后重启会报错。
 - 待注册的 OceanBase 集群需是已启动的集群，目前暂不支持配置待启动集群。

1. 您可执行 `obd cluster edit-config` 命令编辑已有集群的配置文件，将 `obconfig_url` 配置到 oceanbase-ce 组件的 `global` 模块下。

   配置项示例如下：

   ```shell
   obconfig_url: 'http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test1'

   ```

      - `10.10.10.1:8080`：obconfigserver 访问地址，此处仅为示例，您需根据实际情况修改。
      - `test1`：待注册的 OceanBase 集群的 `appname` 值，此处以 `appname` 值为 `test1` 为例，您需根据实际情况修改。
 2. 执行 `obd cluster reload` 命令重启集群，此处以部署名为 `test1` 为例。

   ```shell
   obd cluster reload test1

   ```
 3. 重启成功后可参照下文 [查看 obconfigserver 中注册信息](#查看%20obconfigserver%20中注册信息) 内容验证该集群是否成功注册到 obconfigserver 中。

1. 使用 root 用户登录待注册数据库的 sys 租户

   ```shell
   obclient -h<IP> -P<PORT> -uroot@sys -p -c -A
   # example
   obclient -h10.10.10.4 -P4883 -uroot@sys -p -c -A

   ```

   其中，`IP` 为连接 OceanBase 数据库的 IP 地址；`PORT` 为连接 OceanBase 数据库的的端口，直连时为 `mysql_port` 配置项的值，通过 ODP 连接时为 `listen_port` 配置项的值。

   使用 OBClient 客户端连接 OceanBase 集群的详细操作可参考 [通过 OBClient 连接 OceanBase 租户](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000033604)。
 2. 执行如下命令查看 `obconfig_url` 配置项的值

   ```sql
   obclient> SHOW PARAMETERS LIKE 'obconfig_url';

   ```

   输出如下，表示当前集群没有配置 `obconfig_url`。

   ```sql
   +-------+----------+---------------+----------+--------------+-----------+-------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+
   | zone  | svr_type | svr_ip        | svr_port | name         | data_type | value | info                     | section  | scope   | source  | edit_level        | default_value | isdefault |
   +-------+----------+---------------+----------+--------------+-----------+-------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+
   | zone3 | observer | 10.10.10.4   |     2882  | obconfig_url | STRING    |       | URL for OBConfig service | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |               |         1 |
   | zone1 | observer | 10.10.10.2   |     2882  | obconfig_url | STRING    |       | URL for OBConfig service | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |               |         1 |
   | zone2 | observer | 10.10.10.3   |     2882  | obconfig_url | STRING    |       | URL for OBConfig service | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |               |         1 |
   +-------+----------+---------------+----------+--------------+-----------+-------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+

   ```
 3. 执行如下命令配置 `obconfig_url`

   ```sql
   alter system set obconfig_url = 'http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test1';

   ```

   `10.10.10.1:8080` 为 obconfigserver 访问地址，`test1` 为待注册的 OceanBase 集群的 `appname` 值，可连接集群后执行 `SHOW PARAMETERS LIKE 'cluster';` 命令查看，此处仅为示例，您需根据实际情况修改。
 4. 退出集群后验证 obconfigserver 是否可以解析出 OceanBase 集群的信息

   ```shell
   curl -s 'http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test1' |jq .

   ```

   #### 说明

   将 OceanBase 集群注册到 obconfigserver 后，需等待几分钟后，obconfigserver 中才能查到相关信息。

输出如下，成功解析出集群中 OBServer 节点的 IP 和端口。

```json
{
  "Code": 200,
  "Message": "successful",
  "Success": true,
  "Data": {
    "ObClusterId": 1,
    "ObRegionId": 1,
    "ObCluster": "test1",
    "ObRegion": "test1",
    "ReadonlyRsList": [],
    "RsList": [
      {
        "address": "10.10.10.4:4882",
        "role": "LEADER",
        "sql_port": 4881
      }
    ],
    "Type": "PRIMARY",
    "timestamp": 1692699586370950
  },
  "Trace": "362172a2d5de734c",
  "Server": "10.10.10.1",
  "Cost": 1
}  

```

### 查看 obconfigserver 中注册信息

1. 查看集群详细信息

   ```shell
   obd cluster display test

   ```

   此处以 obconfigserver 所在集群部署名为 `test` 为例，您可执行 `obd cluster list` 命令查看实际部署名（`Name` 列对应值），并进行替换。

   输出如下：

   ```shell
   Connect to ob-configserver ok
   +-------------------------------------------------------------------+
   |                          ob-configserver                          |
   +---------------+-------+---------------+----------+--------+-------+
   | server        | port  | vip_address   | vip_port | status | pid   |
   +---------------+-------+---------------+----------+--------+-------+
   | 10.10.10.1    | 8080  | 10.10.10.1    | 8080     | active | 13616 |
   +---------------+-------+---------------+----------+--------+-------+
   curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig'
   Connect to observer 10.10.10.1:2881 ok
   Wait for observer init ok
   +-------------------------------------------------+
   |                   oceanbase-ce                  |
   +---------------+---------+------+-------+--------+
   | ip            | version | port | zone  | status |
   +---------------+---------+------+-------+--------+
   | 10.10.10.2    | 4.3.5.0 | 2881 | zone1 | ACTIVE |
   | 10.10.10.3    | 4.3.5.0 | 2881 | zone2 | ACTIVE |
   | 10.10.10.4    | 4.3.5.0 | 2881 | zone3 | ACTIVE |
   +---------------+---------+------+-------+--------+
   obclient -h10.10.10.1 -P2881 -uroot -p'********' -Doceanbase -A

   cluster unique id: 253244ab-94b9-5def-9cbd-7a46e6c19621-1953714c460-00050304

   Connect to obproxy ok
   +-------------------------------------------------------------------+
   |                             obproxy-ce                            |
   +---------------+------+-----------------+-----------------+--------+
   | ip            | port | prometheus_port | rpc_listen_port | status |
   +---------------+------+-----------------+-----------------+--------+
   | 10.10.10.5    | 2883 | 2884            | 2885            | active |
   +---------------+------+-----------------+-----------------+--------+
   obclient -h10.10.10.1 -P2883 -uroot@proxysys -p'********' -Doceanbase -A
   obshell program health check ok
   display ob-dashboard ok
   +-----------------------------------------------------------+
   |                        ob-dashboard                       |
   +---------------------------+------+---------------+--------+
   | url                       | user | password      | status |
   +---------------------------+------+---------------+--------+
   | http://10.10.10.2:2886    | root | '********'    | active |
   +---------------------------+------+---------------+--------+

   Trace ID: ea4340b6-f35a-11ef-a019-00163e4cf51e

   ```
 2. 查看 obconfigserve 中注册的集群

   复制执行 ob-configserver 组件下的访问信息即可查看 obconfigserver 中注册的 OceanBase 集群。您可使用 jq 命令格式化（美化）shell 命令行下 json 的输出，jq 命令可通过 `sudo yum install jq` 安装。

   ```shell
   curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig' | jq .

   ```

   输出如下，`ObRootServiceInfoUrlList` 中包含集群名为 test 的 OceanBase 集群的信息，表示该集群已被注册到 obconfigserver 中：

   ```json
   {
     "Code": 200,
     "Message": "successful",
     "Success": true,
     "Data": {
       "ObProxyBinUrl": "http://10.10.10.1:8080/client?Action=GetObProxy",
       "ObProxyDatabaseInfo": {
         "DataBase": "***",
         "MetaDataBase": "http://10.10.10.1:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=admin&ObRegion=obdv1",
         "Password": "***",
         "User": "***"
       },
       "ObRootServiceInfoUrlList": [
         {
           "ObRegion": "test",
           "ObRootServiceInfoUrl": "http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test"
         }
       ],
       "Version": "4660b4b1f237893ba1da50a302e4c3e6"
     },
     "Trace": "07a7cac129713d00",
     "Server": "10.10.10.1",
     "Cost": 0
   }

   ```
 3. 查看对应 OceanBase 集群的详细信息

   再次请求命令输出中的 `ObRootServiceInfoUrl` 内容，可查看对应 OceanBase 集群的详细信息，示例如下：

   ```shell
   curl -s 'http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test' | jq .

   ```

   ```json
   {
     "Code": 200,
     "Message": "successful",
     "Success": true,
     "Data": {
       "ObClusterId": 1,
       "ObRegionId": 1,
       "ObCluster": "test",
       "ObRegion": "test",
       "ReadonlyRsList": [],
       "RsList": [
         {
           "address": "10.10.10.4:2882",
           "role": "LEADER",
           "sql_port": 2881
         },
         {
           "address": "10.10.10.3:2882",
           "role": "FOLLOWER",
           "sql_port": 2881
         },
         {
           "address": "10.10.10.2:2882",
           "role": "FOLLOWER",
           "sql_port": 2881
         }
       ],
       "Type": "PRIMARY",
       "timestamp": 1694084002271443
     },
     "Trace": "2b2ee036276b068e",
     "Server": "10.10.10.1",
     "Cost": 3
   }

   ```

### 启动 ODP

ODP 有两种启动方式：配置 `rs_list` 启动、配置 `obproxy_config_server_url` 启动。配置 `rs_list` 启动时，ODP 仅可连接 `rs_list` 中配置的一个 OceanBase 集群；配置 `obproxy_config_server_url` 启动时，ODP 可连接对应 obconfigserver 中注册的所有 OceanBase 集群。

如需使用 obconfigserver 启动 ODP，可执行 `obd cluster edit-config` 命令打开配置文件，直接在配置文件中 `obproxy-ce` 组件的 `global` 模块下添加如下内容即可：

```yaml
obproxy_config_server_url: http://10.10.10.1:8080/services?Action=GetObProxyConfig

```

示例中的 `10.10.10.1:8080` 为 obconfigserver 访问地址，您需根据实际情况进行修改。

### 删除集群注册信息

您可通过如下命令删去 obconfigserver 中注册的集群信息，此处以删除 `test1` 集群信息为例。

```shell
curl -X DELETE 'http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test1&ObClusterId=1&version=2' |jq .

```

示例中的 `10.10.10.1:8080` 为 obconfigserver 访问地址，可执行 `obd cluster display` 命令获取；`test1` 可查看待删除集群的配置文件中的 `appname` 值，也可连接集群后执行 `SHOW PARAMETERS LIKE 'cluster';` 命令查看；`ObClusterId` 可查看待删除集群的配置文件中的 `cluster_id` 值，或参照上文 [查看 obconfigserver 中注册信息](#查看%20obconfigserver%20中注册信息) 内容从集群详细信息中获取。

输出如下：

```json
{
  "Code": 200,
  "Message": "successful",
  "Success": true,
  "Data": "success",
  "Trace": "caba1209b3a00c56",
  "Server": "10.10.10.1",
  "Cost": 4
}

```

再次查看 obconfigserver 中注册的集群信息。

```shell
curl -s 'http://10.10.10.1:8080/services?Action=GetObProxyConfig' |jq .

```

输出如下，可以看到 `test1` 的集群信息已不存在。

```json
{
  "Code": 200,
  "Message": "successful",
  "Success": true,
  "Data": {
    "ObProxyBinUrl": "http://10.10.10.1:8080/client?Action=GetObProxy",
    "ObProxyDatabaseInfo": {
      "DataBase": "***",
      "MetaDataBase": "http://10.10.10.1:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=admin&ObRegion=obdv1",
      "Password": "***",
      "User": "***"
    },
    "ObRootServiceInfoUrlList": [
      {
        "ObRegion": "test",
        "ObRootServiceInfoUrl": "http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=test"
      }
    ],
    "Version": "4840ade8a158753aa5b9ea69ba014fc1"
  },
  "Trace": "d4b4b27fae24e7b4",
  "Server": "10.10.10.1",
  "Cost": 1
}

```

## 常见问题

### 启动 obconfigserver 时，报错 `prepared statement not supported`

**问题现象**

当使用 OceanBase 数据库做 metadb 时，启动 obconfigserver 报错 `prepared statement not supported`，查看日志如下所示。

```shell
2022-11-16T09:52:14.47799+08:00 ERROR [12258,] caller=cmd/main.go:36:func1: start configserver failed: start config server: create configserver schema: sql/schema: reading schema information Error 1235: while parameter _ob_enable_prepared_statement is disabled, prepared statement not supported
[10.10.10.1:2882] [2022-11-16 09:52:14.459102] [YB42AC1EC731-0005EB5F1D83A0A7] fields: args:="[]"

```

**可能原因**

在启动 obconfigserver 时，作为元数据库的 OceanBase 数据库未开启 prepared statement 功能。

**解决方法**

您可通过如下两种方法解决。

- 方法一：在配置文件里为 obconfigserver 的 `connection_url` 配置项添加上 `interpolateParams=true`，示例如下。

  ```shell
  connection_url: "user:password@tcp(IP:PORT)/test?parseTime=true&interpolateParams=true"

  ```
 - 方法二：连接 OceanBase 集群开启 `_ob_enable_prepared_statement` 参数。

     - 查询是否开启 `_ob_enable_prepared_statement` 参数。

      ```sql
      obclient> select name,value,svr_ip,svr_port from oceanbase.__all_virtual_sys_parameter_stat where name='_ob_enable_prepared_statement';
      +-------------------------------+-------+---------------+----------+
      | name                          | value | svr_ip        | svr_port |
      +-------------------------------+-------+---------------+----------+
      | _ob_enable_prepared_statement | False | 10.10.10.1    |     2882 |
      +-------------------------------+-------+---------------+----------+
      1 row in set

      ```
     - 开启 `_ob_enable_prepared_statement` 参数。

      ```sql
      obclient> alter system set _ob_enable_prepared_statement='True';

      ```

### 通过 ODP 连接 obconfigserver 中注册的集群时报错

**问题现象**

通过 ODP 连接 obconfigserver 中注册的集群时报错，示例如下。

```sql
$ obclient -h10.10.10.2 -P2883 -uroot@sys#cluster -p -Doceanbase -A
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11

```

**可能原因**

ODP 使用配置的查询 OceanBase 数据库的用户和密码无法访问 OceanBase 集群查询数据。

**解决方法**

- 方法一：执行 `obd cluster edit-config` 命令查看配置文件，您需查看 OceanBase 集群配置文件中的 `proxyro_password` 和 ODP 配置文件中的 `observer_sys_password` 两个配置项设置是否保持一致。若配置文件中对应配置项不一致，将两者修改统一后根据输出执行对应命令重启，重启后即可通过 ODP 连接该集群。
 - 方法二：查询 OceanBase 数据库中是否存在 `proxyro` 用户

     - 使用 root 用户登录 OceanBase 数据库的 sys 租户

      ```shell
      obclient -h10.10.10.2 -P2881 -uroot@sys -p -Doceanbase -A

      ```
     - 查看集群中是否有 `proxyro` 用户

      ```sql
      select user,password from mysql.user;

      ```
     - 根据输出结果有如下两种处理方法

           - 结果一：集群中无 `proxyro` 用户，执行如下命令创建 `proxyro` 用户，并将密码配置为和 ODP 配置文件中 `observer_sys_password` 配置项一致

            ```sql
            create user 'proxyro' identified by '*****';

            ```
           - 结果二：集群中存在 `proxyro` 用户，执行如下命令修改 `proxyro` 用户密码，使其与 ODP 配置文件中 `observer_sys_password` 配置项一致

            ```sql
            alter user 'proxyro' identified by '*****';

            ```

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