ElasticSearch分布式架构原理

 一个ES集群中有多个Server节点,每个Server节点中含有多个Index。

主节点(Master)

        主资格节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的,默认情况下任何一个集群中的节点都有可能被选为主节点,索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。 

数据节点(Server) 

        数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高, 在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点(可横向拓展)。

节点对等

        每个节点都能接受请求每个节点接收到请求后能把该请求路由到相关数据的其它节点上, 接受原始请求的节点负责采集数据并返回给客户端。

Index(索引)

        在ES中的index,可以理解为是一份数据的标识,类似于在hive中一份数据要通过一个表名来标识。

一个Index含有多个分片(shard),其中有一个 primary 主分片,负责写入,其他副本为 replica,不能写,只能同步 primary 的数据,但可以处理读请求

分片机制

        将文本数据切割成n个小文本存储在不同的节点, 减少大文件存储在单个节点上对设备带来的压力。

分片控制(路由计算)

        当索引一个文档时,我们要确定这个文档存到那个分片中,当创建一个文档的时候,也要确定这个文档应该存到那个分片中。这个确定的方法我们是通过一个公式(路由计算)来确定的:

shard = hash(routing) % number_of_primary_shards

        routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置

分片的副本

        在集群中某个节点宕机后,通过副本可以快速对缺失数据进行复盘

分片的负载均衡

        例如现在有10个分片(shard),集群中有三个节点, ES会进行均衡分配,以保持整体请求的负载均衡。增加或减少节点时会自动负载均衡(rebalance

 ES的底层是Lucene引擎,ES的每一个分片对应到底层实际上就是一个 Lucene Index包含多个 segment 文件,和一个 commit point 文件

segment

        segment 文件存储的就是一个个的 Document,是负责真正存储数据的。

commit point

        commit point 相当于一个索引文件,记录了都有哪些 segment 文件。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>