elasticsearch如何定位红色或黄色的索引

news/2024/9/23 1:43:27/

文章目录

  • 集群健康状态的解读
  • 如何定位黄色的索引
    • 确定我们所能知道的主要问题
    • 确定哪些索引有问题,多少索引有问题
    • 查看有问题的分片及其原因
    • 进一步定位未分配的原因
    • 对症下药,解决问题
  • 如何定位红色的索引
    • 模拟场景使集群变红色
    • 定位是哪个索引、哪个分片
    • 解决问题

集群健康状态的解读

  • 分片健康
    • 红:至少有一个主分片没有分配
    • 黄:至少有一个副本没有分配
    • 绿:主副本分片全部正常分配
  • 索引健康:最差的分片的状态
  • 集群健康:最差的索引的状态

如何定位黄色的索引

确定我们所能知道的主要问题

例如节点宕机、磁盘空间(磁盘使用逼近或超过警戒水位线,磁盘使用率达到85%、90%甚至95%)等问题,这些问题很可能会造成集群状态的变化。这些外部表现明显的问题便于我们追溯问题,形成针对性的解决方案。

面对这种场景,我们有时只需要耐心等待,因为系统通常会通过移动数据来自我修复。

❑举例1:重新启动则会经历集群由红色变为黄色,再由黄色变为绿色的过程。

❑举例2:一个节点的主分片出了问题,系统会将副本分片升级为主分片,然后重新创建新副本,但这需要几分钟到更长的时间,具体取决于分片数量、大小、集群负载、磁盘速度等。

# 检查集群状态,查看是否有节点丢失,有多少分片无法分配
GET /_cluster/health/

确定哪些索引有问题,多少索引有问题

通过_cat API的返回结果,我们可以知道这一点。

GET cat/indices?v&health=red
GET cat/indices?v&health=yellow
GET cat/indices?v&health=green

其中黄色索引如图14-4所示。
在这里插入图片描述

查看有问题的分片及其原因

为此我们应该使用_cat API。该API用于查询集群中的所有分片信息,包括节点名称、索引名、分片编号、是否为主分片、分片状态、存储方式、分片大小、未分配原因和详细信息,并按照存储方式和索引名称进行排序。

GET /_cat/shards?v&h=n,index,shard,prirep,state,sto,sc,unassigned.reason, unassigned.details&s=sto,index

上述API各个细分参数的含义如下。

❑v:显示表头。

❑h:指定要在结果中显示的列。在这个例子中,它被设置为n(节点名称)、index(索引名)、shard(分片编号)、prirep(是否为主分片)、state(分片状态)、sto(存储方式)、sc(分片大小)、unassigned.reason(未分配原因)和unassigned.details(未分配详细信息)。

❑s:指定对结果进行排序的列。在这个例子中,它被设置为sto(存储方式)和index(索引名称)。

执行结果如图

在这里插入图片描述
其中,unassigned.reason字段表示未分配分片的原因,返回值如表

在这里插入图片描述
虽然未分配原因已经很详细了,但是有时候我们需要更多细节,特别是当我们有节点路由或遇到其他更复杂的问题时。

进一步定位未分配的原因

我们继续探究集群为什么不分配分片。为此,让集群进一步返回给定分片的当前分配情况和逻辑。这需要结合上一步的返回结果,对_cluster/allocation/explain API进行修改。

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

以上3个参数都是可选参数,含义分别如下。

❑index:索引名称。

❑Shard:分片数。

❑Primary:是否是主分片。

在这里插入图片描述
在单节点集群上为新建的索引my_index_0602设置了副本分片,导致副本分片无法分配,所以分片状态呈现黄色。

current_state字段表示数据分片在Elasticsearch集群中的当前状态。unassigned是其中一种状态,表示该分片当前未被分配到任何节点。除此之外,还有以下可能的状态。

❑initializing:分片正在初始化,但尚未开始提供服务。

❑started:分片已经成功初始化并且正在提供服务。

❑relocating:分片正在从一个节点迁移到另一个节点。

对症下药,解决问题

修补方法分为几类。

1)等待Elasticsearch集群自行修复。这种方式适用于临时状况、集群启动阶段。操作方法是节点重启。

2)将副本设置为0,即删除所有副本。针对场景是既无法修复副本,也无法手动移动或分配副本的情况。在这种情况下,只要拥有主分片(健康状态为黄色,而不是红色),就可以始终使用以下命令将副本数设置为0,等待给定响应时间,再将其设置为1或任意一个业务场景需要的值。

