---
title: "停止或启动 OBServer | OceanBase 文档中心"
description: 停止或启动 OBServer 您可以根据数据库的运行情况，启动或停止 OBServer 的运行。 通过 SQL 语句停止 OBServer 停止 OBServer 主要包含以下 2 个 操作： 停止节点服务，即 Stop Server 操作 停止 observer 进程 停止节点服务 说明 停止 OBServer 服…
---
切换语言

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

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

# 停止或启动 OBServer

更新时间：2024-03-29 16:30:42

您可以根据数据库的运行情况，启动或停止 OBServer 的运行。

## 通过 SQL 语句停止 OBServer

停止 OBServer 主要包含以下 2 个 操作：

- 停止节点服务，即 Stop Server 操作
 - 停止 observer 进程

### 停止节点服务

> **说明**
>
>  
>
> 停止 OBServer 服务会将所有流量和主副本的角色切到其他 OBServer，请谨慎操作。

您可以通过对 OBServer 执行 Stop Server 操作来停止节点服务。Stop Server 操作通常是特殊运维操作时执行，例如机器硬件维修、替换和升级，或者对该 Server 进行诊断等而进行的动作。

Stop Server 操作的目的是将该 OBServer 上的分区 Leader 切到其他节点。当该 OBServer 上没有分区 Leader 的情况下，系统将内部标记 OBServer 为 `stopped` 状态，客户端请求不会再次发送到该 OBServer，该 OBServer 也不会再对外提供服务。

关于 OBServer 状态的更多说明请参见 [查看 OBServer 状态](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355935)。

Stop Server 操作的语句如下：

```sql
obclient> ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

```

该语句仅支持在 `sys` 租户中执行。

在执行 Stop Server 操作前，需要确认以下信息：

- `enable_auto_leader_switch` 参数已设置为开启状态，即 `enable_auto_leader_switch` 的值为 `True`。

  `enable_auto_leader_switch` 参数的更多说明请参见 [enable_auto_leader_switch](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355714)。
 - 分区副本满足多数派。

此外，执行 Stop Server 操作时，还需要注意以下事项：

- 不能跨 Zone 执行 Stop Server 操作，同一个 Zone 可以同时 Stop 多个 Server。
 - 一个 Stop 操作发起没有结束前，不能发起第二个操作。
 - 如果分区数多，或者被 Stop Server 的节点分区的 Leader 数量多， Stop Server 操作时间会比较长，如果超时，可以加大 SQL 超时时间。

  SQL 超时时间可通过租户变量 `ob_query_timeout` 来设置，该变量的默认值为 `10000000`，单位为微秒，具体设置方法可参见 [设置变量](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355580)。

  更多变量 `ob_query_timeout` 的介绍信息请参见 [ob_query_timeout](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000354842)。
 - 如果命令很快执行失败，那么可能是日志不同步，需要检查 `__all_rootservice_event_history` 表，确认是否有 Stop Server 的记录。如果没有记录，则说明在 RS 没执行 Stop Server 操作前就失败了；如果有记录，则说明是日志不同步导致 Stop Server 操作执行失败。

  查询示例如下：

  ```sql
  obclient> SELECT rs_svr_ip FROM oceanbase.__all_rootservice_event_history WHERE event='stop_server';
  +----------------+
  | rs_svr_ip      |
  +----------------+
  | xxx.xx.xxx.xx5 |
  | xxx.xx.xxx.xx5 |
  +----------------+
  2 rows in set

  ```
 - 执行 Stop Server 操作后，`__all_server` 内部表中该 Server 的 `status` 字段仍为 `Active` 不变，但 `stop_time` 字段的值由 `0` 变为 Stop Server 的时间点，同时 OBServer 处于 `stopped` 状态。

  更多 OBServer 状态的介绍和查看相关操作请参见 [查看 OBServer 状态](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355935)。

示例：

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 执行以下 SQL 语句，停止节点服务。

   ```sql
   obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1';

   ```

   停止节点服务后，如果该节点上有主副本，则系统会自动切换为备副本，且节点的备副本依然可以参与投票，但不会当选为主副本。节点服务停止与 OBServer 宕机性质不同，节点停止服务的时间可以超出配置项 `server_permanent_offline_time` 指定的永久下线时间且不会导致节点真的下线。

   > **说明**
   >
   >  
   >
   > 配置项 `server_permanent_offline_time` 用于设置节点心跳中断的时间阈值，即节点心跳中断多久后认为其被永久下线，永久下线的节点上的数据副本需要被自动补足。

### 停止 observer 进程

> **注意**
>
>  
>
> 停止 OBServer 进程会导致 OBServer 不可用，无法提供服务，请谨慎操作。

1. 使用 `admin` 用户登录 OBServer 节点所在的机器。
 2. 通过命令行工具进入 `/home/admin/oceanbase/bin` 目录。
 3. 运行以下命令，停止 observer 进程。

   ```shell
   kill `pidof observer`

   ```
 4. 运行以下命令，确认进程是否已停止。

   ```shell
   ps -ef | grep observer | grep -v grep

   ```

   如果命令执行后没有返回信息，则表示进程停止成功。

