07_手工画图剖析Elasticsearch的分布式架构图和内部运转图

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第1张图片

本文章收录于【Elasticsearch 系列】,将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解、ES调优、海量数据处理等。

目录

一、Elasticsearch对复杂分布式机制的透明隐藏特性

二、Elasticsearch的垂直扩容与水平扩容

三、增减或减少节点时的数据rebalance

四、master节点

五、节点对等的分布式架构

六、shard、replica机制梳理

七、单node环境下创建index是什么样子的呢


一、Elasticsearch对复杂分布式机制的透明隐藏特性

Elasticsearch是一套分布式的系统,分布式是为了应对大数据量,其隐藏了复杂的分布式机制。

分片机制:分布式数据存储及共享,即每个es节点只会存某一部分数据,分布在了各个shard当中。

集群发现机制(cluster discovery):当我们新启动es实例,会根据配置中的集群名称自动加入到该集群。

shard负载均衡:大量数据写入及查询,es会将数据平均分配(举例,假设现在有3个节点,总共有25个shard要分配到3个节点上去,es会自动进行均匀分配,以保持每个节点的均衡的读写负载请求)

shard副本:访问压力过大是单机无法处理所有请求的问题,Elasticsearch集群引入了副本策略replica。副本策略对index中的每个分片创建冗余的副本,处理查询时可以把这些副本当做主分片来对待(primary shard),此外副本策略提供了高可用和数据安全的保障,当分片所在的机器宕机,Elasticsearch可以使用其副本进行恢复,从而避免数据丢失。

分片(shard)与副本(replica)的数量

Elasticsearch在创建索引数据时,最好指定相关的shards数量和replicas,否则会使用服务器中的默认配置参数shards=5,replicas=1。

index.number_of_shards: 5
index.number_of_replicas: 1

对于一个索引来说,number_of_shards只能设置一次,而number_of_replicas可以使用索引更新设置API在任何时候被增加或者减少。那么如何确定分片和副本的数量呢?

依照经验,最理想的分片数量应该依赖于节点的数量。假设索引index配置了10个分片,1个副本,那么总共的分片数应该是20个,10 *(1+1),那么最大的Elasticsearch节点数应该就是20。即节点最大数 = 分片数 * (副本数 + 1)。

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第2张图片

二、Elasticsearch的垂直扩容与水平扩容

垂直扩容:采购更强大的服务器,成本非常高昂,而且会有瓶颈,假设世界上最强大的服务器容量就是10T,但是当你的总数据量达到5000T的时候,你要采购多少台最强大的服务器啊

水平扩容:业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力。

三、增减或减少节点时的数据rebalance

当新的es节点加入es时,es会自动的对原有的shard进行重新分配,确保每个节点下的shard基本一致,保持负载均衡。

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第3张图片

四、master节点

(1)管理es集群的元数据,比如创建或删除索引,维护索引的元数据,增加或删除节点,维护集群的元数据等

(2)默认情况下会自动选出一台节点作为master节点,但是master节点不承载所有的请求,所以不会是一个单点瓶颈

五、节点对等的分布式架构

(1)节点对等:每个节点都能接收所有的请求;

(2)自动请求路由:任何一个节点接收到请求后,都可以自动把这个请求路由到存有相应数据的其他节点;

(3)响应收集:原始节点(最开始接收到请求的节点)会负责从其他节点采集相应的数据返回给客户;

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第4张图片

六、shard、replica机制梳理

(1)index包含多个shard

(2)每个shard都是一个最小工作单元,承载部分数据,底层是lucene的实例,拥有完整的建立索引和处理请求的能力;

(3)增减节点时,shard会自动在nodes中负载均衡

(4)primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard

(5)replica shard是primary shard的副本,负责容错,以及承担读请求负载

(6)primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改

(7)primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard

(8)primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第5张图片

七、单node环境下创建index是什么样子的呢

(1)单node环境下,创建一个index,有3个primary shard,3个replica shard

PUT /test_index2
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

(2)集群的健康状态是yellow,因为没有其他节点作为备份

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第6张图片

(3)这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的,因为shard和replica不能放在同一个节点当中。

(4)集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求

本文中所有涉及到的手绘图地址如下,方便大家查阅以及转存

1:【腾讯文档】07_01_Es的复杂分布式机制的透明隐藏特性 腾讯文档

2:【腾讯文档】07_02_Es的垂直扩容与水平扩容、增减或减少节点时的数据rebalance 腾讯文档

3:【腾讯文档】07_03_Es的节点对等的分布式架构 腾讯文档

4:【腾讯文档】07_04_Es的shard、replica机制 腾讯文档

本系列所有的图解Elasticsearch 都在以下的文档中,我把二维码贴出来方便大家阅读以及转存

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第7张图片

< END >

本文章收录于【Elasticsearch 系列】,将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解、ES调优、海量数据处理等。

07_手工画图剖析Elasticsearch的分布式架构图和内部运转图_第8张图片

你可能感兴趣的:(分布式,java,elasticsearch,大数据,es)