干货 | Elasticsearch 运维实战常用命令清单

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 球友反馈的实战问题:关于es的运维相关的, 遇到一些问题!第一个问题:是关于集群迁移的,目前需要 针对20亿的数据做迁移,如果文件迁移,需要停机时间太久,除了重新灌入,不知 道有没有更好的方式?第二个问题:我们es集群的读写都很频繁,如何把控在相互不影响性能,当前情况是会有相互影响!第三个问题:之前做版本升级,升级后部分分片不可用,但是不知道什么原因导致?

image.png

链接

球友反馈的实战问题:


关于es的运维相关的, 遇到一些问题!


第一个问题:是关于集群迁移的,目前需要 针对20亿的数据做迁移,如果文件迁移,需要停机时间太久,除了重新灌入,不知 道有没有更好的方式?


第二个问题:我们es集群的读写都很频繁,如何把控在相互不影响性能,当前情况是会有相互影响!


第三个问题:之前做版本升级,升级后部分分片不可用,但是不知道什么原因导致?


最后:就是关于数据的扩容,备份,高可用这方面...... 扩容其实 面对一个问题就是你之前的es  mapping 如何建, 如果这个没规划好,增加节点的意义也不大了


另外就是面对现在集群状态黄色和红色,没有体系化的思路去排查问题到底出在哪儿?


更多的是点对点去临时解决,积累的知识是碎片化的。


的确,类似问题经常被问到,是时候整合梳理一下了。


1、集群状态非绿排查清单

1.1 集群状态的含义

红色:至少一个主分片未分配成功;


黄色:至少一个副本分片未分配成功;


绿色:全部主&副本都分配成功。


1.2 排查实战

1.2.1 查看集群状态

GET _cluster/health

返回状态举例:"status" : "red", 红色,至少一个主分片未分配成功。


1.2.2 到底哪个节点出现了红色或者黄色问题呢?

GET _cluster/health?level=indices

如下的方式,更明快直接


GET /_cat/indices?v&health=yellow

GET /_cat/indices?v&health=red

找到对应的索引。


1.2.3 到底索引的哪个分片出现了红色或者黄色问题呢?

GET _cluster/health?level=shards

1.2.4 到底什么原因导致了集群变成红色或者黄色呢?

GET _cluster/allocation/explain

返回核心信息解读举例:


"current_state" : "unassigned",——未分配

 "unassigned_info" : {

   "reason" : "INDEX_CREATED",——原因,索引创建阶段

   "at" : "2020-01-29T07:32:39.041Z",

   "last_allocation_status" : "no"

 },

 "explanation" : """node does not match index setting [index.routing.allocation.require] filters [box_type:"hot"]"""

       }

根本原因,shard分片与节点过滤类型不一致 到此,找到了根本原因,也就知道了对应解决方案。


1.3 扩展思考:类似 "current_state" : "unassigned",——未分配 还有哪些?

实战:


GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.2/cat-shards.html


未分配状态及原因解读:


(1)INDEX_CREATED

Unassigned as a result of an API creation of an index.

(2)CLUSTER_RECOVERED

Unassigned as a result of a full cluster recovery.

(3)INDEX_REOPENED

Unassigned as a result of opening a closed index.

(4)DANGLING_INDEX_IMPORTED

Unassigned as a result of importing a dangling index.

(5)NEW_INDEX_RESTORED

Unassigned as a result of restoring into a new index.

(6)EXISTING_INDEX_RESTORED

Unassigned as a result of restoring into a closed index.

(7)REPLICA_ADDED

Unassigned as a result of explicit addition of a replica.

(8)ALLOCATION_FAILED

Unassigned as a result of a failed allocation of the shard.

(9)NODE_LEFT

Unassigned as a result of the node hosting it leaving the cluster.

(10)REROUTE_CANCELLED

Unassigned as a result of explicit cancel reroute command.

(11)REINITIALIZED

When a shard moves from started back to initializing, for example, with shadow replicas.

(12)REALLOCATED_REPLICA

A better replica location is identified and causes the existing replica allocation to be cancelled.

2、节点间分片移动

适用场景:手动移动分配分片。将启动的分片从一个节点移动到另一节点。


POST /_cluster/reroute

{

 "commands": [

   {

     "move": {

       "index": "indexname",

       "shard": 1,

       "from_node": "nodename",

       "to_node": "nodename"

     }

   }

 ]

}

3、集群节点优雅下线

适用场景:保证集群颜色绿色的前提下,将某个节点优雅下线。


