整个集群的管理者、索引管理、分片管理,以及整个集群的状态的管理,master节点是从master候选节点中选出的,成为master候选节点的方式:node.master:true 默认(true)
data node:数据节点,存储主要数据,负责索引的数据的检索和聚合等操作,设置data node的方式如下:
node.master:true
node.data:false
该节点和应用创建连接、接收索引请求,会存储分配在该node上的shard的数据并负责这些shard的写入、查询等,ES集群的性能取决于该节点的个数(每个节点最优配置的情况下),data节点会占用大量的CPU、io和内存;data节点的分片执行查询语句、获得查询结果后将结果反馈给Coordinating,此过程较消耗硬件资源;设置成为data节点的方式
node.data:true
node.master:false
协调节点,所有节点都可以接受来自客户端的请求进行转发,因为每个节点都知道集群的所有索引分片的分布情况,但是别的节点,都还肩负着别的工作,如果请求压力过大,可能会拖垮整个集群的响应速度,所以就专门有了这个协调节点,他什么都不用做,只处理请求和请求结果,这种设计的好处是,如果集群资源不足,被干死的是coordinating node, marster、data节点安全,设置成为coordinating node节点的方式:
node.data:false
node.master:false
预处理节点,主要是对数据进行预处理,比如对字段重命名,分解字段内容,增加字段等,类似于Logstash, 就是对数据进行预处理,ingest里面可以定义pipeline(管道),pipeline可以由很多个processor(官方预定义28个)构成,用来出来预处理数据,使用方式:先定义好预处理pipeline,然后在存储数据的时候指定pipeline,如:成为ingest node的方式
node.ingest:true 默认(true)
// 创建pipeline: 名字为replace_content,如果数据的name字段值是swk,就把name字段的值改为孙悟空
http://xxx.xxx.xxx.xxx:9200/_ingest/pipeline/replace_content
{"processors":[{"set":{"if":"ctx.name == 'swk'","field":"name","value":"孙悟空"}}]
}// 使用pipeline:就是在插入数据时指定你的pipeline名字
http://xxx.xxx.xxx.xxx:9200/person/person?pipeline=replace_content
{"name":"swk","country": "中国","age":500
}
// 结果:
{"took": 2,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 5.896224,"hits": [{"_index": "person","_type": "person","_id": "K5qUSXgBLLjdyTtcB4ZQ","_score": 5.896224,"_source": {"country": "中国","name": "孙悟空","age": 500}}]}
}