————————————————————————
————————————————————————
N.1 MasterNode
1)职责: (1)处理创建,删除索引等请求 / 决定分片⽚被分配到哪个节点 / 负责索引的创建与删除; (2)维护并且更新 Cluster State,且只能由 master node 维护,否则会造成集群状态不正常。 2)最佳实践: (1)master node非常重要,部署时需要解决单点问题; (2)一个集群中设置多个master node,每个node只承担master的单一角色; |
N.2 DataNode
1)职责: (1)保存分片数据。在数据扩展上起到了至关重要的作用(由 Master Node 决定如何把分片分发到数据节点上); 2)最佳实践: (1)节点启动后,默认就是数据节点。可以设置 node.data: false 禁止; (2)通过增加数据节点,可以解决数据水平扩展和解决数据单点问题; |
N.3 MasterEligibleNode
1)⼀个集群,⽀持配置多个 Master Eligible 节点。这些节点可以在必要时(如 Master 节点出现故障,网络故障时)参与选主流程,成为 Master 节点(不要认为是一个备份的主节点,它只是有资格参与竞选而已,并非一定是主节点,如果没有选上,那么就什么都不要干 一直等待主节点挂了 ,你在进行竞选); 2)参数node.master设置为true(默认)的节点,这使得它有资格被选为主节点,控制集群。 3)当集群内第⼀个 Master eligible 节点启动时候,它会将自己选举成 Master 节点; |
N.4 CoordinatingNode
本质上来说,Cooridnating Node是原来的Client node的,主要功能是来分发请求和合并结果的。新版本已经取消了Client node这种节点角色,在所有节点默认就是Coordinating node,且不能关闭该属性。 1)处理请求的节点,负责路由请求到正确的节点,如创建索引的请求需要路由到 Master 节点; 2)所有节点默认都是 Coordinating Node; 3)通过将其他类型(data node/master node/master eligible node)设置成 False,使其成为专门负责的协调的节点; |
N.5 IngestNode
1)Ingest node专门对索引的文档做预处理,实际中不常用,除非文档在索引之前有大量的预处理工作需要做。Ingest node设置如下: (1)node.master: false。 (2)node.data: false。 (3)node.ingest: true。 (4)search.remote.connect: false。 |
N.6 TribeNode
1)Tribe Node主要用于跨级群透明访问。但是官方已经不建议使用了,在5.4.0版本以后已经废弃掉了,在7.0的版本中将移除该功能。在5.5版本以后建议使用Cross-cluster search替代Tribe Node。 |
N.7 Master选举机制
1)如何触发一次选举 当满足如下条件是,集群内就会发生一次master选举 (1)当前master eligible节点不是master; (2)当前master eligible节点与其它的节点通信无法发现master; (3)集群中无法连接到master的master eligible节点数量大于或等于discovery.zen.minimum_master_nodes 所设定的值; 好多个(至于几个自定义)备份节点都没有发现master,说明集群异常,要重新选举。 2)bully选举算法 (1)启动节点ping协调器,获取当前集群状态(节点信息,集群名称等),如果协调器没有启动一直到ping通为止 (2)能ping通,都会拿到对象activeMaster现役master (3)判断activeMaster的数量,0说明当前集群没有master,1表示当前集群已经选举完毕. 如果为1,当前节点启动Bully算法逻辑结束; 如果为0,进入第4步 (4)启动时发现没有现役master, 且候选名单中(包括自身节点)存活节点大于或等于配置中discovery.zen.minimum_master_nodes的数量,就可以进入第5步。 1-4步骤其实是一个触发选举的条件,在前面也重复讲了。 (5)先根据节点的clusterStateVersion比较,clusterStateVersion越大,优先级越高。clusterStateVersion相同时,进入compareNodes,其内部按照节点的Id比较(Id为节点第一次启动时随机生成, 节点的Id越小,优先级越高)。当clusterStateVersion越大,优先级越高。这是为了保证新Master拥有最新的clusterState(即集群的meta版本),避免已经commit的meta变更丢失。因为Master当选后,就会以这个版本的clusterState为基础进行更新。(一个例外是集群全部重启,所有节点都没有meta,需要先选出一个master,然后master再通过持久化的数据进行meta恢复,再进行meta同步)。当clusterStateVersion相同时,节点的Id越小,优先级越高。即总是倾向于选择Id小的Node,这个Id是节点第一次启动时生成的一个随机字符串。之所以这么设计,应该是为了让选举结果尽可能稳定,不要出现都想当master而选不出来的情况。 |