Elasticsearch Cluster(集群) 是由一个或多个节点(Node)组成的分布式系统,共同协作以提供高性能、高可用性和可扩展性的数据存储与搜索能力。它是 Elasticsearch 分布式架构的核心。以下是其核心概念的详细阐述:
核心组成部分
-
节点(Node)
- 一个运行中的 Elasticsearch 实例,通常对应一台物理机或虚拟机。
- 角色分类:
- Master Node:负责集群管理(创建/删除索引、节点状态维护),不处理用户请求。生产环境需配置多个候选节点(
node.roles: [master])避免脑裂。 - Data Node:存储数据(分片)、执行搜索和聚合操作(
node.roles: [data])。 - Ingest Node:数据预处理(如解析、转换),再写入存储(
node.roles: [ingest])。 - Coordinating Node(默认角色):路由请求、聚合结果(所有节点均可充当)。
- Master Node:负责集群管理(创建/删除索引、节点状态维护),不处理用户请求。生产环境需配置多个候选节点(
-
索引(Index)
- 逻辑数据容器(类似数据库中的表),由多个分片(Shard) 组成。
-
分片(Shard)
- 主分片(Primary Shard):数据存储与写入的核心单元,数量在索引创建时固定。
- 副本分片(Replica Shard):主分片的拷贝,提供高可用性(节点故障时接管)和读取扩展性(并行处理查询)。
集群核心机制
-
分布式数据存储
- 数据写入时,通过路由规则(
routing)分配到特定主分片。 - 分片均匀分布在所有 Data Node 上(默认路由公式:
shard_num = hash(routing) % num_primary_shards)。
- 数据写入时,通过路由规则(
-
高可用性(HA)
- 副本机制:每个主分片有 ≥1 个副本(
index.number_of_replicas配置)。 - 故障恢复:节点宕机时,Master Node 自动将丢失的分片(主/副本)在其他节点上恢复。
- 副本机制:每个主分片有 ≥1 个副本(
-
横向扩展(Scalability)
- 增加 Data Node → 自动重平衡分片分布,提升存储与计算能力。
- 增加副本数 → 提升查询吞吐量。
-
集群状态管理
- Master Node 维护全局状态(
cluster state),包括节点拓扑、索引元数据、分片位置。 - 状态变更通过低延迟广播同步到所有节点。
- Master Node 维护全局状态(
关键工作流程
-
写入数据
- 副本写入需所有副本节点确认(通过
wait_for_active_shards控制一致性级别)。
- 副本写入需所有副本节点确认(通过
-
搜索数据
- 查询并行发往所有分片(主/副本),结果由 Coordinating Node 合并。
集群健康状态
通过 GET /_cluster/health 查看状态(关键指标):
| 颜色 | 含义 | 原因示例 |
|---|---|---|
| Green | 所有主/副本分片均可用 | 理想状态 |
| Yellow | 主分片正常,副本未分配 | 节点数 < 副本数配置 |
| Red | 部分主分片不可用 | 宕机导致数据丢失,服务降级 |
最佳实践
- 节点规划
- 分离 Master/Data 角色,避免资源竞争。
- 生产环境至少 3 个 Master 节点(奇数防止脑裂)。
- 分片设计
- 主分片数基于数据量预估(建议单个分片 ≤50GB)。
- 副本数 ≥1(高可用必备)。
- 脑裂防护
- 配置
discovery.zen.minimum_master_nodes(ES 7.x+ 自动计算)。
- 配置
- 监控告警
- 使用 Kibana 或 Prometheus 监控集群健康、节点负载、分片状态。
典型应用场景
✅ 日志分析(如 ELK Stack)
✅ 全文搜索(电商、内容平台)
✅ 实时指标分析(APM、监控数据)
✅ 安全分析(SIEM 场景)
总结:Elasticsearch 集群通过分布式节点协作、分片与副本机制,实现了海量数据的高效存储、容错与弹性扩展。正确设计集群架构与参数调优,是保障其稳定运行的关键。
907

被折叠的 条评论
为什么被折叠?



