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请求参数
- API响应参数
响应结果中要特别关注status、unassigned_shards、number_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支持的参数有move、cancel、allocate_replica,其作用以及详细参数如下:
- move
用于将一个活动的分片从一个节点移动到另外一个节点。支持的请求体参数有:
- cancel
取消一个分片的分配,默认只能取消副本分片的分配,如果想要取消主分片的分配,需要指定allow_primary参数为true。支持的请求体参数有:
- allocate_replica
分配一个未被分配的分片到某一个节点。支持的参数如下:
06
集群配置(cluster reroute API)
- 获取集群配置
获取显式设置的集群配置:
获取显式设置的集群配置:
- 更新集群配置
集群配置的更新分为持久化的、临时的更新,持久化的配置更新后集群重启仍然生效,临时的更新在集群重启后不生效。更新持久化配置:
更新临时配置:
- 重置集群配置
重置集群配置的只需要将配置项设置为null:
还可以使用通配符进行重置:
- 集群配置顺序
当同时使用配置文件、配置API进行配置更新时,有效性遵循以下顺序:
- 临时集群配置
- 持久化集群配置
- elasticsearch.yml配置文件配置
一般建议本地配置放到elasticsearch.yml配置文件,集群相关的配置使用settings API。