文章目录
关于ES的分布式解释部分,《Elasticsearch 权威指南》这本书中讲解的非常好,建议参看本书的第二章。
官网不好打开的,可以下载中文版:
中文的pdf版本:
链接: https://pan.baidu.com/s/1jJzRoAvLJlnpmDR9hbZiVw
提取码: b3ax
1、Elasticsearch对复杂分布式机制的透明隐藏特性
分片机制
ES为每个index自动分为不同的shard(也就是分片),默认是5个primary shard,每个primary shard默认有一个replica shard。
index一旦创建,primary shard数量就确定了,不能更改,但replica shard数量可以增减。
分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。
分片可以是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每个文档属
于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
cluster discovery(集群发现机制)
假设我们给一个索引只分配3个主分片和一个复制分片(每个主分片都有一个复制分片)
当集群中只有一个节点时:
索引的三个primary shard,都会分配到这个节点上,但不会分配replica shard,且当前集群的状态为yellow,如下图所示:
第二台节点启动时,启动第二个节点不需要修改任何配置,只需要在同一个局域网内,则第二个节点会自动加入集群中。使得集群变为双节点,且该索引的所有primary shard会分配到一个replica shard,此时,集群的状态变为green,如下图所示:
这个过程,新加节点加入集群的过程,是ES自动控制的,叫做集群发现。
shard负载均衡,集群扩容,shard重分配
举例,假设现在有3个节点,总共有25个shard要分配到3个节点上去,es会自动进行均匀分配,以保持每个节点的均衡的读写负载请求。
如上例子,当前两个几点,每个节点上有三个shard,如果再加一个节点,还是6个shard,则ES会自动调整shard,使得每个节点的负载均衡。
2、Elasticsearch的垂直扩容与水平扩容
垂直扩容:采购更强大的服务器,替换旧的服务器。
缺点:成本非常高昂,而且会有瓶颈,假设世界上最强大的服务器容量就是10T,但是当你的总数据量达到5000T的时候,你要采购多少台最强大的服务器啊
水平扩容:采购当前节点性能一样的服务器,加入到集群中。
业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力
如何超出扩容极限,以及如何提升容错性
(1)primary&replica自动负载均衡,6个shard,3 primary,3 replica
(2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好
(3)扩容的极限,6个shard(3 primary,3 replica),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好
(4)超出扩容极限,动态修改replica数量,9个shard(3primary,6 replica),扩容到9台机器,比3台机器时,拥有3倍的读吞吐量
(5)3台机器下,9个shard(3 primary,6 replica),资源更少,但是容错性更好,最多容纳2台机器宕机,6个shard只能容纳0台机器宕机
(6)这里的这些知识点,你综合起来看,就是说,一方面告诉你扩容的原理,怎么扩容,怎么提升系统整体吞吐量;另一方面要考虑到系统的容错性,怎么保证提高容错性,让尽可能多的服务器宕机,保证数据不丢失
3、节点对等的分布式架构
(1)节点对等,每个节点都能接收所有的请求
(2)自动请求路由
(3)响应收集
4、容错:master选举,replica容错,数据恢复
假设有3台机器,9个shard,那么每个机器上都有一个primary shard和两个replica shard,并且这两个replica shard属于另外两个primary shard。其中有一台机器是master。
master故障的一瞬间,其上的primary shard丢失,那么集群中就不是所有的primary shard都是active的了,集群状态变为red,下面的流程就会发生:
一 master选举,自动选举另外一个node成为新的master,承担起master的责任。
二 新master将丢失的primary shard对应的某个replica shard升级为primary shard,此时集群中所有primary shard都是active的了,但是每个primaryshard都少了一个replica shard,所以集群状态变为yellow。
三 重启故障的node,第二步选举的master会将缺失的副本拷贝一份到该node上去,并且该node会使用之前已有的数据,只是同步一下故障之后发生过的修改。集群状态变为green。
参考文档: https://blog.csdn.net/qq1300375795/article/details/79605206
个人思考疑问:
1、当有多个node时,选举算法是什么?
2、重启故障的node,那么同步增量,是如何标记的?