Elasticsearch集群API详解

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch提供了大量了的Rest API用以操作相关功能,提供了极大的便利,掌握这些API是熟练地使用Elasticsearch的前提,这些API有Cluster APIs、Document APIs、Index APIs、Info API、Search Apis、Cat APIs等,本文主要讲解Cluster APIs,通过Cluster APIs可以查看集群简况、集群状态和统计信息、集群节点信息等。

Elasticsearch提供了大量了的Rest  API用以操作相关功能,提供了极大的便利,掌握这些API是熟练地使用Elasticsearch的前提,这些API有Cluster  APIs、Document APIs、Index APIs、Info API、Search Apis、Cat  APIs等,本文主要讲解Cluster APIs,通过Cluster APIs可以查看集群简况、集群状态和统计信息、集群节点信息等。

01

查看集群健康状态(cluster health API)

使用helath API可以查看集群的整体健康情况,当有异常时及时告警,例如:

$ curl -X GET "http://127.0.0.1:9200/_cluster/health?pretty"
{
  "cluster_name": "elasticsearch",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 3,
  "active_shards": 3,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 3,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 50.0
}

还可以指定索引,查看索引级别的健康情况,更加方便问题定位。

$ curl -X GET "http://127.0.0.1:9200/_cluster/health/index1,index2?pretty"
  • API请求参数

cluster-api-request-parameters.jpg

  • API响应参数

cluster-api-response-parameter.jpg

响应结果中要特别关注statusunassigned_shardsnumber_of_pending_tasks这几个指标,status代表集群的状态,只有green才是集群完全健康的状态,unassigned_shards表明了有多少分片没有被分片,这是一个很重要的指标,正常情况下不应该存在未被分配的分片,number_of_pending_tasks则是等待中的任务数量,如果这个数值太大也需要特别关注。

02

查看集群状态(cluster state API)

集群状态API提供了一个全面查看集群状态信息的方法,返回的响应内容很多,包括映射、节点、文档等元数据信息,Elasticsearch提供了过滤器,可以根据需要获取相应的内容。

$ curl -X GET "http://127.0.0.1:9200/_cluster/state?pretty"

注意:当集群还在构建过程中,响应的cluster_uuid 字段的值可能为na,集群的状态版本可能为-1

默认情况下,集群状态请求被路由到主节点,以确保返回最新的集群状态。出于调试目的,您可以通过向查询字符串添加local=true来检索特定节点的本地集群状态。

$ curl -X GET "http://127.0.0.1:9200/_cluster/state/{metrics}/{indices}?pretty"
  • indices指的是索引,使用逗号分隔
  • metrics的值有以下选择,可以使用多个值,用逗号分隔
  • version
    集群状态版本
  • master_node
    master_node段的信息,关于集群主节点
  • nodes
    nodes段的信息,关于集群中的节点
  • routing_table
    routing_table段的信息
  • metadata
    metadata段的信息,关于配置、映射等元数据信息
  • blocks
    blocks段的信息
  • _all
    包括所有的信息

以访问nodes段为例,访问结果如下:

{
    "cluster_name": "FantuanTech-Cluster",
    "cluster_uuid": "SJ4K72_rS-qeULnr_26gFg",
    "nodes": {
        "ixSLP9-ERGaksd8-QX-LQQ": {
            "name": "FantuanTech-Node-1",
            "ephemeral_id": "4ZIEPzigRYKqbagah1I65g",
            "transport_address": "127.0.0.1:9300",
            "attributes": {
                "ml.machine_memory": "8589934592",
                "xpack.installed": "true",
                "transform.node": "true",
                "ml.max_open_jobs": "20"
            }
        }
    }
}

03

查看集群统计信息(cluster state API)

集群统计信息API用于查看集群的各种统计汇总信息,包括CPU、内存、存储、文档统计等信息。

