@论坛小助手 stop server操作,节点会停止心跳吗?
目前只知道status状态会变为inactive,停止对外提供服务,stop的server主副本会被切到其他observer上,还有其他什么影响吗?
根据文档库中的信息,STOP SERVER
操作会对 OceanBase 集群中的目标节点产生以下影响:
-
节点状态变化
- 执行
STOP SERVER
命令后,目标节点的状态会从ACTIVE
变为stopped
(ACTIVE
状态且stop_time
字段大于 0),最终在视图oceanbase.DBA_OB_SERVERS
中标记为INACTIVE
。 - 这一状态变化表明该节点已停止对外提供服务,并且不会接收新的业务请求。
- 执行
-
心跳机制
- 根据文档片段 4 的描述,
STOP SERVER
操作后,目标节点的心跳机制仍然存在,但其心跳数据包会被 Root Service 忽略,从而避免应用层感知到该节点的异常状态。因此,节点并不会完全停止心跳,而是被逻辑隔离。
- 根据文档片段 4 的描述,
-
主副本切换
- 在执行
STOP SERVER
操作时,目标节点上的所有 Leader 主副本会被切走,确保这些分区的主副本迁移到其他健康的节点上。这一过程是通过 Paxos 协议完成的,保证了数据一致性和高可用性。
- 在执行
-
Observer 进程是否退出
- 根据文档片段 1 和片段 2 的描述,
STOP SERVER
操作并不会直接导致 Observer 进程退出。它只是将节点标记为不可用状态,并触发主副本切换和流量隔离。如果需要完全终止 Observer 进程,可以使用其他命令(如通过obshell cluster stop
或 API 停止进程)。
- 根据文档片段 1 和片段 2 的描述,
-
其他影响
- 选举和服务优先级:当目标节点被隔离或其 Leader 出现故障时,系统会触发选举。选举服务会考虑用户指定的 Primary Zone 和机器的异常状态,选择更优的副本作为主副本。
-
副本自动补齐:如果目标节点长时间无法恢复(超过配置项
server_permanent_offline_time
的阈值),OceanBase 会将其标记为永久下线,并在其他健康节点上补齐丢失的副本(见文档片段 8)。
总结
-
Observer 进程不会因为
STOP SERVER
操作而退出,但节点会被逻辑隔离,不再对外提供服务。 - 节点的心跳机制仍然存在,但其状态会被标记为
INACTIVE
,Root Service 不再将其视为可用节点。 - 主副本会被切走,确保业务无损。
- 如果节点长期不可用,可能会触发副本自动补齐机制。
以上信息依据的是文档片段《数据库层高可用 → 隔离节点》和《重启节点 → 背景信息》中的相关内容。
检索到的文档如下:
1 个赞
根据文档库中的信息,执行 STOP SERVER
操作后,目标服务器的状态会发生如下变化:
-
状态字段的变化
在视图oceanbase.DBA_OB_SERVERS
中,目标服务器的状态会从ACTIVE
变为INACTIVE
。这是明确的文档描述(参见文档片段《检查 OBServer 状态 → 通过视图查看 OBServer 状态》)。 -
stop_time
字段的变化
在执行STOP SERVER
操作时,目标服务器会被标记为stopped
状态,其特征是:- 状态字段为
ACTIVE
,但stop_time
字段大于 0(参见文档片段《重启节点 → 背景信息》)。 - 这一状态表示服务器正在被停止的过程中,客户端不会将业务请求路由到该节点。
- 状态字段为
-
最终状态
当STOP SERVER
操作完全完成后,服务器的状态会在视图中更新为INACTIVE
,而stop_time
字段的意义不再适用(因为此时服务器已完全停止服务)。
回答您的问题
- 执行
STOP SERVER
后,__all_server
表(或等价视图oceanbase.DBA_OB_SERVERS
)中的status
字段会变为INACTIVE
。 - 在
STOP SERVER
的中间过程中,可能会短暂出现status
为ACTIVE
且stop_time > 0
的状态,但这只是过渡状态,最终会变为INACTIVE
。
以上信息依据的是文档片段《检查 OBServer 状态 → 通过视图查看 OBServer 状态》和《重启节点 → 背景信息》中的相关内容。
检索到的文档如下:
1 个赞