PUT /_cluster/settings

{

 "transient": {

   "cluster.routing.allocation.exclude._ip": "122.5.3.55"

 }

}

4、强制刷新

适用场景:刷新索引是确保当前仅存储在事务日志中的所有数据也永久存储在Lucene索引中。


POST /_flush

注意:这和 7.6 版本之前的同步刷新(未来8版本+会废弃同步刷新)一致。


POST /_flush/synced

5、更改并发分片的数量以平衡集群

适用场景:


控制在集群范围内允许多少并发分片重新平衡。默认值为2。


PUT /_cluster/settings

{

 "transient": {

   "cluster.routing.allocation.cluster_concurrent_rebalance": 2

 }

}

6、更改每个节点同时恢复的分片数量

适用场景:


如果节点已从集群断开连接,则其所有分片将都变为未分配状态。经过一定的延迟后,分片将分配到其他位置。每个节点要恢复的并发分片数由该设置确定。


PUT /_cluster/settings

{

 "transient": {

   "cluster.routing.allocation.node_concurrent_recoveries": 6

 }

}

7、调整恢复速度

适用场景:


为了避免集群过载,Elasticsearch限制了分配给恢复的速度。你可以仔细更改该设置,以使其恢复更快。


如果此值调的太高,则正在进行的恢复可能会消耗过多的带宽和其他资源,这可能会使集群不稳定。


PUT /_cluster/settings

{

 "transient": {

   "indices.recovery.max_bytes_per_sec": "80mb"

 }

}

8、清除节点上的缓存

适用场景:如果节点达到较高的JVM值,则可以在节点级别上调用该API 以使 Elasticsearch 清理缓存。


这会降低性能,但可以使你摆脱OOM(内存不足)的困扰。


POST /_cache/clear

9、调整断路器

适用场景:为了避免在Elasticsearch中进入OOM,可以调整断路器上的设置。这将限制搜索内存,并丢弃所有估计消耗比所需级别更多的内存的搜索。


注意:这是一个非常精密的设置,你需要仔细校准。


PUT /_cluster/settings

{

 "persistent": {

   "indices.breaker.total.limit": "40%"

 }

}

10、集群迁移

适用场景:集群数据迁移、索引数据迁移等。


方案一、 针对索引部分或者全部数据,reindexPOST _reindex

{

 "source": {

   "index": "my-index-000001"

 },

 "dest": {

   "index": "my-new-index-000001"

 }

}

方案二:借助第三方工具迁移索引或者集群

elasticdump


elasticsearch-migration


工具本质:scroll + bulk 实现。


11、集群数据备份和恢复

适用场景:高可用业务场景,定期增量、全量数据备份,以备应急不时之需。


PUT /_snapshot/my_backup/snapshot_hamlet_index?wait_for_completion=true

{

 "indices": "hamlet_*",

 "ignore_unavailable": true,

 "include_global_state": false,

 "metadata": {

   "taken_by": "mingyi",

   "taken_because": "backup before upgrading"

 }

}

POST /_snapshot/my_backup/snapshot_hamlet_index/_restore

小结

文章开头的几个运维问题已经解决,其他性能相关的问题,后面会有另外的博文做梳理。


运维工作包罗万象,文章内容只是抛砖引玉,开了个头。


牛逼的集群运维需要结合可视化工具(如:kibana,cerebro,elastic-hd,Prometheus + grafana,结合业务自研工具如 阿里云Eyou等)能极大提高效率。


你的Elasticsearch 运维的经验、心得、体会,欢迎留言交流,我们一起完善清单。


参考:


Elasticsearch 官方文档


https://logz.io/blog/elasticsearch-cheat-sheet/


更多推荐:


严选 | Elasticsearch史上最全最常用工具清单


干货 | Elasticsearch Top10 监控指标

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
167 64
|
26天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
138 3
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
2月前
|
运维 监控 网络协议
|
16天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
38 4
|
17天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
41 3
|
18天前
|
消息中间件 运维 UED
消息队列运维实战:攻克消息丢失、重复与积压难题
消息队列(MQ)作为分布式系统中的核心组件,承担着解耦、异步处理和流量削峰等功能。然而,在实际应用中,消息丢失、重复和积压等问题时有发生,严重影响系统的稳定性和数据的一致性。本文将深入探讨这些问题的成因及其解决方案,帮助您在运维过程中有效应对这些挑战。
24 1
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
25天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
124 0
下一篇
无影云桌面