分布式文件存储:
在前面章节,我们讨论了如何将数据放入索引然后检索数据。
不过我们有意略过了许多关于数据是如何在集群中分布和获取的相关技术细节。
这种使用和细节分离是刻意为之的——你不需要知道数据在Elasticsearch如何分布它就会很好的工作。
在这个章节,我们将深入研究这些内部细节,技术细节会帮助你了解数据是村和存储在分布式系统的
路由一个文档到一个分布:
当你索引的一个文档, 它是存储在一个单独的主分片上。
Elasticsearch 是如何知道一个文档属于哪个分片?
当我们创建文档时,它是如何知道是应该存储在分片1还是分片2上的呢?
处理不能是随机的,因为我们将来需要检查文档。实时上,
它根据一个简单的算法决定:
shard = hash(routing) % number_of_primary_shards
主和复制分片交互:
为了阐述意图, 我们想象我有一个cluster 有3个节点组成。
它包含一个索引叫做blogs 有两个主分片。
每个主分片有2个副本。相同的副本是不会被分配到相同的节点,
因此我们的cluster 看起来像 一个cluster 有3个节点和一个索引
图1, 一个集群有3个节点和一个索引
我们可以发送我们的请求到任何节点在集群里。
每个节点是完全有能力服务任何请求。
每个节点知道每个文档在集群中的位置,因此可以直接转发请求到需要的节点。
在下面的例子中,我们发送所有我们的请求到Node1,我们称之为协调节点
注意:
当发送请求时,最好的做法是循环通过所有节点请求,这样可以平衡负载
Creating, Indexing, and Deleting a Document 创建
创建,index,和删除请求是写操作, 必须在主节点分片成功完成才能被复制到任何相关的复制分片