更多技术文章,欢迎关注微信公众号“运维之美”
Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。本篇不探究原理,只总结运维干货,对于运维es来说,掌握本篇es常用的命令和监控,就基本够用了,快来学习吧 。
注:
下面所有curl命令后默认都有-u :认证
创建索引
[root@localhost~]#curl -u user:'' -X PUT 'http://localhost:9200/test'
{"acknowledged":true,"shards_acknowledged":true,"index":"test"}
查看所有索引
[root@localhost~]# curl -u user:'' -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:'' -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:'' -X DELETE 'http://localhost:9200/test'
{"acknowledged":true}
索引操作命令
/_stats?pretty” #查看索引的统计信息
/_cluster/health?level=indices&pretty #查看索引健康状态
/_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 接口获取
命令汇总
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 想象成一个需要及时调查的警告。
至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。
Elasticsearch可以通过在prometheus中安装es_exporter实现各种指标监控
- alert: elasticsearch容器服务异常
expr: up{job="es_exporter"} == 0
for: 2m
labels:
severity: warning
annotations:
summary: ""节点:{{ $labels.node_ip }} 上的es容器服务异常
description: "节点:{{ $labels.node_ip }} 上的es容器服务异常,请检查"
- 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 }}"
- 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 }}"
- 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 }}"
- 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
通过命令行管理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集群。
感兴趣的朋友可以安装试用一下,有用的话记得关注点赞哦!