Elasticsearch集群:高可用与水平扩展的基石

单机版的Elasticsearch能处理的数据量和查询能力是有限的。当数据量达到几亿条,或者每秒查询请求超过单机承受能力时,就需要多台服务器一起工作了。

这就是集群的价值。ES从设计之初就是一个分布式系统,它天生知道怎么在多台机器上分散数据、怎么并行处理查询、怎么在一台机器宕机时保证服务不中断。

这篇文章讲清楚ES集群的核心工作机制:节点类型、分片分布、容错机制,以及如何搭建一个生产可用的集群。


一、集群的节点类型

一个ES集群由多个节点组成。节点是运行着ES进程的服务器,但不同节点扮演的角色可能不同。

主节点不负责存储数据,也不处理搜索请求,它的唯一职责是管理集群状态:创建或删除索引、跟踪有哪些节点在集群里、决定分片分配到哪个节点。主节点由集群中多个节点选举产生,当前只有一个,其他候选节点闲着备用。

数据节点是真正干活的人。它负责存储数据分片、执行数据的增删改查、处理搜索和聚合请求。数据节点是集群中最繁忙的,对CPU、内存、磁盘的要求也最高。在线上环境中,数据节点通常需要配备大内存和SSD硬盘。

协调节点是个轻量角色。它接收客户端请求,把请求转发给相关的数据节点,等所有数据节点返回结果后,合并结果再返回给客户端。默认情况下所有节点都扮演协调节点。如果集群压力特别大,可以设置专门的不存数据、不参与选举的协调节点来分担压力。

在小型集群中,一个节点可以同时承担多个角色。但在生产环境中,通常建议将角色分开------主节点只做管理,数据节点只做存储和计算,避免角色混用导致的不稳定。


二、分片与副本

分片是ES实现分布式的核心机制。

主分片是数据的物理切分。当你创建一个索引时,可以指定主分片的数量,比如设置3个主分片。ES会自动把数据分散到这些分片上,每条数据按照一定规则落在其中一个分片。主分片数量一旦确定就不能更改,因为改了之后数据重新分布的成本极高。

副本分片是主分片的完整副本,每个主分片可以有一个或多个副本。副本的作用有两个:一是高可用,主分片所在的节点宕机了,副本可以快速顶上来;二是提升读性能,读请求可以负载均衡到主分片和副本上并行执行。

副本数量可以在线动态调整。副本不能和对应的主分片在同一个节点上,否则那台机器坏了主副本一起丢。

举个例子:一个索引设置3个主分片,每个主分片配1个副本,总共需要6个分片。集群如果有3个节点,ES会把分片均匀分布,保证每个节点上都有主分片和副本分片,任何一个节点宕机都不影响数据的完整可用。


三、分片的路由机制

当客户端发来一条数据要求写入时,ES需要决定这条数据存放在哪个主分片上。这个决策由路由算法完成,核心是计算一个哈希值:

复制代码
分片编号 = hash(路由键) % 主分片数量

默认的路由键是文档的_id字段。你也可以在写入时指定自定义的路由键,比如把同一个用户的所有订单都用userId作为路由键,这些订单就会落在同一个分片上,查询时可以只扫一个分片。

路由算法的分布式特性也带来了一个问题:主分片数量一旦确定就不能修改。因为修改后取模的结果就变了,原有的数据分布在新的计算规则下全部错位,需要重新整理所有数据。这也是为什么创建索引时必须提前估算好数据量。


四、集群的容错机制

集群之所以叫集群,就是因为能容忍部分节点故障。

主节点选举是自动完成的。当前主节点因为网络故障或宕机失联后,其他有资格成为主节点的候选节点会发起选举,票数过半就能成为新主节点。整个选举过程通常在几秒到十几秒内完成。

主分片故障转移也由新的主节点自动处理。主节点发现某个节点的状态变成不可用后,会检查这个节点上有没有主分片。如果有主分片,就从该主分片的副本中挑选一个,提升为新的主分片。故障转移完成后,集群状态恢复为黄色或绿色。

