---
title: "数据库层高可用 - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: 数据库层高可用 OceanBase 数据库基于高性价比的普通服务器采用 Paxos 协议，同一份数据写到多台（&gt;= 3）节点的半数以上，因此当少数派节点发生故障时不会有任何数据丢失，保证 RPO = 0；Leader 副本发生故障后，剩余的 Follower 副本能够在短时间内自动选出新 Leader 继续提供服务，…
---
切换语言

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

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

# 数据库层高可用

更新时间：2026-04-10 11:58:35

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.0/zh-CN/600.manage/400.high-availability/200.multi-replica-disaster-recovery/300.database-high-availability.md)  

OceanBase 数据库基于高性价比的普通服务器采用 Paxos 协议，同一份数据写到多台（>= 3）节点的半数以上，因此当少数派节点发生故障时不会有任何数据丢失，保证 RPO = 0；Leader 副本发生故障后，剩余的 Follower 副本能够在短时间内自动选出新 Leader 继续提供服务，无需外部介入，保证 RTO < 8 秒，从而达到强一致和高可用的平衡。用户也可以采用灵活的部署模式，例如，同城三中心、两地三中心、三地五中心等，从而达到各级无损容灾能力，例如同城容灾和异地容灾。

## Root Service

在 OceanBase 数据库中，Root Service 负责集群的节点管理，各 OBServer 通过心跳数据包（heartbeat）的方式，定期（每 2s）向 Root Service 汇报自己的进程状态，Root Service 通过监测 OBServer 的心跳数据包，来获取当前 OBServer 进程的工作状态。

OBServer 心跳状态相关的配置项如下：

- `lease_time`

  集群级配置项 `lease_time` 用于设置心跳租约时长。该配置项的默认值为 10s。有关该配置项的详细信息，参见 [lease_time](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642216)。

  当 Root Service 累计超过 `lease_time` 时间没有收到过某 OBServer 的任意心跳数据包时，Root Service 认为该 observer 进程短暂断线，Root Service 会标记该 OBServer 服务器的心跳状态为 `lease_expired`。
 - `server_permanent_offline_time`

  集群级配置项 `server_permanent_offline_time` 用于设置节点心跳中断的时间阈值，即节点心跳中断多久后认为其被永久下线，永久下线的节点上的数据副本需要被自动补足。该配置项的默认值为 3600s。有关该配置项的更多详细信息，参见 [server_permanent_offline_time](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000642326)。

  当 Root Service 累计超过 `server_permanent_offline_time` 时间没有收到过某 OBServer 的任意心跳数据包时，Root Service 认为该 observer 进程断线，Root Service 会标记该 OBServer 的心跳状态为 `permanent_offline`。

#### 说明

您可以通过 `SHOW PARAMETERS` 语句查看以上集群级配置项的值，例如，`SHOW PARAMETERS LIKE 'server_permanent_offline_time';`。

Root Service 根据心跳数据包可以获得 OBServer 如下的工作状态：

- OBServer 心跳数据包存在，心跳数据包中的 OBServer 磁盘状态正常。此种状态下，Root Service 认为 OBServer 处于正常工作状态。
 - OBServer 心跳数据包存在，心跳数据包中的 OBServer 磁盘状态异常。此种状态下，Root Service 认为 observer 进程还在，但 OBServer 磁盘故障。此种状态下，Root Service 会尝试将该 OBServer 上的全部 leader 副本切走。
 - OBServer 心跳数据包不存在，OBServer 心跳数据包的丢失时间还比较短，OBServer 心跳状态为 `lease_expired`，此种状态下，Root Service 仅将 OBServer 的工作状态设置为 inactive，不做其他处理。
 - OBServer 心跳数据包不存在，OBServer 心跳数据包丢失时间超过 `server_permanent_offline_time`，OBServer 的心跳状态为 `permanent_offline`，此种情况下，Root Service 会对该 OBServer 上的数据副本进行处理，将该 OBServer 上包含的数据副本从 Paxos 成员组中删除，并在其他可用 OBServer 上补充数据，以保证数据副本 Paxos 成员组完整。

