Skip to content

集群与分片

集群与节点

集群(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_shardsnumber_of_replicas,新索引自动套用。