ES运维常见的十个故障诊断指令汇总

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ES运维常见的十个故障诊断指令汇总

1、查询分配未分配的原因

1.1 问题场景描述

学习 Elasticsearch 最常遇到的一种情况:分片未分配

77e4bf93ca954e979a89411d9677a58d.png


索引未分配的原因有很多种,准确的说有一共有 12 种。对于很多人来说,没有多年ES使用经验很难马上判断出索引未分配的原因,只能在网上去搜,然后一种一种方法的去试。线上出问题时间是分秒必争的。这就要求必须在最短的时间内定位问题。


1.2 诊断方式

_cluster/allocation/explain


以下为查看my_index编号为 0 的副本分片的未分配原因

GET _cluster/allocation/explain
{
  "index": "my_index",
  "shard": 0,
  "primary": false
}


{
      "node_id" : "bgLGquyZSeOKbFBTJECjOQ",
      "node_name" : "node1",
      "transport_address" : "127.0.0.1:9302",
      "node_attributes" : {
        "rack" : "rack1",
        "xpack.installed" : "true",
        "transform.node" : "false"
      },
      "node_decision" : "no",
      "deciders" : [
        {
          "decider" : "filter",
          "decision" : "NO",
          "explanation" : """node does not match index setting [index.routing.allocation.require] filters [_name:"node3"]"""
        }
      ]
    }

原因:node does not match index setting [index.routing.allocation.require] filters [_name:“node3”]


由此可见,索引分片未分配原因为分片过滤器阻挡了分片分配,查询到病症,方可对症下药。关闭过滤器即可


1.3 解决方案

不同的问题原因需要不同的解决方案,针对以上问题原因,关闭分片过滤器即可。我将在后续给出常见的分片未分配原因的不同解决方案

PUT my_index/_settings
{
  "index.routing.allocation.require._name": null
}


1.4 所有 12 种分片未分配原因汇总

以下为所有分片未分配的原因的故障码以及描述,共12种

* ALLOCATION_FAILED:    由于分片分配失败而未分配
* CLUSTER_RECOVERED:    由于完整群集恢复而未分配.
* DANGLING_INDEX_IMPORTED:  由于导入悬空索引而未分配.
* EXISTING_INDEX_RESTORED:  由于还原到闭合索引而未分配.
* INDEX_CREATED:      由于API创建索引而未分配.
* INDEX_REOPENED:       由于打开闭合索引而未分配.
* NEW_INDEX_RESTORED:     由于还原到新索引而未分配.
* NODE_LEFT:        由于承载它的节点离开集群而取消分配.
* REALLOCATED_REPLICA:    确定更好的副本位置并取消现有副本分配.
* REINITIALIZED:      当碎片从“开始”移回“初始化”时.
* REPLICA_ADDED:      由于显式添加了复制副本而未分配.
* REROUTE_CANCELLED:    由于显式取消重新路由命令而取消分配.


2、查询集群的健康状况

2.1 健康状态

  • 绿色:所有分片都可用
  • 黄色:至少有一个副本不可用,但是所有主分片都可用
  • 红色:至少有一个主分片不可用,数据不完整


可以通过一些客户端工具查看集群状态信息

5b5d06386d7d4a33a3b795f52550f8aa.png


2.2 查看状态信息

GET _cat/health

f5ac6771afc14152bcf35ba9956b4a36.png

GET _cluster/health


输出结构如下

{
  "cluster_name" : "my_cluster",    集群名称 
  "status" : "yellow",        集群健康值
  "timed_out" : false,        是否超时
  "number_of_nodes" : 3,      索引主分片数量
  "number_of_data_nodes" : 3,   数据节点数量
  "active_primary_shards" : 37,   活跃主分片数量
  "active_shards" : 65,       活跃的分片数量
  "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" : 95.58823529411765   集群中活动分片的比率,以百分比表示
}


3、查看集群中所有节点的节点属性

_cat/nodeattrs


3.1 常见使用场景