## 隔离节点

ODP 会感知 OBServer 的异常状态，例如 stopped（`ACTIVE` 状态且 `stop_time` 字段大于 0）状态、`INACTIVE` 状态等，从而避免将应用流量路由到异常节点上。

如果某个节点不稳定，可能时不时提供服务，存在响应慢等各种不正常情况。如果客户端连接到该节点，将导致客户端感受到不稳定。OceanBase 数据库提供了 `STOP SERVER` 命令用于隔离节点。隔离后，该节点不会对外提供服务，ODP 也不会把请求路由到该节点上，可以安全的进行诊断/替换/维修等动作，是运维和应急的利器。Stop Server 会检查所有剩余副本是否满足多数派、是否日志同步，当条件不满足的时候 Stop Server 操作会返回失败；条件满足的情况下等待故障节点上的 Leader 全部切走后系统会返回成功。Stop Server 成功后保证能够做任何运维动作，包括 Kill observer 进程。Stop Server 的详细操作请参见 [隔离节点](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000639934)。

节点隔离适用于单机房故障场景：

- 非通断型故障（例如网卡丢包导致的机器不稳定）强依赖节点隔离，否则会发生反复切主而影响应用。
 - 通断型故障（例如机器直接宕机）不强依赖节点隔离，其会在 `oceanbase.DBA_OB_SERVERS` 视图标记节点状态为 `INACTIVE` 而隔离应用流量。

在节点隔离或者 Leader 出现故障时，会触发选举。选举服务的优先级机制会考虑用户指定的 Primary Zone，考虑机器的异常状态等，从而保证选择更优的副本作为主副本。

## 手动切主

除了隔离节点，您还可以主动切主，切换日志流副本的主备角色。

主动切主的操作步骤如下：

