2. Elasticsearch 集群基础:节点角色、集群发现、分片与副本机制回顾
在深入跨集群联邦查询之前,必须重新夯实单集群的核心运行机制。节点角色决定了集群的职责划分,集群发现是节点间通信的基石,而分片与副本则直接决定了数据的分布、可用性与查询性能。本节将逐一回顾这些基础概念,并建立后续章节所需的统一术语体系。
2.1 节点角色与职责划分
Elasticsearch 集群中的每个节点可以承担一个或多个角色。角色决定了节点在集群中承担的任务类型。合理配置角色可以隔离资源、提升稳定性。
| 角色名称 | 配置项 | 核心职责 | 典型场景 |
|---|---|---|---|
| 主节点 (Master) | node.roles: [ master ] |
管理集群元数据、创建/删除索引、分配分片、维护集群状态 | 小集群 3 台专用主节点,避免脑裂 |
| 数据节点 (Data) | node.roles: [ data ] |
存储分片数据、执行 CRUD、搜索与聚合操作 | 承载大部分磁盘 I/O 和 CPU 负载 |
| 协调节点 (Coordinating) | node.roles: [](空列表) |
接收客户端请求、分发到数据节点、合并结果返回 | 作为负载均衡层,不存储数据 |
| Ingest 节点 | node.roles: [ ingest ] |
在索引前执行数据预处理管道(如字段转换、去重) | 日志清洗、字段标准化 |
| 机器学习节点 (ML) | node.roles: [ ml ] |
运行机器学习任务(异常检测、数据帧分析) | 需要独立计算资源的 ML 作业 |
| 远程集群客户端 (Remote Cluster Client) | cluster.remote.connect 相关配置 |
在联邦查询中扮演网关,连接远程集群 | 跨集群搜索的桥梁节点 |
生产建议: 中型以上集群(≥10 节点)应至少配置 3 台专用主节点(
node.roles: [ master ]),数据节点不参与主节点选举,协调节点独立部署以隔离查询压力。联邦查询场景下,协调节点通常也承担远程集群客户端的角色。
2.2 集群发现机制
集群发现(Discovery)是节点间相互识别、选举主节点、维护集群拓扑的核心过程。Elasticsearch 默认使用基于种子节点的发现方式。
2.2.1 发现流程
- 种子节点探测: 节点启动后读取
discovery.seed_hosts列表,尝试连接这些已知节点。 - 主节点选举: 使用 Zen Discovery 或基于协调的选举算法,从具有主节点资格的节点中选出唯一主节点。
- 集群状态同步: 主节点将集群状态(Cluster State)广播给所有节点,节点确认后加入集群。
- 故障检测: 主节点定期 ping 其他节点,若节点超时未响应,则将其标记为离线并重新分配其分片。
2.2.2 关键配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
discovery.seed_hosts |
["127.0.0.1", "[::1]"] |
种子节点地址列表,支持 IP 或主机名 |
cluster.initial_master_nodes |
空列表 | 首次启动时参与主节点选举的节点列表 |
discovery.zen.minimum_master_nodes |
1 | 防止脑裂的最小主节点数,推荐公式:(master_eligible_nodes / 2) + 1 |
discovery.zen.ping_timeout |
3s |
节点间 ping 超时时间,网络不稳定时可适当调大 |
脑裂风险: 如果
discovery.zen.minimum_master_nodes 设置过小(例如 1),网络分区时可能同时出现两个主节点,导致集群状态分裂、数据不一致。务必遵循公式计算该值。
2.3 分片与副本机制
分片(Shard)是 Elasticsearch 数据分布的最小单元,副本(Replica)是分片的冗余拷贝。理解两者的关系是优化查询性能和保障数据可靠性的前提。
2.3.1 分片类型与生命周期
- 主分片 (Primary Shard): 索引创建时指定,每个分片包含索引的一部分数据。主分片数量在索引创建后不可修改。
- 副本分片 (Replica Shard): 主分片的完整拷贝,用于提高查询吞吐量和数据容错。副本数量可以动态调整。
- 分片分配: 主节点根据节点负载、磁盘空间、分片分配策略将分片分配到数据节点。
- 分片恢复: 节点故障或加入时,主节点触发分片迁移或副本复制,确保集群达到预期副本数。
2.3.2 分片与副本的权衡
| 维度 | 主分片数多 | 副本数多 | 最佳实践 |
|---|---|---|---|
| 查询性能 | 并行度提高,但协调开销增加 | 副本可分担查询负载,提升吞吐 | 副本数通常设为 1~2,主分片数按数据量预估 |
| 写入性能 | 写入需路由到更多主分片,可能降低吞吐 | 写入完成后需同步到所有副本,增加延迟 | 写入密集场景可适当减少副本数(如设为 0 或 1) |
| 磁盘空间 | 主分片数不影响总数据量 | 副本数直接翻倍磁盘占用 | 按 总数据量 × (1 + 副本数) 规划磁盘 |
| 容错能力 | 主分片丢失需从副本恢复 | 副本数 ≥ 1 时可容忍节点故障 | 生产环境至少保留 1 个副本 |
2.3.3 分片分配感知与强制感知
Elasticsearch 支持基于节点属性的分片分配感知(Shard Allocation Awareness),确保主分片和副本分片分布在不同的物理机架、可用区或数据中心,避免单点故障。
# elasticsearch.yml 配置示例
cluster.routing.allocation.awareness.attributes: rack_id
cluster.routing.allocation.awareness.force.rack_id.values: rack1, rack2, rack3
当节点属性 rack_id 的值只有 rack1 和 rack2 时,Elasticsearch 会强制将主分片和副本分片分配到不同的机架,即使某个机架故障,数据仍然可用。
2.4 集群基础架构总览
下图展示了单集群内部节点角色、发现机制与分片副本的协作关系,为后续跨集群联邦查询的架构对比提供基准。
核心要点:
- 主节点不存储数据,只管理集群状态;数据节点不参与主节点选举,专注数据读写。
- 协调节点是联邦查询的入口,负责将跨集群请求分发到远程集群的数据节点。
- 分片分配感知是跨可用区部署的关键,联邦查询场景下需确保远程集群的节点属性一致。
- 副本数越多,查询吞吐越高,但写入延迟和磁盘开销也越大;生产环境建议至少 1 个副本。