【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】oceanbaseV4 1:1:1模式,上面有ocp的metadb,为什么关闭一台observe提示不够多数paxos节点
【问题描述】
【复现路径】问题出现前后相关操作
在 OceanBase V4(1:1:1 三 Zone 架构) 中,即使你关闭的那台 OBServer 上承载的是 OCP 的 MetaDB(通常是一个 OceanBase 的系统租户/业务租户),依旧会提示 “不够多数 Paxos 节点(quorum not enough)”。
这是 OceanBase 分布式一致性(Paxos)机制的正常表现,与 该节点承载的是 MetaDB 还是普通租户 无关。
下面把关键原因讲清楚:
为什么关闭一个 OBServer 会提示“Paxos 节点不够多数”?
在 1:1:1 模式下,一个表的 每个副本数 = 3 副本(F=2,1 备,1 冷备)
Paxos 组中:
| 副本总数 | 多数派(quorum) | 最多允许同时挂掉的节点 |
|---|---|---|
| 3 副本 | 2 副本 | 只能挂 1 副本 |
也就是说,只要有一个 Paxos 组中该节点承载副本,你关闭它,就会造成:
- 剩余 2 个副本 → 正常(还满足多数派)
- 但是 在你执行 stop server 或 shutdown 过程中,OB 会先检查:
- 副本是否能在剩余节点形成多数派?
- 是否能迁移副本?
- 是否处于租户合并、rootservice 任务等状态?
如果有以下情况,会提示 不够多数派(quorum not enough):
导致报错的常见原因
① 这个 OBSERVER 上有某些 Paxos 组的副本是 “主副本”
关闭主副本需要先切主,但如果:
- 其他节点负载高
- 领导者切换失败
- 正在合并、DDL、强一致事务中
都会提示 不满足多数派。
② MetaDB(OCP元数据库)也是一个普通租户(3 副本)
MetaDB 也是用 OceanBase 存的,有自己的 Paxos 副本。
关闭承载 MetaDB 副本的节点,就和关闭任何业务租户副本一样:
- 需要确保 MetaDB 副本在其他两个 Zone 足够健康且能形成 majority
- 如果 MetaDB 负载大、写压力大,领导者没切过去,仍会报 quorum not enough
关键点:MetaDB 没有“特殊保护”,仍是普通 Paxos 3 副本!
③ Follower lag 或副本状态异常
如果另外两个副本中:
- 有一个处于
REBUILD - 或
OFFLINE - 或
LAGGED - 或者正在 data copy / migration
那么 Paxos 真实有效的副本可能只有 1 个 →
直接导致 quorum 不足 → 拒绝关闭。
④ 你关闭的方式不正确
若用:
alter system stop server 'ip:port';
OB 会进行副本检查(quorum check),不满足条件就报错。
但若直接 OS 级别 kill:
systemctl stop observer
OB 虽然会自动重试恢复,但风险更大。
可以怎么安全关闭?
方法 1:使用 server_permanent_offline_time 避免被判永久下线
alter system set server_permanent_offline_time='4h';
让 OB 知道此节点短时间内会回来,避免 RootService 重新布局副本。
方法 2:先迁移该节点上的所有副本(最推荐)
① 禁止新建 unit / 副本
alter system stop server 'ip:port';
如果报错 → 用下一步。
② 先迁移租户 unit
alter system migrate unit = xxx to server='other_ip:port';
③ 迁移副本
alter system move replica ...
确保该节点上没有任何 Paxos 副本。
再执行:
alter system stop server ...
就不会提示 paxos majority 不足。
谢谢
积分呢