PUT my_index_0517/_settings
{"index": {"number_of_replicas": 0}
}

3)借助reroute API手动分配分片。举例如下,该代码共做了移动分片(move)和分配副本(allocate_replica)两个操作。

POST /_cluster/reroute
{"commands": [{"move": {"index": "test","shard": 0,"from_node": "nodel","to node": "node2"}},{"allocate replica": {"index": "test","shard": 1,"node": "node3"}}]
}
  1. 检查路由、分配规则。许多高可用或复杂的系统使用路由或分配规则来控制分片分配,随着情况的变化,可能会出现无法分配的分片。这个时候,可以使用explain API帮助排查问题。

如何定位红色的索引

模拟场景使集群变红色

DELETE mytest
PUT mytest
{"settings":{"number_of_shards":1,"number_of_replicas":0,"index.routing.allocation.require.box_type":"hot"}
}

在这里插入图片描述

定位是哪个索引、哪个分片

GET cat/indices?v&health=red

在这里插入图片描述

GET /_cat/shards?v&h=n,index,shard,prirep,state,sto,sc,unassigned.reason, unassigned.details&s=sto,index

在这里插入图片描述

GET /_cluster/allocation/explain
{"index": "mytest","shard": 0,"primary": true
}

在这里插入图片描述

意思是主分片没有办法分配,是应为没有hot属性的节点

解决问题

DELETE mytestPUT mytest
{"settings":{"number_of_shards":1,"number_of_replicas":0}
}GET /_cluster/health/

在这里插入图片描述


http://www.ppmy.cn/news/1462184.html

相关文章

Web测试中的BUG定位与分析

在Web测试过程中,页面内容或数据显示错误、不显示等问题是常见的挑战。为了高效地定位并解决这些问题,我们可以利用浏览器自带的开发者工具、数据库等工具进行排查和分析定位BUG。 一、发现BUG 保存现场并复现:遇到问题时,首先截…

Linux下的Rsync简介

Linux的rsync服务 rsync 是一个用于文件和目录同步的工具,广泛应用于Linux系统。它的主要功能包括本地和远程文件的同步、数据备份和镜像。rsync 在同步过程中只传输差异部分,从而大大提高了效率。 功能 文件和目录同步:将文件和目录从一个…

苹果MacOS系统使用微软远程桌面连接Windows电脑桌面详细步骤

文章目录 前言1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1.2 局域网远程控制windows 2. 测试Mac公网远程控制windows2.1 在windows电脑上安装cpolar2.2 Mac公网远程windows 3. 配置公网固定TCP地址 前言 日常工作生活中,有时候会涉及到不同设备不同操作系…

鸿蒙HarmonyOS Next应用开发需要学什么语言

鸿蒙HarmonyOS Next应用开发需要学什么语言? 鸿蒙HarmonyOS Next作为华为自主研发的操作系统,其在应用开发方面有着独特的需求和优势。对于想要从事鸿蒙应用开发的开发者来说,掌握合适的编程语言是至关重要的。本文将详细探讨鸿蒙HarmonyOS N…

8.Docker微服务实战

文章目录 1、创建微服务2、通过Dockerfile发布微服务 1、创建微服务 创建空项目并在其中创建一个Module ​ 这里使用start.aliyun.com代替start.spring.io,这样可以使用jdk8。 选择需要的配置或者直接在pom文件中手动添加 <?xml version"1.0" encoding"…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…

Dropzone 4 for Mac:一拖即达,文件处理更高效!

在繁忙的工作中&#xff0c;你是否曾因频繁切换应用程序和文件夹而烦恼&#xff1f;Dropzone 4 for Mac&#xff0c;这款强大的文件拖拽操作工具&#xff0c;将彻底改变你的工作方式&#xff01; 只需简单地将文件、文本或图片拖放到Dropzone图标上&#xff0c;即可快速执行各种…

C语言游戏实战(12):植物大战僵尸(坤版)

植物大战僵尸 前言&#xff1a; 本游戏使用C语言和easyx图形库编写&#xff0c;通过这个项目我们可以深度的掌握C语言的各种语言特性和高级开发技巧&#xff0c;以及锻炼我们独立的项目开发能力&#xff0c; 在开始编写代码之前&#xff0c;我们需要先了解一下游戏的基本规则…