1. 使用 `root` 用户登录到集群的 `sys` 租户。

   连接示例如下，连接数据库时请以实际环境为准。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A

   ```

   有关更加详细的连接数据库的操作指引，参见 [连接数据库概述（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640069) 和 [连接数据库概述（Oracle 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000640028)。
 2. 获取租户的 Zone、Server 及日志流副本信息。

   ```shell
   obcllient [(none)]> SELECT a.TENANT_ID,a.LS_ID,a.SVR_IP,a.SVR_PORT,a.ZONE,a.role,b.TENANT_NAME,b.TENANT_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS a, oceanbase.DBA_OB_TENANTS b WHERE a.TENANT_ID=b.TENANT_ID;
   +-----------+-------+----------------+----------+-------+----------+-------------+-------------+
   | TENANT_ID | LS_ID | SVR_IP         | SVR_PORT | ZONE  | role     | TENANT_NAME | TENANT_TYPE |
   +-----------+-------+----------------+----------+-------+----------+-------------+-------------+
   |         1 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | sys         | SYS         |
   |         1 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | sys         | SYS         |
   |         1 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | sys         | SYS         |
   |      1001 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | META$1002   | META        |
   |      1001 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | META$1002   | META        |
   |      1001 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | META$1002   | META        |
   |      1002 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | mysql001    | USER        |
   |      1002 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | mysql001    | USER        |
   |      1002 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | mysql001    | USER        |
   |      1002 |  1001 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | mysql001    | USER        |
   |      1002 |  1001 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | mysql001    | USER        |
   |      1002 |  1001 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | mysql001    | USER        |
   |      1009 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | META$1010   | META        |
   |      1009 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | META$1010   | META        |
   |      1009 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | META$1010   | META        |
   |      1010 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | oracle001   | USER        |
   |      1010 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | oracle001   | USER        |
   |      1010 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | oracle001   | USER        |
   |      1010 |  1001 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | oracle001   | USER        |
   |      1010 |  1001 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | oracle001   | USER        |
   |      1010 |  1001 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | oracle001   | USER        |
   |      1035 |     1 | xx.xx.xx.218   |     2882 | zone3 | FOLLOWER | META$1036   | META        |
   |      1035 |     1 | xx.xx.xx.237   |     2882 | zone1 | LEADER   | META$1036   | META        |
   |      1035 |     1 | xx.xx.xx.238   |     2882 | zone2 | FOLLOWER | META$1036   | META        |
   +-----------+-------+----------------+----------+-------+----------+-------------+-------------+
   24 rows in set

   ```

   有关 `CDB_OB_LS_LOCATIONS` 视图的更多信息，参见 [CDB_OB_LS_LOCATIONS](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000641337)。
 3. 执行以下命令切主。

   ```sql
   ALTER SYSTEM SWITCH REPLICA role LS [=] ls_id SERVER [=] 'ip:port' TENANT = tenant_name;

   ```

   相关参数说明如下：

      - `role`：副本角色，用于指定日志流副本的角色为 LEADER 或 FOLLOWER。
      - `ls_id`：待修改的日志流副本的 ID。
      - `ip:port`：待修改的日志流副本所在主机的 IP 和 RPC 端口。
      - `tenant_name`：待修改的日志流副本所属的租户。

   示例如下：

   ```shell
   obclient [(none)]> ALTER SYSTEM SWITCH REPLICA LEADER LS = 1001 SERVER = 'xx.xx.xx.218:2882' TENANT = oracle001;

   ```
 4. 操作结束后，可以再次查询视图，确认副本角色是否修改成功。

   ```shell
   obclient [(none)]> SELECT * FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1010;
   +----------------------------+----------------------------+-----------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+
   | CREATE_TIME                | MODIFY_TIME                | TENANT_ID | LS_ID | SVR_IP         | SVR_PORT | SQL_PORT | ZONE  | ROLE     | MEMBER_LIST                                                       | PAXOS_REPLICA_NUMBER | REPLICA_TYPE |
   +----------------------------+----------------------------+-----------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+
   | 2022-12-26 18:28:49.389751 | 2023-01-11 12:02:38.275763 |      1010 |     1 | xx.xx.xx.218   |     2882 |     2881 | zone3 | FOLLOWER | NULL                                                              |                 NULL | FULL         |
   | 2022-12-26 18:28:49.389601 | 2022-12-26 18:28:54.441143 |      1010 |     1 | xx.xx.xx.237   |     2882 |     2881 | zone1 | LEADER   | xx.xx.xx.218:2882:1,xx.xx.xx.237:2882:1,xx.xx.xx.238:2882:1       |                    3 | FULL         |
   | 2022-12-26 18:28:49.390567 | 2023-01-11 12:02:37.970540 |      1010 |     1 | xx.xx.xx.238   |     2882 |     2881 | zone2 | FOLLOWER | NULL                                                              |                 NULL | FULL         |
   | 2022-12-26 18:29:01.334732 | 2023-01-11 11:59:31.899581 |      1010 |  1001 | xx.xx.xx.218   |     2882 |     2881 | zone3 | LEADER   | xx.xx.xx.218:2882:1,xx.xx.xx.237:2882:1,xx.xx.xx.238:2882:1       |                    3 | FULL         |
   | 2022-12-26 18:29:01.335629 | 2023-01-11 12:02:37.709677 |      1010 |  1001 | xx.xx.xx.237   |     2882 |     2881 | zone1 | FOLLOWER | NULL                                                              |                 NULL | FULL         |
   | 2022-12-26 18:29:01.335822 | 2023-01-11 12:02:37.970540 |      1010 |  1001 | xx.xx.xx.238   |     2882 |     2881 | zone2 | FOLLOWER | NULL                                                              |                 NULL | FULL         |
   +----------------------------+----------------------------+-----------+-------+----------------+----------+----------+-------+----------+-------------------------------------------------------------------+----------------------+--------------+
   6 rows in set

   ```

主动切主适用于机房容灾和城市容灾场景，您可以将 Leader 切换到指定的 Zone 或者 Region，从而更加契合应用流量的分布。

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