更多技术文章,欢迎关注微信公众号“运维之美”
学会Elasticsearch中间件,看这篇就够了)
Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。本篇不探究原理,只总结运维干货,对于运维es来说,掌握本篇es常用的命令和监控,就基本够用了,快来学习吧 。
注:
下面所有curl命令后默认都有-u :认证
- v参数用于展示请求的详细信息
- pretty参数:用于它用于格式化响应结果,使其更易读。通过将pretty参数设置为true,可以在响应中的缩进和换行符都格式化展示
01 索引相关
创建索引
[root@localhost~]#curl -u user:'<password>' -X PUT 'http://localhost:9200/test'
{"acknowledged":true,"shards_acknowledged":true,"index":"test"}
查看所有索引
[root@localhost~]# curl -u user:'<password>' -X GET -H 'Content-Type:application/json' 'http://localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open test SSuzKOqIT_mkc_FFYxs84Q 1 1 0 0 416b 208b
查看指定索引
[root@localhost~]#curl -u user:'<password>' -XGET 'http://172.26.182.102:9200/test'
{"test":{"aliases":{},"mappings":{},"settings":{"index":{"creation_date":"1699602932566","number_of_shards":"1","number_of_replicas":"1","uuid":"D2nxEYndS563x5q0cqQA6g","version":{"created":"7090399"},"provided_name":"test"}}}}
删除指定索引
[root@localhost~]# curl -u user:'<password>' -X DELETE 'http://localhost:9200/test'
{"acknowledged":true}
索引操作命令
/_stats?pretty” #查看索引的统计信息
/_cluster/health?level=indices&pretty #查看索引健康状态
02 分片操作
/_cluster/health?level=shards&pretty #查看分片健康状态
/_cat/shards/xxxx?v&pretty #获取索引的分片信息
/_cat/shards #查询分片分配情况,这将返回索引的分片分配情况,
包括每个分片所在的节点和分片状态等。
说明:shard是分片序号,prirep是分片类型 r备分片 p主分片,store是分片大小,如下就是p主分片和r备分片放在不同节点
root@localhost ~]# curl -u user:'password' -H 'Content-Type:application/json' -XGET 'http://localhost:9200/_cat/shards/test?v&pretty'
index shard prirep state docs store ip node
test 0 p STARTED 0 208b 172.27.1.127 es-host3.default
test 0 r STARTED 0 208b 172.27.0.192 es-host2.default
设置自动分片平衡
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable": "all"
}
}
这将启用自动分片平衡,使Elasticsearch自动在节点之间迁移分片以实现负载均衡。需要注意的是,分片迁移可能会对集群的性能产生影响,特别是在大规模的集群和大量数据的情况下。在进行分片迁移操作之前,建议先进行充分的规划和测试.
当然你也可以手动迁移分片,将index_name替换为要迁移的索引名称,shard_number替换为要迁移的分片编号,from_node替换为源节点的ID,to_node替换为目标节点的ID。这将手动将分片从一个节点移动到另一个节点。
迁移不可将同一个分片的主备分片都存放一个节点
迁移示例
curl -H 'Content-Type:application/json' -XPOST -u user:'password' 'http://localhost:9200/_cluster/reroute' -d
{
"commands": [
{
"move": {
"index": "filesys",
"shard": 8,
"from_node": "3BSzb9B",
"to_node": "tahW8VN"
}
}
]
}
#迁移索引filesys的8号分片从“3BSzb9B”节点到“tahW8VN”节点
#节点名称可以从 /_cat/node?v 接口获取
03 集群相关
命令汇总
GET /_cat/nodes:查看所有节点
GET /_cat/master:查看主节点
GET /_cat/health:查看 es 健康状况
GET /_nodes/stats #查看节点统计信息
GET /_nodes/hot_threads #查询节点热线程:这将返回节点的热线程信息,
用于识别导致节点性能问题的线程。
GET /_cluster/health #查看节点健康状况
GET /_cluster/stats #查看集群统计信息
GET /_cluster/settings #查看集群设置
GET /_cat/nodes?h=heap.max #查看节点堆内存
green
所有的主分片和副本分片都已分配。你的集群是 100% 可用
- yellow
所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。
- red
至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
- number_of_nodes 和 number_of_data_nodes 这个命名完全是自描述的。
- active_primary_shards 指出你集群中的主分片数量。这是涵盖了所有索引的汇总值。
- active_shards 是涵盖了所有索引的_所有_分片的汇总值,即包括副本分片。
- relocating_shards 显示当前正在从一个节点迁往其他节点的分片的数量。通常来说应该是 0,不过在 Elasticsearch
发现集群不太均衡时,该值会上涨。比如说:添加了一个新节点,或者剔除了一个节点。 - initializing_shards 是刚刚创建的分片的个数。比如,当你刚创建第一个索引,分片都会短暂处于 initializing
状态。这通常会是一个临时事件,分片不应该长期停留在 initializing 状态。你还可能在节点刚重启的时候看到
initializing 分片:当分片从磁盘上加载后,它们会从 initializing 状态开始。 - unassigned_shards
是已经在集群状态中存在的分片,但是实际在集群里又找不着。通常未分配分片的来源是未分配的副本。比如,一个有 5 分片和 1
副本的索引,在单节点集群上,就会有 5 个未分配副本分片。如果你的集群是 red 状态,也会长期保有未分配分片(因为缺少主分片)
04 关于ES的监控
Elasticsearch可以通过在prometheus中安装es_exporter实现各种指标监控
- elasticsearch容器状态监控
- alert: elasticsearch容器服务异常
expr: up{job="es_exporter"} == 0
for: 2m
labels:
severity: warning
annotations:
summary: ""节点:{{ $labels.node_ip }} 上的es容器服务异常
description: "节点:{{ $labels.node_ip }} 上的es容器服务异常,请检查"
- elasticsearch集群健康状态yellow监控
- alert: ElasticsearchClusterYellow
expr: elasticsearch_cluster_health_status{color="yellow"} == 1
for: 0m
labels:
severity: warning
annotations:
summary: Elasticsearch Cluster Yellow (instance {{ $labels.instance }})
description: "Elastic Cluster Yellow status\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- elasticsearch集群健康状态red监控
- alert: ElasticsearchClusterRed
expr: elasticsearch_cluster_health_status{color="red"} == 1
for: 0m
labels:
severity: critical
annotations:
summary: Elasticsearch Cluster Red (instance {{ $labels.instance }})
description: "Elastic Cluster Red status\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- elasticsearch集群节点数量<3
- alert: ElasticsearchHealthyNodes
expr: elasticsearch_cluster_health_number_of_nodes < 3
for: 0m
labels:
severity: critical
annotations:
summary: Elasticsearch Healthy Nodes (instance {{ $labels.instance }})
description: "Missing node in Elasticsearch cluster\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- elasticsearch数据磁盘使用率超过90%
- alert: ElasticsearchDiskOutOfSpace
expr: elasticsearch_filesystem_data_available_bytes / elasticsearch_filesystem_data_size_bytes * 100 < 10
for: 0m
labels:
severity: critical
annotations:
summary: Elasticsearch disk out of space (instance {{ $labels.instance }})
description: "The disk usage is over 90%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}
更多监控指标
https://samber.github.io/awesome-prometheus-alerts/rules
05 常用的Elasticsearch管理工具
通过命令行管理es集群,通常对于运维人员能力要求较高,Elasticsearch也有很多的管理和监控工具,用于简化和便捷地管理Elasticsearch集群。以下是一些常用的Elasticsearch管理工具
-
Kibana:Kibana是一个开源的数据可视化平台,可以用于管理和监控Elasticsearch集群。它提供了一个用户友好的Web界面,用于创建和管理索引、执行查询、创建仪表板和可视化等。
-
Elasticsearch Curator:Elasticsearch
Curator是一个用于管理和维护Elasticsearch集群的工具。它可以用于定期清理过期的索引、优化索引、快照和还原等操作。 -
Elasticsearch HQ:Elasticsearch
HQ是一款开源的解决方案,基于Web的图形化界面,用于监控和管理Elasticsearch集群。它提供了实时的集群状态、节点健康状况、索引和分片信息、查询性能等。
-
Elasticsearch Head:Elasticsearch
Head是一个基于Web的图形化界面,用于浏览和管理Elasticsearch集群。它可以查看索引、文档、映射、查询等信息,并提供一些简单的操作功能。
-
Elastic Cloud:Elastic
Cloud是Elasticsearch官方提供的托管服务,用于简化Elasticsearch集群的部署和管理。它提供了一个易于使用的控制台,可以轻松地创建、扩展和监控Elasticsearch集群。
感兴趣的朋友可以安装试用一下,有用的话记得关注点赞哦!