一個ElasticSearch集羣須要多少個節點很難用一種明確的方式回答,可是,咱們能夠將問題細化成一下幾個,以便幫助咱們更好的瞭解,如何去設計ElasticSearch節點的數目:node
elasticsearch版本: elasticsearch-2.x服務器
須要回答的問題遠不止以上這些,可是第五個問題每每是容易被咱們忽視的,由於單個ElasticSearch集羣有能力支持多索引,也就能支持多個不一樣應用的使用。咱們能夠將公司裏全部的日誌都放在一個ElasticSearch集羣下處理,不管是網站上的一個簡單查詢,仍是一個很是複雜的分析。瞭解一個集羣能支持多少個應用程序的日誌需求,能幫助咱們分析出合適的節點數目elasticsearch
ElasticSearch 的節點數受RAM的限制,對於某個服務器或虛擬機,咱們分配的物理或虛擬內存是有限的,這樣天然限制了咱們分配節點的數量。分佈式
若是咱們要創建一個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的值爲集羣下全部節點的數目。code
防止兩個節點集羣出現「分腦」狀況有一個辦法,就是將其中一個節點 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