[8]elasticsearch源码深入分析——Node与NodeEnvironment的实例化

2022-01-20 00:00:00 多个 参数 节点 构造 实例

本篇开始将会详细解释Node实例化的过程,从Node实例化这个操作为源点,了解ElasticSearch的编码思想,由于Node内容众多,所以会分篇叙述。

Node概览

前不久的分析中说到了,Node是ElasticSearch启动的重中之重,一个Node代表在一个集群(cluster.name)中的一个节点。为了使用客户端对集群进行操作,客户端可以使用Node中的client()来取得org.elasticsearch.client.Client的实例。

任何时候,启动一个elasticsearch实例都是启动Node的一个实例,多个Node实例的集合叫做Cluster。

集群中的节点默认都可以使用HTTP和Transport两种方法通信。transport的通信可以使用Java TransportClient,而HTTP就只能使用Rest Client了。

集群中的Node都能相互发现,并转发请求到合适节点。而且每个Node会有以下的一个或多个作用:

  • 通过设定node.master属性值为true(true为默认值)被选举为Master节点
  • 通过设定node.Data属性值为true(true为默认值)来充当数据节点,顾名思义,这种节点持有数据且能做数据的关联操作
  • 通过设定node.ingest属性值为true(true为默认值)来充当ingest node。ingest node是5.0新增的特性,简单点说就是elasticsearch内置的数据处理器,目前提供了convert,grok之类的操作,相信用过Logstash的同学一定不会陌生。
  • 通过设置tribe.属性来使node成为Tribe node*,它是一个特殊的客户端,它可以连接多个集群,在所有连接的集群上执行搜索和其他操作

Node类首先构造了三个Setting<Boolean>属性,分别是:

WRITE_PORTS_FILE_SETTING node.portsfile 用于控制是否将文件写入到包含给定传输类型端口的日志目录中 NODE_DATA_SETTING node.data 使该node被选举为data节点 NODE_MASTER_SETTING node.master 使该node被选举为master节点 NODE_INGEST_SETTING node.ingest 使该node被选举为ingest节点 NODE_LOCAL_STORAGE_SETTING local_storage 控制节点是否需要持久化元数据到磁盘,这和data node没有必然联系,但是如果local_storage为false,node.data和node.master的值必须为false NODE_NAME_SETTING node.name 节点名称 NODE_ATTRIBUTES node.attr. 添加gateway,zone,rack_id等参数key BREAKER_TYPE_KEY indices.breaker.type 断路器类型,提供参数有hierarchy,none两种,主要是防止内存溢出后elasticsearch宕机
属性名 key值 作用

Node实例化

三个Node的构造参数:

相关文章