Elasticsearch节点类型

master节点(主节点)

配置

node.master:true
node.data:false(这里也可以配置成node.data:true)

node.master和node.data默认都是true, 但还是建议显式配置

机器配置
普通服务器即可(CPU 内存 消耗一般)

作用

  1. 索引的创建或删除
  2. 跟踪哪些节点是集群的一部分
  3. 决定哪些分片分配给相关的节点

说明
稳定的主节点对集群的健康是非常重要的。
​ 默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但最好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作。
为了防止数据丢失,配置discovery.zen.minimum_master_nodes设置是至关重要的(默认为1),每个主节点应该知道形成一个集群的最小数量的主资格节点的数量。
解释如下:
​ 假设我们有一个集群。有3个主资格节点,当网络发生故障的时候,有可能其中一个节点不能和其他节点进行通信了。这个时候,当discovery.zen.minimum_master_nodes设置为1的时候,就会分成两个小的独立集群,当网络好的时候,就会出现数据错误或者丢失数据的情况。当discovery.zen.minimum_master_nodes设置为2的时候,一个网络中有两个主资格节点,可以继续工作,另一部分,由于只有一个主资格节点,则不会形成一个独立的集群,这个时候当网络回复的时候,节点又会从新加入集群。
设置这个值的原则是:

(master_eligible_nodes / 2)+ 1

这个参数也可以动态设置:

PUT _cluster/settings
{
	"transient": {
		"discovery.zen.minimum_master_nodes": 2
	}
}

data节点(数据节点)

配置

node.master:false(这里也可以配置成node.master:true)
node.data:true

机器配置
较高配置服务器, 主要消耗磁盘,内存

作用

  1. 存储索引数据
  2. 对文档进行增删改查,聚合操作

说明
数据节点对cpu,内存,io要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
数据节点路径设置,每一个主节点和数据节点都需要知道分片,索引,元数据的物理存储位置,path.data默认位为 $ES_HOME/data,可以通过配置文件 elasticsearch.yml进行修改,例如:

path.data: /data/es/data/

这个设置也可以在命令行上执行,例如:

./bin/elasticsearch –path.data /data/es/data

这个路径最好进行单独配置,这样Elasticsearch的目录和数据的目录就会分开。当删除了Elasticsearch主目录的时候,不会影响到数据。通过rpm安装默认是分开的。
数据目录可以被多个节点共享,甚至可以属于不同的集群,为了防止多个节点共享相同的数据路径,可以在配置文件elasticsearch.yml中添加:

node.max_local_storage_nodes: 1

注意:在相同的数据目录不要运行不同类型的节点(例如:master, data, client)这很容易导致意外的数据丢失。

client节点(客户端节点/路由节点)

配置

node.master:false
node.data:false

机器配置
普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)

作用

  1. 处理路由请求
  2. 处理搜索
  3. 分发索引

说明
从本质上来说该客户节点表现为智能负载平衡器。
独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用。

部落节点

配置elasticsearch.yml

tribe:
	t1: 
		cluster.name: cluster_one
	t2: 
		cluster.name: cluster_two

作用

  1. 部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据

说明
T1和T2是任意的名字代表连接到每个集群。
上面的示例配置两集群连接,名称分别是T1和T2。默认情况下部落节点通过广播可以做为客户端连接每一个集群。大多数情况下,部落节点可以像单节点一样对集群进行操作。
注意:以下操作将和单节点操作不同,如果两个集群的名称相同,部落节点只会连接其中一个。由于没有主节点,当设置local为true的是,主节点的读操作会被自动的执行,例如:集群统计,集群健康度。主节点级别的写操作将被拒绝,这些应该是在一个集群进行。部落节点可以通过块(block)设置所有的写操作和所有的元数据操作,例如:

tribe:
	blocks:
		write: true
		metadata: true

部落节点可以也可以在选中的索引块中进行配置,例如:

tribe:
	blocks:
		write.indices: hk*,ldn*
		metadata.indices: hk*,ldn*

当多个集群有相同的索引名的时候,默认情况下,部落的节点将选择其中一个。这可以通过tribe.on_conflict setting进行配置,可以设置排除那些索引或者指定固定的部落名称。

Ingest节点(提取节点)

配置

node.ingest:true

作用

  1. Ingest节点和集群中的其他节点一样,但是它能够创建多个处理器管道,用以修改传入文档。类似 最常用的Logstash过滤器已被实现为处理器。
  2. Ingest节点 可用于执行常见的数据转换和丰富。 处理器配置为形成管道。 在写入时,Ingest Node有20个内置处理器,例如grok,date,gsub,小写/大写,删除和重命名
  3. 在批量请求或索引操作之前,Ingest节点拦截请求,并对文档进行处理。

说明
这样的处理器的一个例子可以是日期处理器,其用于解析字段中的日期。另一个例子是转换处理器,它将字段值转换为目标类型,例如将字符串转换为整数

关于节点怎么选择

Elasticsearch的员工 Christian_Dahlqvist解读如下:

一个节点的缺省配置是:主节点+数据节点两属性为一身。对于3-5个节点的小集群来讲,通常让所有节点存储数据和具有获得主节点的资格。你可以将任何请求发送给任何节点,并且由于所有节点都具有集群状态的副本,它们知道如何路由请求。

通常只有较大的集群才能开始分离专用主节点、数据节点。 对于许多用户场景,路由节点根本不一定是必需的。

专用协调节点(也称为client节点或路由节点)从数据节点中消除了聚合/查询的请求解析和最终阶段,并允许他们专注于处理数据。 
在多大程度上这对集群有好处将因情况而异。 通常我会说,在查询大量使用情况下路由节点更常见。

建议

  1. 对于Ingest节点,如果我们没有格式转换、类型转换等需求,直接设置为false。
  2. 3-5个节点属于轻量级集群,要保证主节点个数满足((节点数/2)+1)。
  3. 轻量级集群,节点的多重属性如:Master&Data设置为同一个节点可以理解的。
  4. 如果进一步优化,5节点可以将Master和Data再分离。

在一个生产集群中我们可以对这些节点的职责进行划分。
建议集群中设置3台以上的节点作为master节点【node.master: true node.data: false】
这些节点只负责成为主节点,维护整个集群的状态。

再根据数据量设置一批data节点【node.master: false node.data: true】
这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大

所以在集群中建议再设置一批client节点【node.master: false node.data: false】, 主要是针对海量请求的时候可以进行负载均衡。
这些节点只负责处理用户请求,实现请求转发,负载均衡等功能

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值