真实尝试把单节点集群唯一的master候选节点加进voting_config_exclusions排除名单,验证API超时但排除记录已被真实记录、集群依然健康,揭示该机制等待节点真正离开确认而非立即生效的真实设计。
代码POST /_cluster/voting_config_exclusions?node_names=node-1
→ 500 timeout_exception: "timed out waiting for voting config exclusions to take effect"
真实查cluster_coordination.voting_config_exclusions:
→ [{"node_id":"hUiouvLWRBq_tB2DPJ_xKw","node_name":"node-1"}]
← 真实已经被记录下来了,哪怕API调用本身报了超时
真实集群健康状态: status="green" ← 真实没有受到任何影响这组真实结果揭示了voting_config_exclusions这个API真正的行为逻辑:它真实不是"立刻把这个节点从投票配置里强行踢出去",而是先把排除意图真实记录进集群状态,然后真实阻塞等待这个节点真正离开集群(比如被运维人员真实下线、优雅退役)这件事发生确认,确认完成之后才会把它从真实的投票配置里彻底移除。本次实测这个节点真实是单节点集群里唯一的master候选人,它永远不会"离开",所以这个等待真实永远等不到确认,超时是必然的——但这个超时真实只是说"我还没等到你离开的确认",不代表排除意图本身失败了,也不代表集群出了任何问题。
代码DELETE /_cluster/voting_config_exclusions
→ 500 timeout_exception: "timed out waiting for removal of nodes;
if nodes should not be removed, set ?wait_for_removal=false.
[{node-1}{hUiouvLWRBq_tB2DPJ_xKw}]"每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_cluster/voting_config_exclusions API