Elasticsearch 对复杂分布式机制的透明
前面已经介绍了 Elasticsearch 是一个分布式系统, 分布式是为了应付大数据量. Elasticsearch 它实现分布式的时候就已经将所有复杂的操作自己都实现了. 比如:
分片机制
Elasticsearch 的分片机制给我们带来了什么好处? 当我们想要存储一篇文档的时候不用去手动选择应该将文档存到那个分片上面.
claster discovery 集群发现机制
集群发现机制, 它可以在我们有了多个 Elasticsearch 节点的时候自动将我们的 Elasticsearch 组成一个集群, 不用我们去配置 (前提是同一台机器上, 不同的机器需要配置 IP)
shard 负载均衡
当我们有 3 个节点需要分配 25 个 shard 的时候, Elasticsearch 会自动将这 25 个分片平均分配到每个节点上面
shard 副本
当我们新增一个索引时, 不需要去维护它的备份这些, Elasticsearch 会自动帮我们完成这些复杂的操作.
请求路由
当我们想要获取某条数据时, 并不用管到底到那个分片或者节点上面去获取, Elasticsearch 会自动将我们的请求路由到有该数据的地方.
集群扩容
当我们新启动一个节点的时候会自动加入到当前已经有了的集群里.
shard 重分配
当我们有有没有分配的 shard 的时候, 如果这个时候有了新的节点加入进来, 那么会自动分配该 shard
Elasticsearch 的垂直扩容和水平扩容
垂直扩容
我们现在有 4 台服务器, 每台服务器的容量是 1T, 最多能够存储 4T 的数据
现在的需求是要存 6T 数据, 那么我们如果采用垂直扩容的方案, 升级其中两台服务器的容量为 2T, 然后让它加入集群就可以实现了, 这是垂直扩容的解决方案.
水平扩容
水平扩容就是在原有的基础上面直接加上两台新服务器, 容量是 1T, 那么这个时候到底是使用水平扩容还是垂直扩容呢? 一般情况是是采用水平扩容, 因为水平扩容的价格更便宜.
增加或减少节点时数据的自动 rebalance
在 Elasticsearch 集群中总有一些节点会负载要重一些, 因为当我们的分片分配的时候可能不能平均分配, 某些节点需要担任更多的负载, 比如我们有 10 个分片, 但是有只有 3 台服务器, 那么就会有一台会多承担负载, 这个时候如果我们新增分片的时候, 这个分片会自动分配到负载较轻的节点上面.
ElasitcSearch 里面的 master 节点
默认情况下 Elasticsearch 中的会选择出一个 master 节点, 这个 master 节点主要管理集群的元数据, 比如说索引的创建和删除, 维护索引元数据, 节点的增加和移除, 维护集群的元数据 (元数据是指 index,type,id 这三个元数据).
节点平等的分布式架构
在 Elasticsearch 中, 所有的节点功能都是相同的也就是节点平等, 都可以进行增删改查, 比如现在有 4 个节点, user 数据存储在节点 1 上面, 我们可能直接访问到节点 1 上面获取数据, 也可能是访问到节点 2 上面, 然后节点 2 去节点 1 上面拿数据, 然后在从节点 2 返回回来.
来源: https://juejin.im/post/5c7f1fcfe51d456e24695133