Elasticsearch集群角色类型node.master及node.data

在Elasticsearch当中,ES分为三种角色:master、data、client。
三种角色由elasticsearch.yml配置文件中的node.master、node.true来控制。
如果不修改elasticsearch的节点角色信息,那么默认就是node.master: true、node.data: true
默认情况下,es集群中的每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务,负载均衡以及数据合并等服务。在高并发的场景下集群容易出现负载过高问题。

角色划分:

master:该节点不和应用创建连接,主要用于元数据(metadata)的处理,比如索引的新增、删除、分片分配等,master节点不占用io和CPU,内存使用量一般
data:该节点和索引应用创建连接、接收索引请求,该节点真正存储数据,ES集群的性能取决于该节点的个数(每个节点最优配置的情况下),data节点会占用大量的CPU、io和内存。
client:该节点和检索应用创建连接、接受检索请求,但其本身不负责存储数据,可当负责均衡节点,client节点不占用io、cpu和内存。

各节点间的关系

master:master节点具备主节点的选举权,有资格成为主节点,主节点控制整个集群的元数据。
data:data节点的分片执行查询语句获得查询结果后将结果反馈给client。此过程较消耗硬件资源。
client:client节点接受搜索请求后将请求转发到与查询条件相关的多个data节点的分片上,然后多个data节点的分片执行查询语句或者查询结果再返回给client节点,client来把各个data节点的返回结果进行整合、排序等一系列操作后再将最终结果返回给用户请求。

资源规划

master节点:ES如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,亲测,如果故障两个Master节点,ES将无法组成集群。
data节点:单个索引在一个data节点上分片数保持在3个以内;每1GB堆内存对应集群的分片保持在20个以内;每个分片不要超过30G;
client节点:增加client节点可增加检索并发,但检索的速度还是取决于查询所命中的分片个数以及分片中的数据量。
data节点经验:

如果单索引每个节点可支撑90G数据,依此可计算出所需data节点数 。
如果是多索引按照单个data节点jvm内存最大30G来计算,一个节点的分片保持在600个以内,存储保持在18T以内。
主机的cpu、io固定,建议一台主机只部署一个data节点,不同角色节点独立部署,方便扩容
每条数据保持在2k以下索引性能大约3000-5000条/s/data节点,增加data节点数可大幅度增加索引速率,节点数与索引效率的增长关系呈抛物线形状​

ES的四种集群角色

node.master: true #主节点;允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举。(默认开启)
node.data: true #数据节点;允许该节点存储索引数据(默认开启)
上面这两个属性可以有四种组合方式:

第一种:主节点+数据节点

第一种为ES默认选项,以下两个值都为true,该节点既有成为master的资格还要存储数据,如果该节点被选为了真正的master,还要存储数据,那么该节点的压力相对来说就较大了,生产中不建议这样,即成为了主节点还成为了数据节点。

node.master: true
node.data: true

第二种:主节点

第二种为主节点模式,该节点只有成为master节点的资格,并不正真存储数据,在没有成为master的情况下还可以进行集群内的请求转发,数据合并等功能,此选择在生产中为master节点。

node.master: true
node.data: false

第三种:数据节点

第三种为数据节点,该节点只存储数据,没有资格成为master,只做数据存储功能;在集群中需要单独设置几个这样的节点,用来存储数据。

node.master: false
node.data: true

第四种:客户端节点

第四种为client节点,该节点既没有成为master的资格,还不存储数据,主要是针对海量请求的时候可以进行负载均衡、数据合并、数据查询、请求转发等功能。

node.master: false
node.data: false

原文地址:https://www.cnblogs.com/davis12/p/15500158.html