探索ElasticSearch-ElasticSearch集群的工做原理(七)

前言

ElasticSearch为咱们提供了开箱即用的特性。咱们不用去关心底层的细节也可以正常使用ElasticSearch来为咱们服务。可是,若是要深刻理解ElasticSearch仅仅在浅层次的使用层面确定是远远不够的。若是,你不单单知足于简单使用ElasticSearch,那么推荐你继续往下面阅读。bash

经过本文,你将会解答下面这几个问题。网络

  • 新的ElasticSearch是如何加入集群的?
  • ElasticSearch集群是如何判断节点是否存活的?
  • 文档是如何分发到某一个分片上面的?

ElasticSearch集群工做原理

节点的发现

当网络中已经存在了一个ElaticSearch的集群时,启动了一个新的ElasticSearch的节点,那么此节点会自动加入到该ElasticSearch的集群中。那么,到底这个节点是怎么加入到集群的呢?函数

举个例子。如今网络中存在一个master节点和一个data节点的集群,那么当网络中再次启动一个ElasticSearch的节点时,会发生什么呢?以下图所示。性能

新启动的ElasticSearch会进行一个多播的操做。该节点会向全部在网络中的机器都发送一个ping的请求。可能大部分状况下,该机器都不是ElasticSearch的机器,此时没有相应返回。可是,当发送请求到ElasticSearchmaster节点上面时,会返回相关的响应。一但判断新的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。

相关文章
相关标签/搜索