查看节点属性最常见的即查看节点的自定义属性,自定义属性用于节点标记,常被用于以下几种场景:

  • 冷热集群部署
  • 高可用集群架构部署
  • 分片分配策略部署

cd2080e203bc4339b01d623f04f79f05.png如上图所示,红框部分为通过自定义属性标记了三个节点处于不同的 rack 上,此类标记常用集群部署高可用策略等


4、查看集群中所有节点的分配信息

_cat/nodes?v


4.1 常见使用场景

此命令长用于获取每个节点的分配情况,包括获取其分配的 IP 地址、资源占用信息、角色等。

5c07868e6e03468890dfe43aa9d8386d.png


5、查询集群/索引的文档总计数

GET _cat/count


5.1 常见使用场景

此命令用于查看集群或者指定索引中的文档总计数,也可被_count API 替代,比如:

计算集群中的文档总数

GET _cat/count?v
// 返回结果:
epoch      timestamp count
1654141686 03:48:06  13342


算 product 索引中的文档总数

GET _cat/count/product?v
// 返回结果
epoch      timestamp count
1654141931 03:52:11  13


此命令可被_count API 替代

GET product/_count
// 返回结果
{
  "count" : 13,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}


6、查询集群的分片分配信息

_cat/shards


6.1 常见使用场景

常用于查看分片所处位置,包括所处哪个节点以及所处节点的 IP 地址。

常见的使用场景如:索引的生命周期管理、数据流等


6.2 使用案例

GET _cat/shards?v


返回结果如下

71f9ceeed88c493aa8860692318a200f.png


7、查询集群中索引的分片数、文档数或集群中包含哪些索引

_cat/indices


7.1 常见应用场景

此命令一般用于查看及群众包含哪些索引。可查询信息包括但不仅限于

  • 索引的健康状态
  • 索引的打开关闭状态
  • 索引名称
  • 索引文档数量
  • 被删除的文档数量
  • 主分片数量
  • 副本分片数量


7.2 使用

GET _cat/indices?v



返回结果如下c63fdbcd67ee42849dd445d4d073ae72.png


8、查询集群的快照存储信息

_cat/snapshots


8.1 常见使用场景

用于获取索引数据的 快照备份信息查询


8.2 使用

GET /_cat/snapshots?v


也可用于指定快照名称进行查询

GET /_cat/snapshots/<repository>


9、查看集群状态信息

_cluster/state


9.1 常见使用场景

用于查询集群状态元数据信息,包括:

  • 集群中的节点集
  • 所有集群级设置
  • 有关集群中索引的信息,包括它们的映射和设置
  • 集群中所有分片的位置。


10、查看集群统计信息

_cluster/stats


10.1 描述

此命令可以查询从集群范围的角度检索统计信息。API 返回基本索引指标(分片数量、存储大小、内存使用情况)和有关构成集群的当前节点的信息(数量、角色、操作系统、jvm 版本、内存使用情况、cpu 和已安装的插件)。

  • 索引到分片的映射
  • 文档技术统计
  • fielddata
  • 缓存信息
  • 段文件信息
  • 索引字段类型统计信息
  • 分词器统计信息
  • 集群节点角色统计信息


