原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/shard-scale.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/shard-scale.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/shard-scale.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
扩容的单元(The Unit of Scale)edit
在 动态更新索引中,我们介绍了一个分片即一个Lucene 索引,一个 Elasticsearch 索引即一系列分片的集合。 你的应用程序与索引进行交互,Elasticsearch 帮助你将请求路由至相应的分片。
一个分片即为 扩容的单元(unit of scale) 。最小的一个索引可以只有一个分片。 这可能已经完全满足你的需求了 — 单个分片即可存储大量的数据 — 但这限制了你的可扩展性。
想象一下我们的集群由一个节点组成,在集群内有一个索引,这个索引只含一个分片:
这个设置也许很小,但它满足我们当前的需求而且成本很低。
当前我们只讨论主 (primary)分片(shard)。我们将在 副本分片 讨论 副本 (replica)分片(shard)。
在美好的一天,互联网发现了我们,一个节点再也承受不了我们的流量。 我们决定根据 Figure 49, “一个只有一个分片的索引无扩容因子” 添加一个节点。这将会发生什么呢?
Figure 49. 一个只有一个分片的索引无扩容因子 (An index with one shard has no scale factor)
答案是:什么都不会发生。因为我们只有一个分片,已经没有什么可以放在第二个节点上的了。 我们不能增加索引的分片数因为它是 路由文档到分片(route documents to shards) 算法中的重要元素:
shard = hash(routing) % number_of_primary_shards
我们当前的选择只有一个,就是将数据重新索引至一个拥有更多分片的一个更大的索引,但这样做将消耗的时间是我们无法承受的。 通过事先规划,我们可以使用预分配(overallocating)的方式来完全避免这个问题。