Appearance
集群与分片
集群与节点
集群(Cluster) 由一个或多个 节点(Node) 组成,共同存储和检索数据。每个节点是一台运行中的 Elasticsearch 实例,通过配置相同的 cluster.name 组成同一集群。
节点角色
- 主节点(Master-eligible):参与选主,管理集群元数据(索引创建、分片分配等)。
- 数据节点(Data):存储分片数据,执行 CRUD 与搜索、聚合。
- 协调节点(Coordinating):只做请求转发与结果汇聚,不存数据(也可由数据节点兼任)。
- Ingest 节点:做预处理管道(可选)。
单机学习时通常只有一个节点,同时承担主节点和数据节点角色。
分片(Shard)详解
主分片与副本分片
- 主分片(Primary Shard):索引的数据按主分片数切分,每个主分片是独立 Lucene 索引。
- 副本分片(Replica Shard):每个主分片可有 0 个或多个副本,副本与主分片内容一致,用于高可用与读负载分担。
主分片数在创建索引时确定,之后不能修改(只能通过 Reindex 迁到新索引)。副本数可随时调整。
分片与扩展
- 数据量或写入量增大时,可通过增加节点,让分片分布到更多节点,实现水平扩展。
- 读多写少时,增加副本数可提高查询吞吐。
集群健康
查看集群健康状态:
http
GET _cluster/health返回中的 status 有三种:
| 状态 | 含义 |
|---|---|
| green | 所有主分片和副本分片都已分配且可用 |
| yellow | 所有主分片可用,但至少有一个副本未分配(常见于单节点:副本无法分配到不同节点) |
| red | 至少有一个主分片未分配,有数据不可用 |
单节点且 number_of_replicas > 0 时,副本无法分配,因此多为 yellow,属正常。生产环境多节点时,一般目标为 green。
索引设置与分片策略
创建时指定
http
PUT /my_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}- number_of_shards:主分片数,创建后不可改。
- 过少:单分片过大,不利于并行与扩展。
- 过多:元数据和调度开销大。常见做法:结合数据量和节点数,单分片几十 GB 以内较合理。
- number_of_replicas:每个主分片的副本数,可随时改。
- 单节点学习可设为 0;生产至少 1,保证高可用。
索引模板中设置
对按时间滚动的索引(如日志),可在 索引模板 里统一设置 number_of_shards 和 number_of_replicas,新索引自动套用。