在Elasticsearch中,节点的角色分为三种,分别为master node,data node,ingest node,不同的角色负责不同的工作,合理的配置这些节点,可以最大限度发挥集群的性能。
角色介绍
在一个ES节点中,每一个节点都可以充当一个或者多个角色,但是在较大的集群中,一般会将每一个角色都分开,这样可以保证集群的稳定性。
可以通过下面的配置进行设置:
node.master: true
node.data: true
node.ingest: true
http.enabled: true
之所以要将http这个配置也放到角色配置当中,是因为当一个节点开启http选项之后,就有能力充当client的角色,即官方文档中提到的
coordinating only node
下面介绍一下每一种角色的功能和职责:
master node
: 负责更新和同步集群信息,如集群配置,集群健康情况,index的信息等等,对集群的稳定性十分重要。这里由一个想吐槽的地方,ES的命名很特别坑人,node.master
被设为true,
并不表示这个节点为被设置为master,而是有资格被选为master,实际上当前活动的master只有一个,如果没有被选上的,只会执行其他角色的任务,如client(接受请求),
一般建议将master和data分离开,在较大的集群中,一般设置三个master节点,以提高稳定性。
data node
: 就是字面意思,data node是储存数据的节点ingest node
: 是专门对文档进行预处理的,有点像logstash的功能,是es 5.x新推出的功能,没有作深入了解client node
: 指开启了http端口的节点,这类节点可以接收用户的请求,如搜索,索引等,然后将请求分发到不同的数据节点,接收到数据节点的结果后进行汇总,然后返回给用户,这类节点对内存比较敏感,
特别是大量请求的时候
ES集群的工作流程
ES的常用端口有两个,分别为9200和9300,当然,也可以自行进行设置,9200用于响应restful请求,用于处理用户请求,而9300端口作为rpc端口,用于内部通信,内部的通信的节点和节点之间直接通信的
任意一个节点都会从master节点上得到一份完整的集群信息,这个信息包含了分片所在位置,各节点基本信息等等,利用这个信息,每一个节点都有能力独立完成索引和搜索的任务,无需经过master节点。
当一个节点收到用户的一个请求的时候,这个节点就会作为client,解析用户的请求,任务分发给储存相应分片的节点后,将收到的结果进行汇总,然后返回给用户,完成一次完整的请求过程。
具体细节可以参考前面的一遍文章,虽然写得也是一般般