ElasticSearch中如何分布式存储数据 #W07

本篇文章,我们来总结一下,在宏观上,ES中的数据是如何分布的,为什么能便捷地进行扩容。

宏观结构

1 集群cluster

集群这个概念从业务层面来看,是聚合了某方面功能的节点的组合,一般由单个或多个节点组成。在ES中,具有相同的cluster.name的节点就为同一个集群, 一个集群就是由一个或多个拥有相同cluster.name的节点组成。

集群也是ES中最顶层的对象,在同一个集群中,ES会将数据均匀地分散到集群中的各个节点,每当由新的节点加入或者删除时,集群会在节点间重新均匀地分配数据,以达到分布式储存的目的。

集群是由节点组成的。

2 节点

一个运行中的ES实例被成为一个节点,一个或多个节点(ES实例)则组成一个集群。

每个集群中会有主节点,ES会自动进行主节点选举,对用户透明。主节点的主要职责是管理集群范围內的数据变更,包括索引的增加/删除 ,节点的增加/删除,监控节点的状态等。并不负责具体的细节变更,比如文档级别的变更或搜索。所以它的工作负荷相对其他节点而言较轻,当集群流量增加时,它不会成为瓶颈。

当集群中有多个节点时,除主节点外,其他为从节点。各个节点能均匀地分摊集群的负载,实现负载均衡,以及数据冗余备份,当某个节点因为硬件故障丢失数据时,其他节点存放的冗余数据可以保证整个集群的数据完整性。

每个节点都可以处理任意请求,每个节点都知道任意文档的存放位置,并能将请求转发到对应文档储存节点,它可以扮演一个数据集散的角色,从各个节点将数据整合后再返回给客户端。

数据分摊到各个节点,同时还会进行冗余备份,每个节点会均匀地处理负载,提升集群的吞吐量。 那么节点又是由什么组成的? 答案是:分片。

3 分片

分片是什么:

  • 分片是一个底层的工作单元
  • 每个分片都是一个Lucene实例,每个Lucene实例都是一个独立的搜索引擎
  • 每个分片只存放索引全部数据中的一部分

总结一下,一个集群是由一个或多个节点(ES实例)组成,一个节点又是由一个或多个分片(Lucene实例)组成,这里可以稍微地看出一点层次结构了。

分片的本质是Lucene实例,ES通过对这些实例,在一个更高的层次进行数据的包装组合,再加入分布式等特性就实现了功能强大的ES。分片是节点中存储数据的核心单元,每个索引的文档数据是均匀地存放到多个分片中的(默认为5个),这些分片又分散在多个节点中,这样便实现了分布式存储。当集群扩容/缩小时,ES会自动在各个节点中迁移分片,使得数据依然均匀分布。

分片有主分片和副本分片的区别。索引的内容均匀地放到各个主分片中,每个文档都属于某一个主分片。副本分片是主分片的冗余拷贝,和对应的主分片有完全一样的数据,这样就实现了节点间的数据备份。

主分片的数量在索引建立时会被定死,其数量在建立索引时需要根据实际情况考虑,以应对后面数据量的变化,主分片数量过小会限制索引的最终规模,因为分片存放在节点中,而节点总是会有硬件极限,当越过某一个值之后,性能会有很大的减弱,甚至最终无法存放。

而副本分片的数量没有限制,副本分片越多,集群的规模会相应的扩大,海量的检索请求会分散到各个副本上,系统的吞吐量会有成倍的提升。

那么ES是如何将数据均匀地分散到各个分片的呢? 在做查询时又如何知道数据在哪里呢?

答案是 哈希映射。

shard = hash(routing) % 主分片数量

shard是数据被储存到的分片,routing通常是文档的id,也可以自己指定。通过这样,在储存数据时,将数据路由到对应的分片上,查询时直接到对应分片上获取数据。 从这里可以看出,ES的主分片数是不能改变的。


规模变化

理解了上面的 集群>节点>分片的数据组织方式,就可以发现ES扩容或者缩容会变得很方便,根据相应的节点数量,将分片均匀地移动到各个节点上,便实现规模的变化。

引用ES中文文档中的例子,假设现在有个单节点集群,索引主分片数为3 :


默认情况下,每个主分片都有一个副本分片,在同一个节点上做数据备份意义不大,所以这个时候,副本分片的状态为unassigned 。当在同一台机器上启动了第二个有相同cluster.name的节点后,ES会自动发现服务,并将新节点合并到集群当中,这时候数据分布变成了:


灰色的是副本分片,这时候数据会在另一个节点有备份,ES会自动地将副本分片移动到新节点中来。这个时候,集群的流量处理能力加倍,而且当某一个节点故障之后,数据还能保持完整性。当启动第三个节点的时候:


ES会均匀地移动这些分片到不同的机器上,非常便捷地实现水平扩容。这个有6的分片的集群最多可以扩展到6个节点,当想要增加更多的节点时,可以加倍副本分片的数量,实现更大的集群规模。

猜你喜欢

转载自blog.csdn.net/u012671917/article/details/80005081