observe关闭提示不够多数paxos节点

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】oceanbaseV4 1:1:1模式,上面有ocp的metadb,为什么关闭一台observe提示不够多数paxos节点
【问题描述】
【复现路径】问题出现前后相关操作

2 个赞

OceanBase V4(1:1:1 三 Zone 架构) 中,即使你关闭的那台 OBServer 上承载的是 OCP 的 MetaDB(通常是一个 OceanBase 的系统租户/业务租户),依旧会提示 “不够多数 Paxos 节点(quorum not enough)”
这是 OceanBase 分布式一致性(Paxos)机制的正常表现,与 该节点承载的是 MetaDB 还是普通租户 无关。

下面把关键原因讲清楚:

:white_check_mark: 为什么关闭一个 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)

:mag: 导致报错的常见原因

① 这个 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 虽然会自动重试恢复,但风险更大。

:wrench: 可以怎么安全关闭?

方法 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 不足。

2 个赞

谢谢

1 个赞

积分呢