---
title: 仲裁相关问题排查-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 仲裁相关问题排查相关的常见问题和使用技巧，帮助您快速解决 仲裁相关问题排查的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 仲裁相关问题排查

更新时间：2025-06-23 06:56

适用版本： V4.1.x、V4.2.x 内容类型：Troubleshoot  

OceanBase 数据库从 V4.1.x 版本开始提供仲裁高可用方案，该方案通过仲裁副本保证集群在发生网络分区或其他故障情况下继续提供服务。本文介绍仲裁服务相关的一些常见问题及排查思路。

## 仲裁副本任务管理线程相关

仲裁副本任务管理线程是启动在 SYS 或 Meta 租户 1 号日志流 Leader 上的一个高可用服务，负责添加仲裁副本、删除仲裁副本、替换仲裁副本的工作，所以首先需要确认仲裁副本任务的管理线程是否正常工作。找到当时那个时刻对应租户 1 号日志流的 Leader 节点，在该节点上的 `observer.log` 中查找 `[ARB_SERVICE]` 关键字，命令如下：

```shell
fgrep "[ARB_SERVICE] arbitration service finish one round" rootservice.log* | grep "tenant_id=$tenant_id"

```

如果没有上述日志，说明仲裁服务没有正常对外提供服务，可以考虑以下几个方面：

1. 执行如下命令，确认仲裁副本任务管理线程是否启动。

   ```shell
   fgrep "[ARB_SERVICE] ObArbitrationService init" rootservice.log* | grep "tenant_id=$tenant_id"
   fgrep "[ARB_SERVICE] ObArbitrationService start" rootservice.log* | grep "tenant_id=$tenant_id"
   fgrep "[ARB_SERVICE] ObArbitrationService destroy" rootservice.log* | grep "tenant_id=$tenant_id"

   ```
 2. 确认版本号推高到 4.1，如果没推高到 4.1，打开 trace 日志可以搜到如下日志。

   ```shell
   fgrep "arb service can not run" rootservice.log*

   ```

## 租户仲裁状态相关

### 查看租户初始仲裁状态

创建租户的时候可以指定 `enable_arbitration_service=true`或 `false`，如果不指定则默认租户是不带仲裁服务的，因此可以通过 `show create tenant` 查看租户创建的初始仲裁状态。

```shell
obclient> show create tenant mysql;
+--------+------------------------------------------------------------------------
| Tenant | Create Tenant
+--------+------------------------------------------------------------------------
| mysql  | CREATE TENANT mysql charset=utf8mb4, replica_num=2, zone_list('z1', 'z2'), primary_zone='z1;z2', locality='FULL{1}@z1, FULL{1}@z2', enable_arbitration_service=true, resource_pool_list('pool_1') |
+--------+------------------------------------------------------------------------
1 row in set (0.01 sec)

```

### 查看租户仲裁状态变化历史

其次，租户创建完成后，可以通过 `alter tenant` 语句 `enable` 或 `disable` 租户的仲裁状态，可以通过指定 module 名称 `arb_service` 查询 `DBA_OB_ROOTSERVICE_EVENT_HISTORY` 确定租户的仲裁状态变化，虽然这张表的信息可能会丢失，但一定程度上可以帮助定位某个时刻租户的仲裁状态。最准确的还是要结合具体的问题，分析相关日志来确定租户当时的仲裁状态，可联系技术支持排查。

```shell
obclient> select * from DBA_OB_ROOTSERVICE_EVENT_HISTORY where module like "%arb \G
*************************** 1. row ***************************
 gmt_create: 2022-12-27 19:21:07.064309
     module: arb_service
      event: admin_add_arbitration_service
      name1: ret
     value1: 0
      name2: arg
     value2: {arbitration_service_:"100.xx.xxx.xxx:12397"}
      name3:
     value3:
      name4:
     value4:
      name5:
     value5:
      name6:
     value6:
 extra_info:
  rs_svr_ip: 100.xx.xxx.xxx
rs_svr_port: 60000
*************************** 2. row ***************************
 gmt_create: 2022-12-27 19:22:19.950353
     module: arb_service
      event: promote_arbitration_service_status
      name1: ret
     value1: 0
      name2: tenant_id
     value2: 1002
      name3: old_status
     value3: ENABLING
      name4: new_status
     value4: ENABLED
      name5:
     value5:
      name6:
     value6:
 extra_info:
  rs_svr_ip: 100.xx.xxx.xxx
rs_svr_port: 60000
*************************** 3. row ***************************
 gmt_create: 2022-12-27 19:23:10.111505
     module: arb_service
      event: enable_tenant_arbitration_service
      name1: ret
     value1: 0
      name2: arg
     value2: tenant_name:"sys", new_status:{status:0}
      name3: current_status
     value3: DISABLED
      name4: new_status
     value4: ENABLING
      name5:
     value5:
      name6:
     value6:
 extra_info:
  rs_svr_ip: 100.xx.xxx.xxx
rs_svr_port: 60000
*************************** 4. row ***************************
 gmt_create: 2022-12-27 19:23:13.990808
     module: arb_service
      event: promote_arbitration_service_status
      name1: ret
     value1: 0
      name2: tenant_id
     value2: 1
      name3: old_status
     value3: ENABLING
      name4: new_status
     value4: ENABLED
      name5:
     value5:
      name6:
     value6:
 extra_info:
  rs_svr_ip: 100.xx.xxx.xxx
rs_svr_port: 60000
*************************** 5. row ***************************
 gmt_create: 2022-12-27 19:23:25.877721
     module: arb_service
      event: disable_tenant_arbitration_service
      name1: ret
     value1: 0
      name2: arg
     value2: tenant_name:"sys", new_status:{status:2}
      name3: current_status
     value3: ENABLED
      name4: new_status
     value4: DISABLING
      name5:
     value5:
      name6:
     value6:
 extra_info:
  rs_svr_ip: 100.xx.xxx.xxx
rs_svr_port: 60000

```

