整个集群的管理者、索引管理、分片管理,以及整个集群的状态的管理,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
- }
- }
- ]
- }
- }