Elasticsearch(以下简称ES)是基于Lucene构建的开源分布式搜索与分析引擎,其核心设计目标是解决海量数据的实时性、扩展性与高可用性问题。通过分布式架构,ES将数据分散存储在多个节点(Node)上,支持水平扩展(通过增加节点提升存储与计算能力),并通过副本机制保障服务可靠性。其架构可分为集群、节点、分片、索引四大核心层级,配合路由、选主、故障恢复等机制,实现高效的分布式数据处理。
节点是ES集群的基本单元,每个节点对应一个运行中的ES实例(通常部署在物理机或虚拟机上)。根据功能差异,节点分为以下类型:
node.roles: ["master"]),避免单点故障与脑裂(通过discovery.zen.minimum_master_nodes参数控制多数派,确保选主一致性)。分片是ES实现水平扩展的关键,将单个索引拆分为多个逻辑数据单元(分片),分布在不同节点上。分片分为两类:
number_of_shards: 3),决定了索引的最大容量。主分片故障时,副本分片会自动提升为主分片。number_of_replicas参数动态调整(如从1增加到2,集群性能提升约1倍)。路由规则:文档通过以下公式分配到特定主分片:
shard_num = hash(routing) % num_primary_shards
其中,routing默认为文档ID(可自定义,如用户ID),num_primary_shards为主分片数量。该公式确保文档始终路由到同一分片,避免查询时跨分片查找。
副本分片是高可用的核心保障。当主分片所在节点宕机时,主节点会触发故障恢复流程:
ping_interval,超时ping_timeout);增加数据节点时,主节点会自动重平衡分片(将分片从满负荷节点迁移到新节点),使每个节点的分片数量趋于均衡,提升集群的整体性能(如3节点集群扩展到5节点,每个节点的分片数量减少,CPU、内存压力降低)。
ES通过Translog(事务日志)+ Refresh机制实现近实时搜索(默认1秒内可查):
搜索请求由协调节点接收,流程如下:
主节点维护全局集群状态(Cluster State),包括节点拓扑、索引元数据(如分片数量、副本数)、分片位置等。状态变更通过低延迟广播同步到所有节点,确保集群一致性。
通过GET /_cluster/health命令可查看集群健康状态,关键指标包括:
ES的分布式架构通过分片、副本、路由、选主等机制,实现了高扩展性(PB级数据存储)、高可用性(节点故障自动恢复)、高性能(并行处理查询),成为海量数据搜索与分析的核心解决方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。