目录
一、节点职责划分
1、master eligible(候选主节点)
配置参数:node.master: true(默认值)
节点职责:主节点可以管理和记录集群状态、决定分片在哪个节点、处理创建和删除索引库的请求。
2、data(数据节点)
配置参数:node.data: true(默认值)
节点职责:存储数据、搜索、聚合、CRUD。
3、ingest(摄取节点)
配置参数:node.ingest: true(默认值)
节点职责:数据存储之前的预处理。
4、coordinating(协调节点)
配置参数:当上面的参数为false则为coordinating节点
节点职责:路由请求到其它节点并且合并其它节点处理的结果,返回给用户。
5、voting(仅投票节点)
配置参数:node.voting_only: true
节点职责:再选举过程中仅可以投票而不参与竞选,不过同时也可以作为数据节点。
二、脑裂
脑裂是一种非常有趣的现象。默认情况下,每一个节点都是master eligible节点。当master节点因为网络阻塞等原因导致无法与其它节点通信时,其它节点无法与master节点建立连接,那么便会认为master节点已经宕机。此时其它节点便会选举出一个新的master节点,当网络恢复后便会出现两个master节点,我们称此为脑裂。
如果出现脑裂的现象,多个master会互相竞争,导致主分片和副本出现分歧,把一些分歧中的分片标识为坏片。
为了避免脑裂,一般要求选举票超过(master eligible数量+1)/2才可以成为新的master节点,所以节点数量最好为奇数。对于yml中的配置项为discovery.zen.minimum_master_nodes,不过在ES7.0以后已经成为了默认配置,因此一般不会出现脑裂的问题。