ElasticSearch
为咱们提供了开箱即用的特性。咱们不用去关心底层的细节也可以正常使用ElasticSearch
来为咱们服务。可是,若是要深刻理解ElasticSearch
仅仅在浅层次的使用层面确定是远远不够的。若是,你不单单知足于简单使用ElasticSearch
,那么推荐你继续往下面阅读。bash
经过本文,你将会解答下面这几个问题。网络
ElasticSearch
是如何加入集群的?ElasticSearch
集群是如何判断节点是否存活的?当网络中已经存在了一个ElaticSearch
的集群时,启动了一个新的ElasticSearch
的节点,那么此节点会自动加入到该ElasticSearch
的集群中。那么,到底这个节点是怎么加入到集群的呢?函数
举个例子。如今网络中存在一个master
节点和一个data
节点的集群,那么当网络中再次启动一个ElasticSearch
的节点时,会发生什么呢?以下图所示。性能
新启动的ElasticSearch
会进行一个多播的操做。该节点会向全部在网络中的机器都发送一个ping
的请求。可能大部分状况下,该机器都不是ElasticSearch
的机器,此时没有相应返回。可是,当发送请求到ElasticSearch
的master
节点上面时,会返回相关的响应。一但判断新的ElasticSearch
的集群名称是相同的时候,master
节点会记录该节点所在的机器,执行相关的数据转移。以后该节点将成为了ElasticSearch
集群的一个新的节点。ui
上面探讨的是新的ElasticSearch
节点加入时,集群工做的原理。那么若是正常工做的集群中,有节点出现宕机行为呢?ElasticSearch
的集群是怎么感知到有节点宕机,剔除损坏的节点,并且进行数据的转移的呢?spa
仍是上面这个例子,这个时候已经有三个ElasticSearch
的节点了。以下图所示。3d
由于要保证集群的正常工做,因此master
节点会按期进行探活
工做。具体为每隔一段时间就去ping
其余已知的ElaticSearch
的节点。code
若是这个时候,有一个节点宕机了,那么master
节点将没有办法收到响应。此时,master
节点将会将原来的副本分片提高为主分片。将整个集群设置为Yellow
状态。表示已经有部分数据丢失,可是当前集群仍是存在所有的数据,继续提供搜索服务,可是不保证集群的性能等指标。cdn
那么当索引一个新的文档时,ElasticSearch
是怎么将该文档分发的呢?blog
仍是上面那个例子。集群中有三个节点,并且一个索引的三个分片均匀分布在三个节点上面。此时要索引一个id
为2的新文档,那么会被路由分发到那个节点上面呢?
其实文档的分布遵循这下面这个公式。
shard_num = hash(_routing) % num_primary_shards
复制代码
那咱们假设上面新文档进行hash
以后,仍然是2,那么最后会落到shard为2的分片上面,以下图所示。
节点的发现上面讨论是默认的状况下,其实ElasticSearch
中能够配置不少其余的发现策略。文档的分发也能够经过_routing
字段来制定使用哪个值来做为hash
函数的入参。这些,下次讲解下。
之后这里天天都会写一篇文章,题材不限,内容不限,字数不限。尽可能把本身天天的思考都放入其中。
若是这篇文章给你带来了一些帮助,能够动动手指点个赞,顺便关注一波就更好了。
若是上面都没有,那么写下读完以后最想说的话?有效的反馈和你的鼓励是对我最大的帮助。
另外打算把博客给从新捡起来了。欢迎你们来访问吃西瓜。
我是shane。今天是2019年9月8日。百天写做计划的第四十六天,46/100。