一个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