1. 副本分片
到目前為止,我們隻讨論了主分片,但是我們還有另一個工具:副本分片。 副本分片的主要目的是為了故障轉移(failover),如
深入叢集生命周期所述:如果持有主分片的節點死亡,則将其副本提升為主分片的角色。
在索引寫入時,副本分片做着與主分片相同的工作。新文檔首先被索引進主分片然後再同步到其它所有的副本分片。增加副本數并不會增加索引容量。
但是,副本分片可以為讀取請求提供幫助。 如果通常情況下,你的索引搜尋占很大比重(偏向于查詢使用),則可以通過增加副本數量來增加搜尋性能,但這樣你也會為此付出占用額外的硬體資源的代價。
讓我們回到那個具有兩個主分片的索引示例中。 我們通過添加第二個節點來增加索引的容量。 添加更多節點不會幫助我們提升索引寫入能力,但是我們可以在搜尋時通過增加副本分片的數量來充分利用額外硬體資源:
PUT /my_index/_settings
{
"number_of_replicas": 1
}
擁有兩個主分片,另外加上每個主分片的一個副本,我們總共擁有四個分片:每個節點一個,如下圖所示:
https://note.youdao.com/md/?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEBe7ab14385fa1d902472f6bf74626d7de%3Fmethod%3Ddownload%26read%3Dtrue#2-%E9%80%9A%E8%BF%87%E5%89%AF%E6%9C%AC%E8%BF%9B%E8%A1%8C%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E7%BC%96%E8%BE%91 2. 通過副本進行負載均衡
搜尋性能取決于最慢節點的響應時間,是以嘗試均衡所有節點的負載是一個好想法。如果我們隻是增加一個節點而不是兩個,最終我們會有三個節點,其中兩個節點隻擁有一個分片,另一個節點擁有兩個分片做着兩倍的工作( one node doing double the work with two shards)。
我們可以通過調整分片副本數量來平衡這些。通過配置設定兩個副本,最終我們會擁有六個分片,剛好可以平均分給三個節點
PUT /my_index/_settings
{
"number_of_replicas": 2
}
如下圖所示:
作為獎勵,我們同時提升了我們的可用性。我們可以容忍丢失兩個節點而仍然保持一份完整資料的拷貝。
備注
事實上節點 3 擁有兩個副本分片,沒有主分片并不重要。副本分片與主分片做着相同的工作;它們隻是扮演着略微不同的角色。沒有必要確定主分片均勻地分布在所有節點中。
原文連接配接:https://www.elastic.co/guide/en/elasticsearch/guide/current/replica-shards.html