随着数据增长的需求,应该怎么样扩展ES呢?如果开启第三个node,这个cluster就会变成如下如所示:
从node1和node2各自移出一个shard到node3中,现在在每个node中有两个shard而不是三个了,这意味着每个node的shared共享了其硬件资源,这样每个shard能达到更好的性能。
每一个shard在自己的权利控制范围中都是一个成熟的搜索引擎,并且有能力使用一个单独的node的所有资源。我们这6个shard能最多扩展到6个node,这时候,每个node的每个shard都能拥有这个node的全部的数据。
但是如果我们想扩展到多于6个node该怎么办呢?
primary
shard的数量在index被创建的时候就已经确定了。这个数量也确定了index可以存储的最大的数据量,但是这个最大数据量是和你的数据和硬件环境相关的。然而读请求,文档搜索能被primary处理,也能被replica
shard处理,所以,这个repolica shard的大小也决定了ES所能处理搜索吞吐量的大小。
在工作的cluster中replica shard的数量是可以根据需求i动态修改的。如过把blogs的replica shard增加一个如下:
PUT /blogs/_settings
{
"number_of_replicas":2
}
执行后的ES如图:
正如图中所示,blogs这个index现在已经有9个shard,3个primary shard ,6个replica
shard。如果我们在增加三个node到目前的六个node,那么将会在每个node中有一个shard,此时ES能比以前多处理50%的请求。
当然,仅仅是对node增加replica shard并不能提高性能,因为每个shard都要消耗node的资源。你应该通过增加硬件来提高吞吐量。
但是,扩展replica数量的意义在于,我们有更多的数据冗余。通过以上的配置,我们即使丢失了两个node也不会造成数据的丢失。
原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_scale_horizontally.html