首批通过分布式安全可靠测评,为关键业务系统打造
为租户开启仲裁服务
更新时间:2026-06-20 16:09:56
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持仲裁服务功能。
您可以在创建租户时即为租户开启仲裁服务,创建租户并开启仲裁服务的相关操作请参见 创建租户。如果未开启仲裁服务,也可以待租户创建成功后,为租户开启仲裁服务。本节主要介绍如何为已有租户开启仲裁服务。
前提条件
请确认当前集群中已部署仲裁服务,部署仲裁服务的详细操作,请参见 部署两副本加仲裁服务的 OceanBase 集群。
开启仲裁服务前,需要确认待开启仲裁服务的租户的 Locality 为 2F 或 4F,当前仅支持 Locality 为 2F 或 4F 的租户开启仲裁服务。
说明
开启仲裁服务仅对租户 Locality 中的 F 副本个数有要求,对租户 Locality 中的 R 副本无限制。例如,租户的 Locality 为
F@z1,F@z2或F@z1,F@z2,R@z3均可以开启仲裁服务。
操作步骤
使用
root用户登录到集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。
执行以下命令,查看集群中各节点的联通状态。
obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.GV$OB_ARBITRATION_SERVICE_STATUS;查询结果如下。
+----------------+----------+-----------------------------+----------+ | SVR_IP | SVR_PORT | ARBITRATION_SERVICE_ADDRESS | STATUS | +----------------+----------+-----------------------------+----------+ | xx.xx.xx.197 | 2882 | xx.xx.xx.192:2882 | ACTIVE | | xx.xx.xx.194 | 2882 | xx.xx.xx.192:2882 | ACTIVE | +----------------+----------+-----------------------------+----------+ 2 rows in set根据查询结果中
STATUS字段的值来判断各节点与仲裁服务的联通状态:ACTIVE:表示仲裁服务与该节点通信正常。所有节点均通信正常才可以为租户开启仲裁服务。INACTIVE:表示仲裁服务与该节点无法通信。无法为租户开启仲裁服务,需要排查节点与仲裁服务之间的网络通信情况。
执行以下命令,查看租户的仲裁服务状态。
obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'oracle001'\G查询结果如下。
*************************** 1. row *************************** TENANT_ID: 1004 TENANT_NAME: oracle001 TENANT_TYPE: USER CREATE_TIME: 2026-01-26 19:40:21.457857 MODIFY_TIME: 2026-01-27 13:51:47.053502 PRIMARY_ZONE: zone1;zone2 LOCALITY: FULL{1}@zone1, FULL{1}@zone2 PREVIOUS_LOCALITY: NULL COMPATIBILITY_MODE: ORACLE STATUS: NORMAL IN_RECYCLEBIN: NO LOCKED: NO TENANT_ROLE: PRIMARY SWITCHOVER_STATUS: NORMAL SWITCHOVER_EPOCH: 0 SYNC_SCN: 1687845116605766616 REPLAYABLE_SCN: 1687845116605766616 READABLE_SCN: 1687845116605766616 RECOVERY_UNTIL_SCN: 4611686018427387903 LOG_MODE: NOARCHIVELOG ARBITRATION_SERVICE_STATUS: DISABLED UNIT_NUM: 1 ZONE_UNIT_NUM_LIST: zone1:1,zone2:1 COMPATIBLE: 4.6.0 MAX_LS_ID: 1002 RESTORE_DATA_MODE: NORMAL FLASHBACK_LOG_SCN: NULL COMMENT: PROTECTION_MODE: MAXIMUM PERFORMANCE PROTECTION_LEVEL: MAXIMUM PERFORMANCE 1 row in set租户的仲裁服务主要有以下几种状态:
ENABLED:表示租户已开启仲裁服务。DISABLED:表示租户已关闭仲裁服务。ENABLING:表示租户正在开启仲裁服务。DISABLING:表示租户正在关闭仲裁服务。
根据查询结果可知,
ARBITRATION_SERVICE_STATUS列为DISABLED,表示该租户已关闭仲裁服务。有关
DBA_OB_TENANTS视图的更多介绍,请参见 DBA_OB_TENANTS。执行以下命令,为租户开启仲裁服务。
语句如下:
ALTER TENANT tenant_name [SET] ENABLE_ARBITRATION_SERVICE = true;其中,
tenant_name为待开启仲裁服务的租户名;SET关键字为可选。为租户
oracle001开启仲裁服务的示例如下:obclient(root@sys)[oceanbase]> ALTER TENANT oracle001 ENABLE_ARBITRATION_SERVICE = true;命令执行成功后,再次查询
DBA_OB_TENANTS视图来确认租户的仲裁服务是否已开启。obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'oracle001'\G查询结果如下。
*************************** 1. row *************************** TENANT_ID: 1004 TENANT_NAME: oracle001 TENANT_TYPE: USER CREATE_TIME: 2026-01-26 19:40:21.457857 MODIFY_TIME: 2026-01-27 13:51:47.053502 PRIMARY_ZONE: zone1;zone2 LOCALITY: FULL{1}@zone1, FULL{1}@zone2 PREVIOUS_LOCALITY: NULL COMPATIBILITY_MODE: ORACLE STATUS: NORMAL IN_RECYCLEBIN: NO LOCKED: NO TENANT_ROLE: PRIMARY SWITCHOVER_STATUS: NORMAL SWITCHOVER_EPOCH: 0 SYNC_SCN: 1687845116605766616 REPLAYABLE_SCN: 1687845116605766616 READABLE_SCN: 1687845116605766616 RECOVERY_UNTIL_SCN: 4611686018427387903 LOG_MODE: NOARCHIVELOG ARBITRATION_SERVICE_STATUS: ENABLED UNIT_NUM: 1 ZONE_UNIT_NUM_LIST: zone1:1,zone2:1 COMPATIBLE: 4.6.0 MAX_LS_ID: 1002 RESTORE_DATA_MODE: NORMAL FLASHBACK_LOG_SCN: NULL COMMENT: PROTECTION_MODE: MAXIMUM PERFORMANCE PROTECTION_LEVEL: MAXIMUM PERFORMANCE 1 row in set根据查询结果可知,
ARBITRATION_SERVICE_STATUS列为ENABLED,表示该租户已开启仲裁服务。成功开启仲裁服务后,租户依然可能存在缺少仲裁成员的日志流,这种日志流无法正常执行升降级操作,您可以通过如下流程进行确认。
租户的仲裁服务开启成功表示该租户在开启时刻已创建的日志流均可以使用仲裁服务,但开启仲裁服务后新创建的日志流可能缺少仲裁成员,这是因为创建日志流是非严格模式执行的,不能保证仲裁成员一定会创建成功,故针对该场景,可以通过以下语句确认该租户的所有日志流是否都有仲裁成员。
语句如下:
(SELECT distinct ls_id FROM GV$OB_LOG_STAT WHERE tenant_id = tenantid) EXCEPT (SELECT ls_id FROM GV$OB_LOG_STAT WHERE tenant_id = tenantid AND role = 'LEADER' AND arbitration_member = 'arb_server_ip:arb_server_port');相关参数说明如下:
tenantid:表示开启仲裁服务的租户的租户 ID。arb_server_ip:表示仲裁服务的 IP。arb_server_port:表示仲裁服务的 RPC 端口,默认为 2882。
示例如下:
obclient(root@sys)[oceanbase]> (SELECT distinct ls_id FROM GV$OB_LOG_STAT WHERE tenant_id = 1004) EXCEPT (SELECT ls_id FROM GV$OB_LOG_STAT where tenant_id = 1004 and role = 'LEADER' and arbitration_member = '100.xx.xx.xx:2882');如果查询结果为空,则表示所有日志流都有仲裁成员,仲裁服务可用;如果查询结果不为空,此时 Root Service 会在后台为这些日志流补仲裁成员,您可以通过
CDB_OB_LS_ARB_REPLICA_TASKS视图进一步确认是否有正在执行补仲裁成员的任务,如果确认补仲裁成员的任务存在且正在执行,需要等待任务执行完成。待补仲裁成员的任务执行完成后,您可以查询
CDB_OB_LS_ARB_REPLICA_TASK_HISTORY视图确认任务的执行结果,如果任务执行成功,则表示日志流补仲裁成员成功,仲裁服务可用;如果任务执行失败,需要联系技术支持人员协助处理。有关
GV$OB_LOG_STAT视图字段的详细介绍,请参见 GV$OB_LOG_STAT。
相关文档
更多仲裁服务相关的操作,请参见以下信息: