1.es中节点的类型
配置文件elasticsearch/config/elasticsearch.yml
a.master节点:负责集群层面的相关操作,管理集群变更
node.master: true
b.数据节点:负责保存数据,执行数据相关的操作,数据节点对于cpu,io,内存要求较高,一半情况下,数据读写流程只和数据节点交互,不会和主节点打交道,特殊情况下会需要和主节点交互,例如住分片所在节点挂掉,数据同步副本分片的时候部分节点同步副本分片失败
node.data: true
c.协调节点:客户端请求可以发送到集群的任何节点,每个节点都知道任意文档所处的位置,然后转发请求,收集数据并返回给客户端,这种处理客户端请求的节点称为协调节点
node.ingest: true
2.选举主节点:
a.当前节点ping所有的节点,然后将活跃的节点放入fullPingResponse列表中,并且将当前节点放入fullPingResponse列表中。
b.从fullPingResponse列表中获取活跃节点认为的master节点,放入activeMaster列表中,活跃的候选主节点放入masterCandidates列表中(masterCandidates列表中的候选主节点数需要大于等于discovery.zen.minimum_master_nodes)。
c.如果activeMaster列表不为空,则选择id最小的为临时主节点(正常情况下activeMaster列表只有一个master节点),如果activeMaster列表为空,则从masterCandidates列表中选择集群版本最新,并且集群id最小的节点为临时主节点,申请加入临时master节点
d.如果一个候选主节点收到的票数大于等于discovery.zen.minimum_master_nodes,并且该节点也为自己投票,那么它将成为主节点。
e.如果一个节点成为了master节点,则该节点收集所有候选主节点的集群元信息,选取版本最新的集群元信息发布给所有节点。每个节点收到集群元信息后都向master节点回复一个确认信息,当master在cluster.publish.timeout时间段内收到大多数候选主节点的确认信息后,新的集群状态就被称为已提交,并且 master 会广播另一条消息,指示节点应用现在提交的状态。每个节点收到此消息,应用更新的状态,然后向主节点发送第二个确认。如果master在cluster.publish.timeout(默认30s)内没有收到大多数候选主节点的确认消息,则集群状态更改为被拒绝,将重新选出一个主节点,如果在cluster.publish.timeout时间段内收到了大多数的候选主节点的确认消息,但是在cluster.follower_lag.timeout(默认90s)没有收到部分节点的第二次确认消息,则将没有收到第二次确认消息的节点从集群中删除。
f.集群元信息的传播是仅传播改变部分,不是全部集群元信息传播 g.开启节点失效检测
Master节点启动NodesFaultDetection定期监测加入集群的活跃节点数是否大于等于discovery.zen.minimum_master_nodes; 非Master节点启动MasterFaultDetection定期监测Master节点是否活跃; 节点监测都是通过定期(1s)发送ping探测节点是否正常,如果超过3次,则开始处理节点离开事件,如果master节点检测到当前活跃的节点数小于discovery.zen.minimum_master_nodes,则放弃主节点身份,在自身节点上执行选举流程,加入新的集群中,如果非master节点检测检测master节点不活跃,则执行选举流程,加入新的集群中