⚡ Elasticsearch 核心架构图

Cluster · Nodes · Index · Shards · Read/Write Flow

💻Client
⚖️协调节点 / VIP
🔌REST API
HTTP 9200 / TCP 9300
ES Cluster(集群)
👑 Master Node 主节点
负责集群元数据管理、节点加入/离开、分片分配决策
集群状态 分片路由表 索引元数据 选举 Raft
💾 Data Node 数据节点
存储实际数据,执行 CRUD 和搜索;包含多个分片(Shard)
Primary Shard Replica Shard Lucene 引擎 Segment 文件
🔀 Coordinating Node 协调节点
接收客户端请求,路由到对应分片,汇总结果后返回;无状态
请求分发 结果聚合 散集阶段 负载均衡
🔧 Ingest Node 摄入节点
文档预处理管道(Pipeline):解析、转换、丰富数据后再写入
Pipeline Processor Grok 解析 Enrich
🗂️ 索引(Index)与分片(Shard)
index: logs-2026  (3 主分片 × 1 副本 = 6 Shards)
P0
P1
P2
R0
R1
R2
Primary Shard(主分片)
Replica Shard(副本)
分片路由公式
shard = hash(routing) % number_of_primary_shards
routing 默认为文档 _id,可自定义
🗄️ 底层存储结构
📁
Lucene Index
每个 Shard 是一个 Lucene 索引
📄
Segment
不可变文件,定期 merge 合并
🧠
Translog
WAL 预写日志,保障数据持久
Buffer
内存缓冲区,每秒 refresh 到段
✍️ 写入流程(Index Flow)
1
Client 发送请求至协调节点
2
(可选)经 Ingest Pipeline 预处理文档
3
路由公式计算 → 转发到主分片 (Primary) 所在 Data Node
4
写入 Translog + Memory Buffer,并行同步到所有副本分片
5
所有副本 ACK 后,协调节点返回 200 OK
🔍 查询流程(Search Flow)
1
Client 发搜索请求至协调节点
2
Scatter 阶段:广播至所有相关分片(主/副均可读)
3
各分片返回 doc_id + 评分(Query Phase)
4
协调节点排序、截取 Top-K,再拉取完整文档(Fetch Phase)
5
Gather 阶段:合并结果返回 Client
📊 集群状态(Cluster State)
集群健康
🟢 Green
Master 选举
Raft / ZenDiscovery
分片分配
动态均衡
节点发现
unicast / seed_hosts
副本策略
跨节点 / 跨可用区
持久化
Translog + Segment
⚡ Elasticsearch Architecture · 后端架构师 · 2026