## 通过 OCP 停止 OBServer

您可以通过 OCP 停止 OBServer，OCP 上停止 OBServer 的操作包含了 `ALTER SYSTEM STOP SERVER` 操作和停止该 observer 进程的操作。

### 前提条件

- 待操作的集群可以在当前 OCP 中进行管理。

  如果该集群未加入到 OCP 中进行管理，请联系管理员将待操作的集群接管到当前 OCP 中，具体操作方法请参见 OCP 对应版本的《用户指南》文档中的 [接管集群](https://www.oceanbase.com/docs/enterprise-oceanbase-ocp-cn-10000000001466551)。
 - 停止 OBServer 前，请确认当前登录用户已具备集群的管理权限。

  如果当前用户没有集群管理的权限，请联系管理员为您添加相应权限的角色，具体操作方法请参见 OCP 对应版本的《用户指南》文档中的 [编辑用户](https://www.oceanbase.com/docs/enterprise-oceanbase-ocp-cn-10000000001464612)。

### 操作步骤

1. 登录 OCP。

   默认进入 **集群** 页面。
 2. 在该页面的 **集群列表** 中单击集群名，进入 **总览** 页面。
 3. 在 **OBServer 列表** 部分，单击需要停止的 OBServer 操作列的 **停止** 。

   ![09161854](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/0160562361/p327411.png)
 4. 在弹出框 **停止** ，停止 OBServer。

   您可通过弹出框中的 **查看任务** 按钮，查看停止进度。

   您也可在 **系统管理 > 任务** 中查看该任务的进度。

   当该任务状态为 **完成** ，且集群 **总览** 页的 **OBServer 列表** 中该 OBServer 的状态为 **已停止** 时，则停止成功。

## 通过 SQL 语句启动 OBServer

启动 OBServer 主要包含以下 2 个操作：

- 启动 observer 进程
 - 启动节点服务，即 Start Server 操作

### 启动 observer 进程

某些特殊情况下，您可以通过命令启动 observer 进程。

1. 使用 `admin` 用户登录 OBServer 节点所在的机器。
 2. 通过命令行工具进入 `/home/admin/oceanbase` 目录。
 3. 运行以下命令，启动 observer 进程。

   ```shell
   cd /home/admin/oceanbase

   ./bin/observer [启动参数]

   ```

   通常仅在第一次启动时，需要添加启动参数，其他时候启动时，可直接使用 `./bin/observer` 命令启动 observer 进程。同时，您还可以运行 `./bin/observer --help` 查看 observer 启动参数的详细信息。

   第一次启动 observer 进程的命令示例如下：

   ```shell
   cd /home/admin/oceanbase/bin

   ./observer -p 2881 -P 2882 -z 'zone_1' -d '/data/1/prod_data/' -r '10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881' -l WARN -o 'memory_limit=100GB,datafile_disk_percentage=85'

   ```

   其中：

      - `-p` 用于指定直连端口号，本示例中为 `2881`。
      - `-P` 用于指定 RPC 端口号，本示例中为 `2882`。
      - `-z` 用于指定待启动的 OBServer 所在的 Zone，本示例中为 `zone_1`。
      - `-d` 用于指定数据盘的存储目录，本示例中为 `/data/1/prod_data`。
      - `-r` 用于指定待启动的 OBServer 的 IP 地址列表。
      - `-l`：用于指定日志的级别，本示例中为 `WARN`，表示日志级别为 WARNING 级别。
      - `-o` 用于指定启动配置项。 使用 `-o` 参数时，需满足以下条件：

            - 不分大小写，但是推荐按照 `observer.config.bin` 中的名称来写。
            - 配置项名不能包含以下特殊字符：空格、`\r`、`\n`、`\t`
            - 配置项名和配置项值中间必须有等号（=）。
            - 配置项之间使用逗号（,）进行分割。
      - `datafile_disk_percentage=85`：表示数据盘的占用比率为 85%。
      - `memory_limit=100GB`：表示进程启动内存上限为 100 GB。
 4. 进程启动后，5~10 秒钟后，执行以下命令，确认进程是否启动成功。

      1. 执行以下命令，确认进程是否已存在。

        示例如下：

        ```shell
        [admin@xx oceanbase]#ps -ef | grep observer | grep -v grep
        root       6136      0 99 11:23 ?        00:00:19 ./bin/observer

        ```

        示例中，命令执行后有返回信息，表示进程已启动成功。如果命令执行后没有返回信息，则表示进程未启动成功。
      2. 执行以下命令，确认端口监听是否成功。

        示例如下：

        ```shell
        [admin@xxx oceanbase]#netstat -ntlp | grep `pidof observer`
        tcp        0      0 0.0.0.0:2881            0.0.0.0:*               LISTEN      6136/./bin/observer
        tcp        0      0 0.0.0.0:2882            0.0.0.0:*               LISTEN      6136/./bin/observer

        ```

        示例中，`6136/./bin/observer` 中的 `6136` 表示 observer 的进程 ID，从执行结果可知，端口监听成功。

### 启动节点服务

一般情况下，您可以通过 Start Server 操作来启动节点服务。Start Server 操作对应 Stop Server 操作。集群中的 OBServer 启动后，通常默认状态为 `started`。如果执行过 Stop Server 操作，则需要通过 Start Server 操作将 Server 状态置为 `started`。

启动节点服务的语句如下：

```sql
obclient> ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

```

示例：

1. 使用 `root`用户登录数据库的 `sys` 租户。
 2. 执行以下 SQL 语句，启动节点服务。

   ```sql
   obclient> ALTER SYSTEM START SERVER "10.10.10.1:2882";

   ```
 3. 执行以下 SQL 语句，查看节点服务是否已经正常。

   示例如下：

   ```sql
   obclient> SELECT a.zone, concat(a.svr_ip,':', a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, usec_to_time(b.stop_time) stop_time, b.build_version
   FROM oceanbase.__all_virtual_server_stat a join oceanbase.__all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
   ORDER BY a.zone, a.svr_ip\G
   *************************** 1. row ***************************
                 zone: zone1
             observer: 10.10.10.2:2882
            cpu_total: 62
             cpu_free: 55
         mem_total_gb: 50
          mem_free_gb: 20
    last_offline_time: 1970-01-01 08:00:00.000000
   start_service_time: 2021-12-03 09:54:53.237400
               status: active
            stop_time: 1970-01-01 08:00:00.000000
        build_version: 3.2.1_20211031212624-2c7eade2fd94a4ae32bec1683d1118da9d30cf8b(Oct 31 2021 22:03:03)
   *************************** 2. row ***************************
                 zone: zone2
             observer: 10.10.10.1:2882
            cpu_total: 62
             cpu_free: 55
         mem_total_gb: 50
          mem_free_gb: 20
    last_offline_time: 1970-01-01 08:00:00.000000
   start_service_time: 2021-12-08 11:24:05.281388
               status: active
            stop_time: 1970-01-01 08:00:00.000000
        build_version: 3.2.1_20211031212624-2c7eade2fd94a4ae32bec1683d1118da9d30cf8b(Oct 31 2021 22:03:03)
   2 rows in set

   ```

   其中：

      - `status`：表示节点服务的状态，一般有以下几种状态：

            - `active`：表示该 OBServer 节点为正常状态。
            - `inactive`：表示该 OBServer 节点为下线状态，集群升级过程中该值为 `inactive`。
            - `deleting`：表示该 OBServer 节点正在被删除。
      - `start_service_time`：表示节点服务时间，该时间不能是默认值 `1970-01-01 08:00:00.000000`；如果是，则表示该节点还没有完成恢复。
      - `stop_time`：表示节点停止时间，该时间应该是默认值 `1970-01-01 08:00:00.000000`，如果不是，则表示该节点被停止服务（Stop Server 操作）了，需要先启动服务（Start Server）。

## 通过 OCP 启动 OBServer

您可以通过 OCP 启动 OBServer，OCP 上启动 OBServer 的操作包含了 `ALTER SYSTEM START SERVER` 操作和启动该 observer 进程的操作。

  如果该集群未加入到 OCP 中进行管理，请联系管理员将待操作的集群接管到当前 OCP 中，具体操作方法请参见 OCP 对应版本的 《用户指南》 文档中的 [接管集群](https://www.oceanbase.com/docs/enterprise/oceanbase-ocp-cn/V3.3.3/10000000000636147)。
 - 停止 OBServer 前，请确认当前登录用户已具备集群的管理权限。

   默认进入 **集群** 页面。
 2. 在该页面的 **集群列表** 中单击集群名，进入 **总览** 页面。
 3. 在 **OBServer 列表** 部分，单击需要停止的 OBServer 操作列的 **启动** 。

   ![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.user-guide/5.basic-database-management/1.manage-clusters/5.manage-observer/%E5%90%AF%E5%8A%A8observer2.png)
 4. 在弹出框 **启动** ，启动 OBServer。

   ![2](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.user-guide/5.basic-database-management/1.manage-clusters/5.manage-observer/%E5%90%AF%E5%8A%A8observer1.png)

   ![3](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.user-guide/5.basic-database-management/1.manage-clusters/5.manage-observer/%E5%90%AF%E5%8A%A8observer2_%E6%9F%A5%E7%9C%8B%E4%BB%BB%E5%8A%A1.png)

   ![4](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V3.2.3/zh-CN/2.user-guide/5.basic-database-management/1.manage-clusters/4.manage-zones-in-a-cluster/%E6%9F%A5%E7%9C%8B%E4%BB%BB%E5%8A%A12.png)

   当该任务状态为 **完成** ，且集群 **总览** 页的 **OBServer 列表** 中该 OBServer 的状态为 **运行中** 时，则启动成功。

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