数据完整性保障基于多数派。写入数据时,ES默认要求主分片写入成功,再加至少一个副本写入成功,才返回成功。这样任何单个节点故障都不会丢失已经确认写入的数据。这种设计实际上是Paxos或Raft共识算法的简化实现。


五、集群的三种健康状态

ES用三种颜色表示集群的健康状况,非常直观。

绿色意味着所有主分片和副本分片都正常分配。这是最理想的状态,任何单个节点故障都不会丢数据。

黄色意味着所有主分片都正常,但至少有一个副本分片未能分配。这种情况在小规模集群中经常出现,比如只有一台机器却设置了副本。此时集群功能完整,但如果存储主分片的节点挂了,数据可能会丢失。

红色意味着至少有一个主分片未能分配。这个索引的部分数据已经不可用,写入这个分片会失败,查询这个分片的结果也会缺失。红色状态需要立即排查。


六、生产环境集群规划

节点数量没有标准答案,3个节点是最小的高可用配置。因为主节点选举需要过半数投票,两个节点时任意一个故障,剩下的一个票数不过半无法选举,集群就不能正常工作了。

分片大小建议控制在10GB到50GB之间。分片太小会导致数量过多,每个分片都有内存开销,拖慢集群整体性能。分片太大则单个分片查询慢,故障恢复时数据传输时间长。一般建议每个分片存储不超过50GB。

主节点数量官方建议是奇数个,比如3个或5个。奇数节点在选举时更容易形成多数派,不会出现平局的情况。主节点的硬件要求不高,CPU和内存中等即可,但网络必须稳定------主节点一旦失联,整个集群会重新选举,期间服务能力下降。

部署方式推荐将候选主节点和数据节点分开部署。小规模集群可以混合部署,但大型生产环境通常准备3台专门的候选主节点,其他全部是纯数据节点。这样数据节点的负载再高也不会影响集群的管理能力。

七、总结

ES集群通过分片机制实现数据水平扩展,通过副本机制实现高可用。

  • 主节点负责管理集群,数据节点负责存储和计算

  • 分片数量创建时确定,后期无法修改

  • 副本数量动态可调,读性能随副本数线性提升

  • 3个节点是最小的高可用配置

  • 分片大小建议控制在30GB左右

集群的搭建只是第一步,真正的考验在于数据量增长后的持续运营。分片大小和数量的选择、节点角色的分离、资源的合理分配,都是在实践中慢慢摸索出来的。但有一点可以确定:用好ES集群的前提,是彻底理解分片和副本这两个核心概念。

相关推荐
运维行者_1 天前
Applications Manager中的Redis监控
大数据·服务器·数据库·人工智能·网络协议
Agent手记1 天前
跨境电商如何用AI Agent自动运营多平台店铺?企业级「龙虾」矩阵智能体全流程落地指南
大数据·人工智能·ai·矩阵
老陈头聊SEO1 天前
生成引擎优化(GEO)提升用户体验与内容创作质量的新策略
其他·搜索引擎·seo优化
天青色等烟雨..1 天前
R+VIC模型融合实践技术应用及未来气候变化模型预测
大数据·人工智能·arcgis·语言模型·数据分析
云栖梦泽在1 天前
AI安全实战:AI系统应急响应的实战演练案例
大数据·人工智能·安全
暴躁小师兄数据学院1 天前
【AI大数据工程师特训笔记】第04讲:PostgreSQL 数据库内置函数详解
大数据·数据库·笔记·ai·语言模型
无忧智库1 天前
电力行业集团数字化转型信息化战略规划方案(PPT)
大数据·人工智能
无忧智库1 天前
基于5G-A(通感一体)技术的城市低空飞行器实时航线监控底座建设方案(WORD)
大数据·人工智能·5g
ShGamu1 天前
2026上半年链条输送机厂家全流程服务与选型参考
大数据·人工智能·链条输送机
财经科技1 天前
伟淼科技发布2026年6月营销热点:消费、文化与成长的全域增长公式
大数据