---
title: OBServer 机器下线维修相关处理流程-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OBServer 机器下线维修相关处理流程相关的常见问题和使用技巧，帮助您快速解决OBServer 机器下线维修相关处理流程的难题。
---
切换语言

- 简体中文
- English

划线反馈

# OBServer 机器下线维修相关处理流程

更新时间：2026-06-04 09:56

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：TechNote  

本文适用于当 OceanBase 集群中出现机器故障，需要将故障机器临时下线进行维修的场景。

## 适用版本

OceanBase 数据库 V2.x 和 V3.x 版本。

## OBServer 机器下线维修流程

### 环境检查

1. 登录需要停机维修节点所在集群的 sys 租户。

   ```shell
   mysql -h[$OB_Host] -uroot@sys#[$集群名] -p[$pwd] -P[$port] -Doceanbase -c

   ```
 2. 检查 RS leader 所在 server，若操作机器为 RS leader，建议切换到其他 zone，再进行停机。

   ```shell
   select svr_ip,zone from __all_root_table where tenant_id=1 and role=1 group by svr_ip;

   ```
 3. RS leader 切换至其他 zone。

   ```shell
   alter tenant sys set primary_zone='[$zone_name]';

   ```
 4. 检查切换 RS leader 切换后的结果。

   ```shell
   select svr_ip,zone from __all_meta_table where tenant_id=1 and role=1 group by svr_ip;

   ```
 5. 检查停机节点是否是 leader(1=leader)，以及节点上的租户分布情况。没有租户 leader 可以直接停服务关机维修，存在租户 leader 建议将 leader 切换至其他 zone。

   ```shell
   select t.tenant_id,t.svr_ip,t.role,p.tenant_name
   from __all_virtual_meta_table t,__all_tenant p
   where t.tenant_id=p.tenant_id and t.svr_ip='[$svr_ip]'
   group by t.svr_ip,t.tenant_id asc;

   ```
 6. 查看 leader 租户当前 primary_zone 分布。

   ```shell
   select tenant_id,tenant_name,primary_zone,status from __all_tenant where tenant_name='[$tenant_name]';

   ```
 7. 业务租户 leader 切换至其他 zone。

   ```shell
   alter tenant [$tenant_name] set primary_zone = 'zone1;zone2;zone3';

   ```
 8. 检查租户 leader 切换后的结果。

   ```

### OBServer 机器下线维修

1. 停止 OBServer。

      1. 临时调整服务器永久下线时间为 5 小时，inactive 超过 1 个小时（默认参数），OceanBase 数据库会把 server 永久下线掉。

        ```shell
        alter system set server_permanent_offline_time = '18000s';

        ```

        ```shell
        show parameters like 'server_permanent_offline_time'; -- 检查修改是否成功

        ```
      2. 逻辑下线 OBServer。

        ```shell
        alter system stop server 'xx.xx.xx.xx:2882';

        ```

        若该台机器的主较多，切主时间会较长，执行超时，可通过设置参数值增加超时时间。

        语句 `set ob_query_timeout =180000000;`、`set ob_trx_timeout = 1000000000;`。
      3. 检查执行结果，确认 stop_time 非 0。

        ```shell
        select svr_ip,gmt_modified,zone,usec_to_time(start_service_time),stop_time,status from __all_server;

        ```
      4. 检查 stop server 历史记录，value1 执行结果返回 0 代表成功。

        ```shell
        select * from __all_rootservice_event_history where event like '%stop%' order by gmt_create desc limit 2\G

        ```
      5. 登录需要停机的节点进行 OBServer 进程停服。

        可能存在自启动脚本，如果杀掉后 OBServer 自启动请将自启动脚本挪走后重试。机器恢复后恢复自启动脚本位置。

        ```shell
        ll /usr/local/bin/auto_start_ob.sh
        pgrep observer|xargs kill -9 #杀掉 observer 服务
        ps -ef|grep -v grep |grep observer #检查服务

        ```
      6. 关机检修，等待机器检修完成恢复服务。

        ```shell
        shutdown -h now

        ```
      7. 机器维修完成，节点启动后检查 ntp 时间源是否正确，正确即可按照下列步骤重新恢复。若 ntp 偏差过大请拉齐时间后在进行服务恢复。

        ```shell
        ntpq -pn #查看时间同步服务器列表
        chronyc -n sources -v #查看时间同步服务器列表

        ```
 2. 启动 OBServer。

      1. 启动 observer 进程（若不需要修改配置，无需添加启动参数，默认读取上次启动的配置）。

        ```shell
        su - admin -c "cd /home/admin/oceanbase; ulimit -s 20480; ulimit -c unlimited; /home/admin/oceanbase/bin/observer"

        ```
      2. 启动后登录 sys 租户检查 server 状态。

        ```

             - `gmt_modified`：server 状态变更时间，例如：执行 stop server，改字段时间会变更为执行时间。
             - `start_service_time`：observer 进程启动 check，成功后变更为当前启动时间。
             - `status`：server 状态，需为 active。
      3. clog 同步状态检查，结果返回为空，代表已同步完成。

        ```shell
        select svr_ip, svr_port, table_id, partition_idx from __all_virtual_clog_stat where is_in_sync= 0 and is_offline = 0 and replica_type != 16

        ```
      4. 检查 table 的副本数为 3，查询结果为空，代表副本数均 3。

        ```shell
        select table_id,partition_id, count(*) as a from __all_virtual_meta_table group by table_id,partition_id having a!=3;

        ```
      5. 逻辑上线 OBServer，可提供服务。

        ```shell
        alter system start server 'xxx.xxx.xxx.xx:2882';

        ```
      6. 上线状态检查。name 字段值为 ret，value2 字段的值有返回相应的错误码；若无，代表正常执行成功了；value1 执行结果返回 0 代表成功。

        ```shell
        select * from __all_rootservice_event_history where event like '%start%' order by gmt_create desc limit 2\G

        ```
 3. 启动 obagent。

   容器或者物理机重启需检查 obagent 是否正常启动，若没有需手动启动启动命令并检查进程。

   ```shell
   cd /home/admin/obztools_agent;./ob_agent.py start agent
   ps -ef |grep ob_

   ```
 4. 启动 OBProxy。

   启动 proxy 守护进程，守护进程拉起 OBProxy。

   ```shell
   su - admin
   cd /opt/taobao/install/obproxy-1.5.5/;./bin/obproxyd.sh -c start -n obproxy_gz
   ps -ef|grep obproxy

   ```
 5. 恢复调整过的参数。

   所有机器恢复正常后，将服务器永久下线时间调回默认值。

   ```shell
   alter system set server_permanent_offline_time = '3600s';

   ```

   ```shell
   show parameters like 'server_permanent_offline_time'; # 检查修改是否成功

   ```

### 结果验证

1. 登录停机维修的节点连接数据库，验证可用。

   ```shell
   # 验证2881端口
   mysql -h127.0.0.1 -uroot@sys -p[$pwd] -P2881 -Doceanbase -c
   # 验证2883端口
   mysql -h127.0.0.1 -uroot@sys#[$集群名] -p[$pwd] -P2883 -Doceanbase -c

   ```
 2. 登录数据库验证服务状态。

   ```shell
   select svr_ip,svr_port,id,zone,inner_port,status from __all_server;

   ```

Previous

[如何启动已停止的 OceanBase 集群](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001035)

Next

[永久下线节点支持替换磁盘或者清空上线吗？](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000481552) ![有帮助](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) 咨询热线
