作者:來自 Elastic?Kofi Bartlett
解釋如何配置 number_of_replicas
、它的影響以及最佳實踐。
更多閱讀:Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica
想獲得 Elastic 認證?查看下一期 Elasticsearch 工程師培訓什么時候開始!
Elasticsearch 擁有大量新功能,能幫助你為你的使用場景構建最佳搜索解決方案。深入了解我們的示例筆記本,開始免費云試用,或立即在本地機器上嘗試 Elastic。
Elasticsearch 被設計為一個分布式系統,能夠處理大量數據并提供高可用性。其中一個關鍵特性是索引副本的概念,它由 number_of_replicas
設置控制。本文將深入探討這個設置的細節、其影響以及如何正確配置它。
副本在 Elasticsearch 中的作用
在 Elasticsearch 中,索引是一組文檔的集合,這些文檔被劃分到多個主分片中。每個主分片是一個獨立的 Apache Lucene 索引,索引中的文檔被分布在所有主分片之間。為了確保高可用性和數據冗余,Elasticsearch 允許每個分片有一個或多個副本,稱為副本分片。
number_of_replicas
設置控制 Elasticsearch 為索引中的每個主分片創建多少個副本分片(副本)。默認情況下,Elasticsearch 為每個主分片創建一個副本,但可以根據系統的需求進行更改。
配置 number_of_replicas
number_of_replicas
設置可以在創建索引時配置,也可以在之后更新。以下是在創建索引時設置的方法:
PUT /my_index
{"settings": {"number_of_replicas": 2}
}
在這個例子中,Elasticsearch 會為 my_index
索引中的每個主分片創建兩個副本。
要更新已存在索引的 number_of_replicas
設置,可以使用 _settings
API:
這個命令會將 my_index
索引更新為每個主分片有三個副本。
number_of_replicas
設置的影響
number_of_replicas
設置對 Elasticsearch 集群的性能和彈性有重大影響。以下是一些關鍵點需要考慮:
- 數據冗余和可用性:增加
number_of_replicas
通過為每個分片創建更多副本來提高數據的可用性。如果某個節點發生故障,Elasticsearch 仍然可以從剩余節點上的副本分片提供數據。 - 搜索性能:副本分片可以處理讀取請求,因此擁有更多副本可以通過在更多分片之間分配負載來提升搜索性能。
- 寫入性能:但每次寫入操作都必須在每個分片副本上執行。因此,較高的
number_of_replicas
會因為需要執行更多寫操作而降低索引性能。 - 存儲需求:更多副本意味著更多的存儲空間。你需要確保集群有足夠的容量來存儲額外的副本。
- 對節點故障的抗性:
number_of_replicas
應該根據集群中的節點數量來設置。如果副本數量大于等于節點數量,集群可以在多個節點故障的情況下仍然不丟失數據。
設置 number_of_replicas
的最佳實踐
最優的 number_of_replicas
設置取決于你系統的具體需求。但以下是一些通用的最佳實踐:
-
對于單節點集群,
number_of_replicas
應設置為 0,因為沒有其他節點來存儲副本。 -
對于多節點集群,
number_of_replicas
應至少設置為 1,以確保數據冗余和高可用性。 -
如果搜索性能是優先考慮的目標,可以考慮增加
number_of_replicas
。但要注意與寫入性能和存儲需求之間的權衡。 -
始終確保你的集群有足夠的容量來存儲額外的副本。
更多閱讀:
-
Elasticsearch:增加 Elasticsearch 寫入吞吐量和速度的完整指南
-
Elasticsearch:如何提高 Elasticsearch 數據攝入速度
-
Elasticsearch:提升 Elasticsearch 性能
原文:Elasticsearch Index Number_of_Replicas - Elasticsearch Labs