对上述的查询结果做如下说明：

- 其中 `event` 名称为 `admin_add_arbitration_service` 的记录表明，这是一个给集群添加仲裁服务地址的操作，相对应的，可能还会有 `admin_remove_arbitration_service` 和 `admin_replace_arbitration_service` 分别表示删除仲裁服务地址和替换仲裁服务地址的操作。
 - 其中 `event` 名称为 `enable_tenant_arbitration_service` 的记录表明，这是一个用户通过 `alter tenant enable arbitration service` 发起的开启租户仲裁服务的命令，同时记录了新旧仲裁服务状态。
 - 其中 `event` 名称为 `disable_tenant_arbitration_service` 的记录表明，这是一个用户通过 `alter tenant disable arbitration service` 发起的关闭租户仲裁服务的命令，同时记录了新旧仲裁服务状态。
 - 其中 `event` 名称为 `promote_arbitration_service_status` 的记录表明，这是一个系统自动推进租户仲裁状态的操作，这里只可能存在两种情况，即将 `disabling` 推成 `disabled`，或者将 `enabling` 推成 `enabled`。

## 仲裁副本任务调度

### 查看正在执行中的任务

如果发现租户的仲裁副本不符合预期，可以通过 `CDB_OB_LS_ARB_REPLICA_TASKS` 表查看是否有正在运行中的仲裁副本任务。

```shell
select * from CDB_OB_LS_ARB_REPLICA_TASKS where tenant_id = $tenant_id and ls_id = $ls_id;

```

### 查看任务执行历史

任务执行完成后就会从 `CDB_OB_LS_ARB_REPLICA_TASKS` 表中删除，并记录这次的任务到 history 表，所以可以检索 `CDB_OB_LS_ARB_REPLICA_TASK_HISTORY` 查看任务执行历史，关注其中的 `execute_result`，其中 ret 表示这次任务的执行结果，`elapsed` 表示这次任务的执行时长。如果发现某次任务执行失败了，可以拿 `trace_id` 去搜相关的日志，具体失败原因可以找技术支持排查。

```shell
obclient> select * from CDB_OB_LS_ARB_REPLICA_TASK_HISTORY \G
*************************** 1. row ***************************
              gmt_create: 2022-12-27 19:23:13.783609
            gmt_modified: 2022-12-27 19:23:13.783609
               tenant_id: 1
                   ls_id: 1
                 task_id: 1672140193665391
          execute_result: [ret:0; elapsed:113574;]
             create_time: 2022-12-27 19:23:13.668097
             finish_time: 2022-12-27 19:23:13.781671
                trace_id: YEA6064586BD4-0005F0CD6B534A62-0-0
               task_type: ADD REPLICA
     arbitration_service: 100.88.xxx.xxx:12397
arbitration_service_type: ADDR
                 comment: add arbitration replica service replica
*************************** 2. row ***************************
              gmt_create: 2022-12-27 19:23:34.112663
            gmt_modified: 2022-12-27 19:23:34.112663
               tenant_id: 1
                   ls_id: 1
                 task_id: 1672140214036627
          execute_result: [ret:0; elapsed:73896;]
             create_time: 2022-12-27 19:23:34.038993
             finish_time: 2022-12-27 19:23:34.112889
                trace_id: YEA6064586BD4-0005F0CD6B534A64-0-0
               task_type: REMOVE REPLICA
     arbitration_service: 100.xx.xxx.xxx:12397
arbitration_service_type: ADDR
                 comment: remove arbitration replica service replica
2 rows in set (0.00 sec)

```

### 查看仲裁副本任务未生成原因

可以在 rootservice 的日志中搜索 `[ARB_TASK]` 关键字，查看与仲裁副本任务相关的信息。

```shell
fgrep "[ARB_TASK]" rootservice.log*

```

下面对可能检索出来的日志做下说明：

- 如果有以下日志，说明开启了一轮任务检查，检查是否需要生成对应的任务。

  ```sql
  [ARB_TASK] check whether need to generate task

  ```
 - 如果有如下两条日志，说明检测到了需要生成补副本或者删副本的任务。

  ```sql
  [ARB_TASK] find a remove replica task to build
  [ARB_TASK] find a add replica task to build

  ```
 - 如果有以下日志，说明构建相关任务信息或者任务执行失败了。

  ```shell
  [ARB_TASK] fail to construct and execute add replica task
  [ARB_TASK] fail to construct and execute remove replica task

  ```
 - 如果有以下日志，说明切主以后，从内部表中读取的那些旧 Leader 生成并持久化的任务，已经没有再执行的必要了，比如一个补副本任务，但是租户的仲裁状态已经处于 `disabling` 了，这个补副本任务就不需要执行了。

  ```sql
  [ARB_TASK] no need to execute this task

  ```
 - 如果有以下日志，说明执行从内部表中读取的任务失败了。

  ```sql
  [ARB_TASK] fail to execute task

  ```
 - 如果有以下日志，说明相关的任务执行成功了。

  ```sql
  [ARB_TASK] success to execute a add replica task
  [ARB_TASK] success to execute a remove replica task

  ```

Previous

[备库 OBServer 日志报错：OB_SIZE_OVERFLOW，-4019](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000933518)

Next

[黑屏 Failover 过程及 Verify 预检查项拆分](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005485277) ![有帮助](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) 咨询热线
