Elasticsearch 核心架构
本章定位:从高空俯瞰 Elasticsearch 的核心概念:Node、Index、Shard、Replica、Cluster,建立对 ES 分布式架构的全局认知。
定义与作用
Elasticsearch 的架构围绕四个核心概念展开:
- Node(节点):一个运行中的 ES 实例
- Index(索引):一组具有相似特征的文档集合(类比数据库的表)
- Shard(分片):索引的物理子集,是 ES 并行工作的最小单元
- Replica(副本):主分片的完整拷贝,提供高可用和读扩展
核心原理:节点、索引与分片的层级关系
完整示例:飞翔科技的学生数据架构
场景一:白歌设计 students 索引
白歌为飞翔科技设计学生管理系统的索引架构:
# 创建索引:3 个主分片 + 1 个副本
PUT /students
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
"province": { "type": "keyword" },
"major": { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
"score": { "type": "integer" },
"gpa": { "type": "float" },
"credits": { "type": "integer" },
"enrollment": { "type": "date" }
}
}
}
场景二:集群部署架构
# 3 节点集群配置
# node-1: Master + Data
node.roles: [master, data]
# node-2: Data Only
node.roles: [data]
# node-3: Data Only
node.roles: [data]
易错场景与面试考点
反例一:索引与数据库表的类比陷阱
❌ 错误类比:ES 的 Index = MySQL 的 Table(完全等同)
✓ 正确理解:Index 在逻辑上类似 Table(存同一类文档),但物理上被切割为多个 Shard,
每个 Shard 本质上是一个 Lucene 实例,分布在不同的 Node 上。这和 MySQL 的单表
存储引擎文件完全不同。
面试高频题
Q1:ES 中 Index、Shard、Segment 三者的关系?
Index 是逻辑概念,一个 Index 包含 1~N 个 Shard。Shard 是物理存储单元,每个 Shard 是一个 Lucene 实例。Lucene 实例内部由多个不可变的 Segment 文件组成。写入 → 先到内存 Buffer → Refresh 生成 Segment → Flush 持久化。
小结
ES 架构的四层概念:Cluster → Node → Index → Shard → Segment。节点是运行实例,索引是逻辑容器,分片是物理存储单元,副本提供冗余。下一节深入到全文搜索的基本概念。