资讯动态

OceanBase 可用区和节点的管理

发布时间:2026/8/5 9:06:19 来源:尧图企业网站定制
OceanBase 集群由若干个 Zone 组成。从物理层面来讲一个 Zone 通常是一个独立的物理部署单元可以是一个数据中心IDC或者云上的一个Zone可用区也可以是一个单独的机架Rack。1. zone 的状态管理1.1 zone 的状态查看通过查询 DBA_OB_ZONES 视图获取 zone 的状态obclient(rootsys)[oceanbase] SELECT * FROM DBA_OB_ZONES; -------------------------------------------------------------------------------------------------------------- | ZONE | CREATE_TIME | MODIFY_TIME | STATUS | IDC | REGION | TYPE | -------------------------------------------------------------------------------------------------------------- | zone1 | 2026-08-01 14:46:05.704904 | 2026-08-01 14:47:11.744709 | ACTIVE | default_idc | deault_region | ReadWrite | | zone2 | 2026-08-01 14:46:05.704904 | 2026-08-01 14:47:11.764566 | ACTIVE | default_idc | deault_region | ReadWrite | | zone3 | 2026-08-01 14:46:05.704904 | 2026-08-01 14:47:11.787405 | ACTIVE | default_idc | deault_region | ReadWrite | -------------------------------------------------------------------------------------------------------------- 3 rows in set (0.013 sec)其他字段容易理解这里解释一下 TYPE 字段分为ReadWrite 标准的读写型 Zone。它拥有完整的数据副本包含 Paxos 内存日志和持久化数据既能参与 Paxos 投票也能处理业务的读写请求。ReadOnly只读型 Zone。不参与 Paxos 投票仅同步数据供只读业务查询。1.2 zone 的运维可用区的运维通常包括 Zone 的停止与启动Zone 的属性修改以及添加、删除 Zone。STOP ZONE (停止可用区)说明停止 Zone 内所有 OBServer 节点的服务其执行逻辑与 Stop Server 类似。语法ALTER SYSTEM STOP ZONE zone_name;START ZONE (启动可用区)说明启动 Zone 内所有 OBServer 节点的服务其执行逻辑与 Start Server 类似。语法ALTER SYSTEM START ZONE zone_name;ALTER ZONE (修改可用区属性)说明修改 Zone 所属的 Region 及 IDC 信息。语法ALTER SYSTEM ALTER ZONE zone_name SET [IDC []idc_name, REGION []region_name];ADD ZONE (添加可用区)说明添加 Zone 通常用于集群的扩容场景中添加 Zone 之后还要添加 OBServer 节点。语法ALTER SYSTEM ADD ZONE zone_name [IDC [] idc_name, REGION [] region_name];DELETE ZONE (删除可用区)说明删除 Zone 通常用于集群缩容的场景中删除 Zone 的前提是Zone 内的 OBServer 节点已经全部删除。语法ALTER SYSTEM DELETE ZONE zone_name [IDC [] idc_name, REGION [] region_name];2. OBServer 的状态管理2.1 查询节点状态通过查询 DBA_OB_SERVERS 视图获取 OBServer 的状态之前我们介绍过 GV$OB_SERVERS 视图前者是数据库管理员视图记录的是节点状态变化过程后者是Global View全局动态性能视图记录的更多的是资源。obclient(rootsys)[oceanbase] SELECT ZONE, SVR_IP, SVR_PORT, SQL_PORT, WITH_ROOTSERVER, STATUS, START_SERVICE_TIME, STOP_TIME, LAST_OFFLINE_TIME FROM oceanbase.DBA_OB_SERVERS; ------------------------------------------------------------------------------------------------------------------------------ | ZONE | SVR_IP | SVR_PORT | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | LAST_OFFLINE_TIME | ------------------------------------------------------------------------------------------------------------------------------ | zone1 | 192.168.182.21 | 2882 | 2881 | YES | ACTIVE | 2026-08-03 08:22:42.996496 | NULL | NULL | | zone2 | 192.168.182.22 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:24:42.536593 | NULL | NULL | | zone3 | 192.168.182.23 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:25:48.979806 | NULL | NULL | ------------------------------------------------------------------------------------------------------------------------------ 3 rows in set (0.001 sec)字段解释ZONE描述OBServer 节点所属的 ZoneSVR_IP描述服务器 IP 地址WITH_ROOTSERVER描述Root Service Leader 所在的机器 如果是 Yes表明是 LeaderSTATUS描述节点状态状态枚举ACTIVE节点心跳状态正常对应的是 OBServer 进程状态INACTIVE节点心跳状态异常DELETING节点正在删除中START_SERVICE_TIME描述节点启动后开始对外服务的时间点取值说明NULL节点未启动或状态不可用有效值节点开始对外服务的时间STOP_TIME描述节点停止服务的时间点取值说明NULL节点没有被 Stop有效值节点被 Stop 的时间LAST_OFFLINE_TIME描述OBServer 节点上次下线的时间取值说明NULL节点没有下线过有效值节点的上次下线时间2.2 重启节点重启是常见运维动作之一适用于对机器进行短暂维修以及修改系统配置项后需要重启生效的场景。重启节点从 OceanBase 层面包括Stop Server与Start Server的过程在操作系统层面还包括observer进程的重启。1STOP SERVER (停止节点服务)核心逻辑Leader 切走将待重启节点上的 Leader 全部切走并保证除了重启节点以外的其他节点上的副本满足多数派。状态标记当 OBServer 停止完成后Root Service 将节点标记为服务停止状态。此时DBA_OB_SERVERS视图的状态标识为STATUSACTIVE, STOP_TIME0。请求切走OBProxy 识别 OBServer 的状态为停止后不会将业务请求路由到该节点。obclient(rootsys)[oceanbase] alter system stop server 192.168.182.23:2882; obclient(rootsys)[oceanbase] SELECT ZONE, SVR_IP, SVR_PORT, SQL_PORT, WITH_ROOTSERVER, STATUS, START_SERVICE_TIME, STOP_TIME, LAST_OFFLINE_TIME FROM oceanbase.DBA_OB_SERVERS; ----------------------------------------------------------------------------------------------------------------------------------------------- | ZONE | SVR_IP | SVR_PORT | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | LAST_OFFLINE_TIME | ----------------------------------------------------------------------------------------------------------------------------------------------- | zone1 | 192.168.182.21 | 2882 | 2881 | YES | ACTIVE | 2026-08-03 08:22:42.996496 | NULL | NULL | | zone2 | 192.168.182.22 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:24:42.536593 | NULL | NULL | | zone3 | 192.168.182.23 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:25:48.979806 | 2026-08-03 11:04:11.726478 | NULL | ----------------------------------------------------------------------------------------------------------------------------------------------- 3 rows in set (0.001 sec) -- stop server 之后发现仍是 ACTIVE 状态并且进程仍然存在。 [rootoceanbase3 log]# ps -ef|grep observer admin 2953 1 90 08:22 ? 02:29:26 /home/admin/observer/bin/observer -p 2881 admin 3581 1 0 08:23 ? 00:00:03 /home/admin/observer/bin/obshell daemon --ip 192.168.182.23 --port 2886 admin 3614 3581 0 08:24 ? 00:00:21 /home/admin/observer/bin/obshell server --ip 192.168.182.23 --port 2886 root 51356 1808 0 11:08 pts/0 00:00:00 grep --colorauto observer -- 手动 kill 进程 [rootoceanbase3 log]# kill -9 2953 -- 节点状态变成 INACTIVE LAST_OFFLINE_TIME 更新为进程停掉的时间 obclient(rootsys)[oceanbase] SELECT ZONE, SVR_IP, SVR_PORT, SQL_PORT, WITH_ROOTSERVER, STATUS, START_SERVICE_TIME, STOP_TIME, LAST_OFFLINE_TIME FROM oceanbase.DBA_OB_SERVERS; ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ZONE | SVR_IP | SVR_PORT | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | LAST_OFFLINE_TIME | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | zone1 | 192.168.182.21 | 2882 | 2881 | YES | ACTIVE | 2026-08-03 08:22:42.996496 | NULL | NULL | | zone2 | 192.168.182.22 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:24:42.536593 | NULL | NULL | | zone3 | 192.168.182.23 | 2882 | 2881 | NO | INACTIVE | NULL | 2026-08-03 11:04:11.726478 | 2026-08-03 11:12:16.881884 | ---------------------------------------------------------------------------------------------------------------------------------------------------------- 3 rows in set (0.000 sec)2START SERVER (启动节点服务)核心逻辑数据同步将 Clog 或者基线数据与其他副本进行同步补齐并将上一次合并之后的内存数据恢复出来clog 回放。负载均衡Root Service 调度负载均衡来完成 Leader 切回等任务。状态标记当 OBServer 启动完成后Root Service 将节点标记为可服务状态。此时DBA_OB_SERVERS视图的状态标识为STATUSACTIVE, STOP_TIME IS NULL, START_SERVICE_TIME0。请求切回OBProxy 识别 OBServer 的状态为可服务状态后会将相应的业务请求路由到该节点上。-- 手动启动刚刚停掉的 OBServer 进程 [rootoceanbase1 etc]# obd cluster start obcluster -s 192.168.182.23 Get local repositories ok Load cluster param plugin ok Cluster status check ok cluster scenario: htap Start observer ok observer program health check ok Connect to observer 192.168.182.21:2881 ok obshell start ok obshell program health check ok start obproxy ok obproxy program health check ok Connect to obproxy ok Connect to observer 192.168.182.21:2881 ok Wait for observer init ok -- 查看状态变成 ACTIVE同时 START_SERVICE_TIME 更新为启动时间LAST_OFFLINE_TIME 置为 NULL obclient(rootsys)[oceanbase] SELECT ZONE, SVR_IP, SVR_PORT, SQL_PORT, WITH_ROOTSERVER, STATUS, START_SERVICE_TIME, STOP_TIME, LAST_OFFLINE_TIME FROM oceanbase.DBA_OB_SERVERS; ----------------------------------------------------------------------------------------------------------------------------------------------- | ZONE | SVR_IP | SVR_PORT | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | LAST_OFFLINE_TIME | ----------------------------------------------------------------------------------------------------------------------------------------------- | zone1 | 192.168.182.21 | 2882 | 2881 | YES | ACTIVE | 2026-08-03 08:22:42.996496 | NULL | NULL | | zone2 | 192.168.182.22 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 08:24:42.536593 | NULL | NULL | | zone3 | 192.168.182.23 | 2882 | 2881 | NO | ACTIVE | 2026-08-03 11:15:59.308062 | 2026-08-03 11:04:11.726478 | NULL | ----------------------------------------------------------------------------------------------------------------------------------------------- 3 rows in set (0.001 sec)因此重启节点的主要流程为停止服务-转储-关闭进程-启动进程-启动服务。-- 1. 使用 root 用户登录到集群的 SYS 租户 -- 2. 停止服务Stop Server ALTER SYSTEM STOP SERVER 192.168.182.23:2882; -- 3. 对待重启的节点进行转储操作以便缩短重启后回放 Redo Log 的时间加速重启 ALTER SYSTEM MINOR FREEZE SERVER (192.168.182.23:2882); -- 4. 在操作系统中使用 admin 用户停止 observer 进程 kill -9 $(pidof observer) -- 5. 在操作系统中使用 admin 用户启动 observer 进程 obd cluster start obcluster -s 192.168.182.23 --或者以 admin 用户 执行如果进入 bin 目录 执行 ./observer 会报错并且会把 log run etc audit 等目录放在 bin 目录下正常是在 oceanbase 目录(上层目录) cd /home/admin/oceanbase ./bin/observer -- 6. 启动服务 ALTER SYSTEM START SERVER 192.168.182.23:2882;重启过程中节点的下线时间需要在配置项server_permanent_offline_time设置的时间以内否则会被永久下线。集群核心参数server_permanent_offline_time的作用如下定义集群级配置项用于设置节点心跳中断的时间阈值。即节点心跳中断多久后系统认为其已被永久下线。永久下线的后果意味着节点上的副本从 Paxos Group 中剔除数据宣告失效。当该节点再次上线时OceanBase 数据库需要进行节点上的数据副本重建通常是一个比较耗时的操作。参数基础属性参数类型时间类型默认值3600 s1 小时取值范围[20s, ∞)是否重启 OBServer 节点生效否即时动态生效不同运维场景下的建议值版本升级场景建议将该配置项的值设置为72h。硬件更换场景建议将该配置项的值设置为4h。清空上线场景建议将该配置项的值设置为10m使集群快速上线。2.3 添加节点定义为指定 Zone 内添加新的 OBServer 节点从而可以执行后续的迁移 Unit、调整租户的UNIT_NUM、新建租户等扩容操作。前提条件待添加的 OBServer 服务器按照 OceanBase 的部署要求进行相应的配置并完成安装 OceanBase 数据库软件。待添加的 OBServer 服务器上已启动observer进程。执行命令ALTER SYSTEM ADD SERVER svr_ip:svr_port [, svr_ip:svr_port ...] [ZONE [] zone_name];2.4 删除节点定义删除指定的 OBServer 节点通常用于集群缩容或者故障节点替换。底层资源迁移逻辑Delete Server操作涉及到负载均衡。被删除的节点上的资源单元称为 Unit会在同一个 Zone 中进行迁移。待 Unit 迁移成功后Delete Server操作即可执行成功。迁移触发机制Unit 的迁移动作是 Unit 自动均衡的过程主要由Root Service控制。手动干预如果你想要选择待删除节点上 Unit 迁移的目标机器也可以手动执行 Unit 迁移。执行命令ALTER SYSTEM DELETE SERVER svr_ip:svr_port [, svr_ip:svr_port ...] [ZONE [] zone_name];2.5 替换节点替换节点适用于硬件故障场景、容量场景不同规格机器替换替换后集群的节点数量不变。替换节点是一套运维操作的组合即先添加新节点 并迁移副本然后再删除旧节点整体时间较长。登录集群操作使用root用户登录到集群的SYS租户。添加新节点操作在待替换节点所在的 Zone 上添加新节点例如10.xx.xx.11。执行命令ALTER SYSTEM ADD SERVER 10.xx.xx.11:2882 ZONE zone1;查询旧节点上的 Unit操作通过DBA_OB_UNITS视图查询旧节点例如10.xx.xx.10上的 Unit。执行命令SELECT UNIT_ID FROM oceanbase.DBA_OB_UNITS WHERE SVR_IP 10.xx.xx.10;执行 MIGRATE UNIT 命令迁移 Unit执行命令以查到UNIT_ID为1016为例:ALTER SYSTEM MIGRATE UNIT 1016 DESTINATION 10.xx.xx.11:2882;⚠️ 注意事项每次仅可迁移一个 Unit。如果旧节点上有多个 Unit则需多次执行该命令。删除旧节点操作等待旧节点上的所有 Unit 迁移完成后将旧节点删除。执行命令ALTER SYSTEM DELETE SERVER 10.xx.xx.10:2882 zonezone1;确认删除结果操作查询DBA_OB_SERVERS视图确认旧节点是否删除成功。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价