原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/replica-shards.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/replica-shards.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/replica-shards.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
副本分片 (Replica Shards)edit
目前为止我们只讨论过主分片,但我们身边还有另一个工具:副本分片。 副本分片的主要目的就是为了故障转移,正如在分布式集群中讨论的:如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片的角色。
在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。
但是,副本分片可以为读请求提供服务,如果你的索引也如常见的那样是偏向查询的,那你可以通过增加副本的数量来提升查询性能,但也要为此 增加额外的硬件资源。
让我们回到那个有着两个主分片的索引的例子。通过增加第二个节点来提升索引容量。 增加额外的节点不会帮助我们提升索引的容量,但我们可以通过增加副本数在搜索时获得额外硬件的优势:
PUT /my_index/_settings { "number_of_replicas": 1 }
拥有两个主分片,加上每个主分片的一个副本,我们拥有四个分片:每个节点一个,如图所示 Figure 51, “一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展”。
Figure 51. 一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展
通过副本进行负载均衡edit
搜索性能取决于最慢的节点的响应时间,所以尝试均衡所有节点的负载是一个好想法。 如果我们只是增加一个节点而不是两个,最终我们会有两个节点并各持有一个分片,而一个有两个分片的单节点要完成两倍的工作。
我们可以通过调整副本数量来平衡这些问题。通过分配两份副本而不是一个,最终我们会拥有六个分片,可以平均分给三个节点,如图Figure 52, “通过调整副本数来均衡节点负载”所示:
PUT /my_index/_settings { "number_of_replicas": 2 }
作为奖励,我们同时提升了我们的可用性。我们可以容忍丢失两个节点而仍然保持一份完整数据的拷贝。
Figure 52. 通过调整副本数来均衡节点负载
事实上节点 3 持有两个副本分片,然而没有主分片并不重要。副本分片与主分片的工作量是相同的;它们只是扮演着略微不同的角色。没有必要确保主分片均匀地分布在所有节点中。