ElasticSearch 2 (11) - 節點調優(ElasticSearch性能)
摘要
一個ElasticSearch集群需要多少個節點很難用一種明確的方式回答,但是,我們可以將問題細化成一下幾個,以便幫助我們更好的了解,如何去設計ElasticSearch節點的數目:
- 打算處理多少數據?
- 打算處理多少搜索請求?
- 請求的復雜度是怎樣?
- 每個節點有多少資源數?
- 打算建立多少索引,支持多少應用?
版本
elasticsearch版本: elasticsearch-2.x
內容
一個集群解決所有問題?
需要回答的問題遠不止以上這些,但是第五個問題往往是容易被我們忽視的,因為單個ElasticSearch集群有能力支持多索引,也就能支持多個不同應用的使用。我們可以將公司里所有的日志都放在一個ElasticSearch集群下處理,無論是網站上的一個簡單查詢,還是一個非常復雜的分析。了解一個集群能支持多少個應用程序的日志需求,能幫助我們分析出合適的節點數目
節點數與內存相關
ElasticSearch 的節點數受RAM的限制,對於某個服務器或虛擬機,我們分配的物理或虛擬內存是有限的,這樣自然限制了我們分配節點的數量。
萬能節點數——3
如果我們要建立一個ElasticSearch集群,一個比較合適的數字是3。為什么3?很大程度上一個集群3個節點可以防止“split-brain”出現,盡管,對於一個分布式的集群,每個節點都是對等的,但是我們仍然需要一個主節點master。這個節點承擔協調自己以及其他所有節點間的通信任務。在ES中,主節點除了負責以上工作,它還會對分片與副本的存儲進行優化,同時還要處理索引、寫入數據和路由索引優化等問題。
三個和尚投票
當主節點master出現問題,從節點slave不能與主節點通信時,從節點會發起選舉任命新的主節點,同時新的master會接管舊master的所有工作,如果舊master重新恢復並加入到集群中,新master會將原來舊的master降級為slave,這樣就不會有沖突發生。所有這個過程都由ElasticSearch自己處理,使用者無需任何參與。
兩個和尚投票
但是,當只有兩個節點的時候,一主(master)一從(slave),如果主從直接的通信出現問題時,從節點slave會自我提升為master,但是當恢復通信時,我們就會同時有兩個master。因為此時,對於原來的主節點(master)角度考慮,它認為是原來的從節點(slave)出現問題,現在仍然需要作為slave重新加入。這樣,兩個節點的時候,我們就出現了集群不知道將哪個節點選舉為主節點的情況,也就是我們通常說的“分腦”。
為了防止這種情況的發生,第三個節點的出現會打破平衡,解決沖突問題。
三個和尚仍然存在問題
分腦的問題同樣會出現在具有三或三個以上節點的集群中,為了降低發生的概率,ElasticSearch提供了一個配置 discovery.zen.minimum_master_nodes 它規定了在選舉新的master時,一個集群下最少需要的節點數。例如,一個3節點集群,這個數字為2,2個節點可以防止單個節點在脫離集群時,將其自己選舉成master,相反,它會等待直到重新加入到集群中。這個數值可以通過一個公式確定:
N/2 + 1
N的值為集群下所有節點的數目。
犧牲可用性
防止兩個節點集群出現“分腦”情況有一個辦法,就是將其中一個節點 node.data 的配置設置為 false,這樣,這個節點就永遠不會成為master,當然,這也會降低集群的可用性
小結
對於ElasticSearch集群的節點數沒有定論,ElasticSearch的工程師在Quora上也給出了他的相似意見,可供參考
參考
參考來源:
How many nodes should an Elasticsearch cluster have?
What's the maximum number of nodes Elasticsearch can have? How many, max, have you used in practice?
Elasticsearch Internals: Networking Introduction