Elasticsearch分布式原理
复杂分布式机制的透明隐藏特性
Elasticsearch 对复杂的分布式机制,比如分片,副本,负载均衡等等,全部隐藏起来了。Elasticsearch 是一套分布式的系统,分布式是为了应对大数据量隐藏了复杂的分布式机制。
分片机制(我们之前随随便便就将一些 document 插入到 es 集群中去了,我们没有 care 过数据怎么进行分片的,数据到哪个 shard 中去)
cluster discovery(集群发现机制,如果我们新启动了一个 es 进程,那个进程作为一个 node 自动就发现了集群,并且加入了进去,还接受了部分数据,replica shard)
shard 负载均衡(举例,假设现在有 3 个节点,总共有 25 个 shard 要分配到 3 个节点上去,es 会自动进行均匀分配,以保持每个节点的均衡的读写负载请求)
shard 副本,请求路由,集群扩容,shard 重分配。
垂直扩容与水平扩容
垂直扩容
采购更强大的服务器,成本非常高昂,而且会有瓶颈,假设世界上最强大的服务器容量就是 10T,但是当你的总数据量达到 5000T 的时候,你要采购多少台最强大的服务器啊。
水平扩容
业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力
扩容对应用程序的透明性
扩容对应用程序来说完全是透明的。
举例
- 6 台服务器,每台容纳 1T 数据,马上数据量要增长到 8T 数据,这时候有两个方案:
- 垂直扩容:重新购置两台服务器,每台服务器的容量是 2T,替换到老的两台服务器。那么现在 6 台服务的容量就是 8T。
- 水平扩容:新购置两台服务器,每台服务器的容量都是 1T,直接加入到集群中去,那么现在服务器的容量也是 8T。
- 一般采用水平扩容方案。
增减或减少节点时的数据rebalance
- 保持负载均衡
- 增加一个节点,可以自动为数据进行负载均衡
master节点
- master 节点不承载所有的请求,所以不会是一个单点瓶颈。
- master 节点的作用
- 创建或删除索引。
- 管理 es 的元数据,比如说索引的创建和删除,维护索引元数据。
- 增加或删除节点。
- 默认情况下,会自动选出一台节点作为 master 节点。
节点对等的分布式架构
- 节点对等,每个节点都能接收所有的请求。
- 自动请求路由
- 响应收集。
- 举例:客户端请求一条数据,发送的请求落在了 shared1 上,但数据却在 shared2 上,这时候,shared1 会把数据转发到 shared2 上,shared2 会将数据再次返回给 shared1,再由 shared1 将数据返回给客户端。