设计原理
状态一致性:
OceanBase 通过 STATUS 字段表示节点的逻辑状态(如 ACTIVE 表示正常运行),而通过 STOP_TIME 字段标识实际停机时间。STATUS 保持 ACTIVE 是为了避免在停机过程中出现状态不一致的情况。
STATUS 为 ACTIVE:表示节点逻辑上仍被视为集群的一部分,但实际已隔离业务流量。
STOP_TIME 非零:记录节点实际停机的时间戳,表明节点已从服务中移除。
安全隔离机制:
STOP SERVER 命令设计为安全隔离操作,确保停机后集群仍能维持高可用性。
Paxos 多数派保证:停机前会检查集群状态,确保停机后剩余节点仍能构成多数派,避免数据不一致。
后续操作安全:停机后可安全执行如 pstack、日志调整等操作,因集群状态未改变。
关键字段说明
STATUS 字段:
ACTIVE:节点逻辑状态正常,但实际已隔离。
INACTIVE:节点已下线(如通过 KILL 命令)。
DELETING:节点正在被删除。
STOP_TIME 字段:
0:节点正常运行。
非零值:记录节点停机时间戳,表示节点已从服务中移除。
多 Zone 限制:
STOP SERVER 不支持同时停机多个 Zone 的节点(报错 -4660),需确保操作符合集群拓扑。
状态验证:
可通过查询 __all_server 表验证节点状态:
SELECT * FROM oceanbase.__all_server WHERE svr_ip = ‘xxx.xxx.xxx.xxx’;
结果中 STATUS 为 ACTIVE 且 STOP_TIME 非零表示节点已安全停机。
总结
STATUS 保持 ACTIVE 是 OceanBase 的设计策略,确保停机操作的安全性和集群稳定性。实际停机状态通过 STOP_TIME 字段体现,操作后需通过查询验证节点已从服务中移除。
噢,原来如此,谢谢! ![]()
