本机真实观察cluster state version:创建索引让version从708跳到711(一次跳3,证明内部多次独立状态更新)。集群稳定后连续写两条文档,version真实一次都没变——纠正了之前看似由文档写入引起的+1变化(实为分片分配收尾巧合),证明纯数据写入从不触碰cluster state。改集群设置version精确加1。
本机真实查到单节点node.role='cdfhilmrstw'身兼全部角色。真实配置ingest pipeline验证写入时自动加工文档,多出两个新字段。真实用_simulate预览转换效果不会真写入索引。真实故意写缺字段的文档触发脚本处理器报错,整条写入真实被完整拒绝而非静默跳过这一步。
本机真实另起独立ES进程,不设discovery.type/cluster.initial_master_nodes,用multi-node模式启动:进程不崩溃但真实永远卡住,日志写着'has not joined a bootstrapped cluster yet',HTTP端口始终连接失败(000)。加上cluster.initial_master_nodes重启后,真实8秒内成功组成单节点集群达到green——该设置只在首次引导时生效,避免脑裂风险。
本机真实把唯一master候选节点加进voting_config_exclusions,API真实超时('timed out waiting for voting config exclusions to take effect'),但排除记录已写入cluster state,集群依然green。清空排除同样超时,报错精确提示wait_for_removal=false,加上后立刻清空成功——证明该机制等待节点真正离开确认而非立即生效,超时不等于失败。
本机真实造出三个索引分别是green(不要副本)/yellow(要副本单节点放不下,50%活跃)/red(主分片用allocation.require指向不存在节点,0%活跃)。真实查整个集群_cluster/health,哪怕另外两个索引都健康,整体状态真实照样被拖到red——取的是所有索引里最差的那个,监控应同时按索引维度细分。
本机真实对red索引主分片用allocation/explain诊断,真实查出filter决策器拒绝(分配规则配置错误)。对yellow索引副本同样诊断,真实查出same_shard决策器拒绝(副本不能跟主分片同节点,是拓扑限制不是配置问题)。同样都是unassigned,这个API真实能精确区分出完全不同、可操作的修复方向,不需要靠猜测排查。
本机真实对已经started的分片用allocation/explain,正常返回can_remain_on_current_node:yes和rebalance_explanation。不带请求体且集群健康时真实400报错,懒人模式只对unassigned分片生效。加include_disk_info=true后,响应里的磁盘字节数(free_bytes约27.1GB)真实跟本机df命令精确吻合,证明查询的是实时状态而非估算值。
本机真实用cluster.routing.allocation.exclude排除唯一节点,已有分片真实完全没被赶走依然STARTED,集群green——ES优先保证数据可用不会主动驱逐。同样规则生效期间创建新索引,主分片真实直接unassigned集群变red,explain精确指出filter决策器拒绝。同一条规则对已有数据和新建分片真实表现出完全不同的严格程度。
本机真实配total_shards_per_node=1限制2分片索引,第一个分片STARTED第二个真实直接unassigned集群变red。allocation/explain真实精确指出shards_limit决策器拒绝,报错写出具体限制值。调大限制到2后,两个分片真实立刻都STARTED,不需要任何手动reroute——配置限制放宽后ES自动重新评估解开僵局。
本机磁盘用量长期94%左右,真实验证水位必须满足low≤high≤flood_stage的顺序约束;全新分片撞上high水位直接unassigned,已started的分片水位下调后不被驱逐只加read_only_allow_delete这个block;真实验证这个block连文档删除都拒绝,真正允许的delete是删除整个索引。
本机节点加上node.attr.zone属性后真实对比三种配置:不开awareness副本因same_shard而unassigned;开启非强制awareness.attributes结果跟基线一字不差;开启声明了不存在zone的forced awareness则真实多出awareness决策器,写出具体的配额计算过程,证明forced awareness是硬性限制而非强制awareness只是软性参考。
真实搭建2节点zoneA+1节点zoneB的3节点集群,验证不开awareness时主副本有真实概率被同时分到同一zone,开启非强制awareness.attributes=zone后连续测试全部实现跨区分布,并真实kill掉唯一的zoneB节点模拟可用区下线,验证集群仅降级yellow、全部主分片健在且能正常读写。