$ curl -X GET "http://127.0.0.1:9200/_cluster/stats?human&pretty"
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "nhG2-6K6RU2kDreqsUZy6A",
  "timestamp" : 1570199646793,
  "status" : "yellow",
  "indices" : {
    "count" : 1,
    "shards" : {
      "total" : 3,
      "primaries" : 3,
      "replication" : 0.0,
      "index" : {
        "shards" : {
          "min" : 3,
          "max" : 3,
          "avg" : 3.0
        },
        "primaries" : {
          "min" : 3,
          "max" : 3,
          "avg" : 3.0
        },
        "replication" : {
          "min" : 0.0,
          "max" : 0.0,
          "avg" : 0.0
        }
      }
    },
    "docs" : {
      "count" : 0,
      "deleted" : 0
    },
    "store" : {
      "size" : "783b",
      "size_in_bytes" : 783
    },
    "fielddata" : {
      "memory_size" : "0b",
      "memory_size_in_bytes" : 0,
      "evictions" : 0
    },
    "query_cache" : {
      "memory_size" : "0b",
      "memory_size_in_bytes" : 0,
      "total_count" : 0,
      "hit_count" : 0,
      "miss_count" : 0,
      "cache_size" : 0,
      "cache_count" : 0,
      "evictions" : 0
    },
    "completion" : {
      "size" : "0b",
      "size_in_bytes" : 0
    },
    "segments" : {
      "count" : 0,
      "memory" : "0b",
      "memory_in_bytes" : 0,
      "terms_memory" : "0b",
      "terms_memory_in_bytes" : 0,
      "stored_fields_memory" : "0b",
      "stored_fields_memory_in_bytes" : 0,
      "term_vectors_memory" : "0b",
      "term_vectors_memory_in_bytes" : 0,
      "norms_memory" : "0b",
      "norms_memory_in_bytes" : 0,
      "points_memory" : "0b",
      "points_memory_in_bytes" : 0,
      "doc_values_memory" : "0b",
      "doc_values_memory_in_bytes" : 0,
      "index_writer_memory" : "0b",
      "index_writer_memory_in_bytes" : 0,
      "version_map_memory" : "0b",
      "version_map_memory_in_bytes" : 0,
      "fixed_bit_set" : "0b",
      "fixed_bit_set_memory_in_bytes" : 0,
      "max_unsafe_auto_id_timestamp" : -1,
      "file_sizes" : { }
    }
  },
  "nodes" : {
    "count" : {
      "total" : 1,
      "data" : 1,
      "coordinating_only" : 0,
      "master" : 1,
      "ingest" : 1
    },
    "versions" : [
      "6.5.4"
    ],
    "os" : {
      "available_processors" : 4,
      "allocated_processors" : 4,
      "names" : [
        {
          "name" : "Windows 10",
          "count" : 1
        }
      ],
      "mem" : {
        "total" : "7.8gb",
        "total_in_bytes" : 8482287616,
        "free" : "2.5gb",
        "free_in_bytes" : 2716463104,
        "used" : "5.3gb",
        "used_in_bytes" : 5765824512,
        "free_percent" : 32,
        "used_percent" : 68
      }
    },
    "process" : {
      "cpu" : {
        "percent" : 0
      },
      "open_file_descriptors" : {
        "min" : -1,
        "max" : -1,
        "avg" : 0
      }
    },
    "jvm" : {
      "max_uptime" : "3.4d",
      "max_uptime_in_millis" : 294220612,
      "versions" : [
        {
          "version" : "1.8.0_221",
          "vm_name" : "Java HotSpot(TM) 64-Bit Server VM",
          "vm_version" : "25.221-b11",
          "vm_vendor" : "Oracle Corporation",
          "count" : 1
        }
      ],
      "mem" : {
        "heap_used" : "238.8mb",
        "heap_used_in_bytes" : 250430752,
        "heap_max" : "1.9gb",
        "heap_max_in_bytes" : 2112618496
      },
      "threads" : 46
    },
    "fs" : {
      "total" : "88.1gb",
      "total_in_bytes" : 94684311552,
      "free" : "18.4gb",
      "free_in_bytes" : 19831750656,
      "available" : "18.4gb",
      "available_in_bytes" : 19831750656
    },
    "plugins" : [ ],
    "network_types" : {
      "transport_types" : {
        "netty4" : 1
      },
      "http_types" : {
        "netty4" : 1
      }
    }
  }
}

还可以使用Node Filter过滤器进行内容过滤。关于Node Filter的内容请参考后面章节。

04

查看集群待处理任务(cluster pending task API)

此API用于返回集群层面的已经提交但是未被执行的变更,例如创建索引、更新映射、分配分片等,一般情况下应该是空的,如果发现大量的pending task,则要检查集群是否正常。

$ curl -X GET "http://127.0.0.1s:9200/_cluster/pending_tasks?pretty"

结果如下:

{
    "tasks": []
}

05

分片重新分配(cluster reroute API)

reroute命令允许手动更改集群中各个分片的分配,例如可以显式地将分片从一个节点移动到另一个节点,可以显式地将未分配的碎片分配给特定的节点。

curl -X POST "http:127.0.0.1:9200/_cluster/reroute?pretty" -H 'Content-Type: application/json' -d'
{
    "commands" : [
        {
            "move" : {
                "index" : "test", "shard" : 0,
                "from_node" : "node1", "to_node" : "node2"
            }
        },
        {
          "allocate_replica" : {
                "index" : "test", "shard" : 1,
                "node" : "node3"
          }
        }
    ]
}
'
  • 当routing.rebalance.enable设置为true,那么reroute之后,Elasticsearch会重新进行集群的平衡。
  • 当cluster.routing.allocation设置为false,集群将禁用分片分配,只能使用reroute进行手工分配。

commands支持的参数有movecancelallocate_replica,其作用以及详细参数如下:

  • move
    用于将一个活动的分片从一个节点移动到另外一个节点。支持的请求体参数有:

reroute-move.jpg

  • cancel
    取消一个分片的分配,默认只能取消副本分片的分配,如果想要取消主分片的分配,需要指定allow_primary参数为true。支持的请求体参数有:

reroute-cacel.jpg

  • allocate_replica
    分配一个未被分配的分片到某一个节点。支持的参数如下:

reroute-allocation-replica.jpg

06

集群配置(cluster reroute API)

  • 获取集群配置
    获取显式设置的集群配置:

cluster-setting.png

获取显式设置的集群配置:

cluster-setting-default.png

  • 更新集群配置
    集群配置的更新分为持久化的、临时的更新,持久化的配置更新后集群重启仍然生效,临时的更新在集群重启后不生效。更新持久化配置:

cluster-update-setting.png

更新临时配置:

cluster-setting-transient.png

  • 重置集群配置
    重置集群配置的只需要将配置项设置为null:

cluster-reset.png

还可以使用通配符进行重置:

cluster-reset-common.png

  • 集群配置顺序
    当同时使用配置文件、配置API进行配置更新时,有效性遵循以下顺序:
  1. 临时集群配置
  2. 持久化集群配置
  3. elasticsearch.yml配置文件配置
    一般建议本地配置放到elasticsearch.yml配置文件,集群相关的配置使用settings API。
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
103 7
|
3天前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
75 54
|
3月前
|
存储 缓存 监控
|
18天前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
63 14
Elasticsearch Inference API增加对阿里云AI的支持
|
30天前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
62 3
|
1月前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
38 4
|
2月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
2月前
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
195 3
|
3月前
|
存储 缓存 监控