10.2 使用

 GET _cluster/stats
 // 返回结果如下
 {
  "_nodes" : {
    "total" : 3,
    "successful" : 3,
    "failed" : 0
  },
  "cluster_name" : "msb_cluster",
  "cluster_uuid" : "KhkbJ4V-TZemUBJ2vcWe9w",
  "timestamp" : 1654144248125,
  "status" : "yellow",
  "indices" : {
    "count" : 30,
    "shards" : {
      "total" : 65,
      "primaries" : 37,
      "replication" : 0.7567567567567568,
      "index" : {
        "shards" : {
          "min" : 2,
          "max" : 6,
          "avg" : 2.1666666666666665
        },
        "primaries" : {
          "min" : 1,
          "max" : 6,
          "avg" : 1.2333333333333334
        },
        "replication" : {
          "min" : 0.0,
          "max" : 1.0,
          "avg" : 0.9333333333333333
        }
      }
    },
    "docs" : {
      "count" : 13452,
      "deleted" : 2044
    },
    "store" : {
      "size_in_bytes" : 17546432,
      "total_data_set_size_in_bytes" : 17546432,
      "reserved_in_bytes" : 0
    },
    "fielddata" : {
      "memory_size_in_bytes" : 0,
      "evictions" : 0
    },
    "query_cache" : {
      "memory_size_in_bytes" : 0,
      "total_count" : 0,
      "hit_count" : 0,
      "miss_count" : 0,
      "cache_size" : 0,
      "cache_count" : 0,
      "evictions" : 0
    },
    "completion" : {
      "size_in_bytes" : 0
    },
    "segments" : {
      "count" : 126,
      "memory_in_bytes" : 370536,
      "terms_memory_in_bytes" : 242816,
      "stored_fields_memory_in_bytes" : 61872,
      "term_vectors_memory_in_bytes" : 0,
      "norms_memory_in_bytes" : 13824,
      "points_memory_in_bytes" : 0,
      "doc_values_memory_in_bytes" : 52024,
      "index_writer_memory_in_bytes" : 765980,
      "version_map_memory_in_bytes" : 0,
      "fixed_bit_set_memory_in_bytes" : 2816,
      "max_unsafe_auto_id_timestamp" : 1648427283621,
      "file_sizes" : { }
    },
    "mappings" : {
      "field_types" : [
        {
          "name" : "boolean",
          "count" : 5,
          "index_count" : 4,
          "script_count" : 0
        },
        {
          "name" : "date",
          "count" : 43,
          "index_count" : 12,
          "script_count" : 0
        },
        {
          "name" : "float",
          "count" : 14,
          "index_count" : 5,
          "script_count" : 0
        },
        {
          "name" : "geo_point",
          "count" : 3,
          "index_count" : 2,
          "script_count" : 0
        },
        {
          "name" : "geo_shape",
          "count" : 2,
          "index_count" : 2,
          "script_count" : 0
        },
        {
          "name" : "integer",
          "count" : 7,
          "index_count" : 2,
          "script_count" : 0
        },
        {
          "name" : "keyword",
          "count" : 199,
          "index_count" : 21,
          "script_count" : 0
        },
        {
          "name" : "long",
          "count" : 22,
          "index_count" : 12,
          "script_count" : 0
        },
        {
          "name" : "murmur3",
          "count" : 2,
          "index_count" : 2,
          "script_count" : 0
        },
        {
          "name" : "nested",
          "count" : 3,
          "index_count" : 3,
          "script_count" : 0
        },
        {
          "name" : "object",
          "count" : 31,
          "index_count" : 9,
          "script_count" : 0
        },
        {
          "name" : "text",
          "count" : 56,
          "index_count" : 20,
          "script_count" : 0
        }
      ],
      "runtime_field_types" : [ ]
    },
    "analysis" : {
      "char_filter_types" : [ ],
      "tokenizer_types" : [ ],
      "filter_types" : [ ],
      "analyzer_types" : [ ],
      "built_in_char_filters" : [ ],
      "built_in_tokenizers" : [ ],
      "built_in_filters" : [ ],
      "built_in_analyzers" : [
        {
          "name" : "ik_max_word",
          "count" : 2,
          "index_count" : 1
        }
      ]
    },
    "versions" : [
      {
        "version" : "7.13.0",
        "index_count" : 30,
        "primary_shard_count" : 37,
        "total_primary_bytes" : 8764317
      }
    ]
  },
  "nodes" : {
    "count" : {
      "total" : 3,
      "coordinating_only" : 0,
      "data" : 0,
      "data_cold" : 0,
      "data_content" : 3,
      "data_frozen" : 0,
      "data_hot" : 3,
      "data_warm" : 0,
      "ingest" : 3,
      "master" : 3,
      "ml" : 0,
      "remote_cluster_client" : 0,
      "transform" : 0,
      "voting_only" : 0
    },
    "versions" : [
      "7.13.0"
    ],
    "os" : {
      "available_processors" : 24,
      "allocated_processors" : 24,
      "names" : [
        {
          "name" : "Windows 10",
          "count" : 3
        }
      ],
      "pretty_names" : [
        {
          "pretty_name" : "Windows 10",
          "count" : 3
        }
      ],
      "architectures" : [
        {
          "arch" : "amd64",
          "count" : 3
        }
      ],
      "mem" : {
        "total_in_bytes" : 51175010304,
        "free_in_bytes" : 24862060544,
        "used_in_bytes" : 26312949760,
        "free_percent" : 49,
        "used_percent" : 51
      }
    },
    "process" : {
      "cpu" : {
        "percent" : 0
      },
      "open_file_descriptors" : {
        "min" : -1,
        "max" : -1,
        "avg" : 0
      }
    },
    "jvm" : {
      "max_uptime_in_millis" : 6379434,
      "versions" : [
        {
          "version" : "1.8.0_301",
          "vm_name" : "Java HotSpot(TM) 64-Bit Server VM",
          "vm_version" : "25.301-b09",
          "vm_vendor" : "Oracle Corporation",
          "bundled_jdk" : true,
          "using_bundled_jdk" : false,
          "count" : 3
        }
      ],
      "mem" : {
        "heap_used_in_bytes" : 873520008,
        "heap_max_in_bytes" : 3113877504
      },
      "threads" : 215
    },
    "fs" : {
      "total_in_bytes" : 148684926976,
      "free_in_bytes" : 31089479680,
      "available_in_bytes" : 31089479680
    },
    "plugins" : [
      {
        "name" : "analysis-ik",
        "version" : "7.13.0",
        "elasticsearch_version" : "7.13.0",
        "java_version" : "1.8",
        "description" : "IK Analyzer for Elasticsearch",
        "classname" : "org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin",
        "extended_plugins" : [ ],
        "has_native_controller" : false,
        "licensed" : false,
        "type" : "isolated"
      },
      {
        "name" : "mapper-murmur3",
        "version" : "7.13.0",
        "elasticsearch_version" : "7.13.0",
        "java_version" : "1.8",
        "description" : "The Mapper Murmur3 plugin allows to compute hashes of a field's values at index-time and to store them in the index.",
        "classname" : "org.elasticsearch.plugin.mapper.MapperMurmur3Plugin",
        "extended_plugins" : [ ],
        "has_native_controller" : false,
        "licensed" : false,
        "type" : "isolated"
      }
    ],
    "network_types" : {
      "transport_types" : {
        "security4" : 3
      },
      "http_types" : {
        "security4" : 3
      }
    },
    "discovery_types" : {
      "zen" : 3
    },
    "packaging_types" : [
      {
        "flavor" : "default",
        "type" : "zip",
        "count" : 3
      }
    ],
    "ingest" : {
      "number_of_pipelines" : 4,
      "processor_stats" : {
        "circle" : {
          "count" : 0,
          "failed" : 0,
          "current" : 0,
          "time_in_millis" : 0
        },
        "foreach" : {
          "count" : 0,
          "failed" : 0,
          "current" : 0,
          "time_in_millis" : 0
        },
        "gsub" : {
          "count" : 0,
          "failed" : 0,
          "current" : 0,
          "time_in_millis" : 0
        },
        "script" : {
          "count" : 0,
          "failed" : 0,
          "current" : 0,
          "time_in_millis" : 0
        }
      }
    }
  }
}


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
5月前
|
缓存 运维 应用服务中间件
运维系列.Nginx配置中的高级指令和流程控制
运维系列.Nginx配置中的高级指令和流程控制
194 1
|
5月前
|
运维 数据库
zookeeper运维常用指令
zookeeper运维常用指令
|
8月前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
运维 关系型数据库 MySQL
MySQL运维指令记录
记录一些常用的MySQL运维指令,持续更新。。。
|
运维 IDE Linux
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
70 4
|
3天前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
40 22
|
2月前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
97 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####

热门文章

最新文章