Elasticsearch:索引状态是红色还是黄色?为什么?

这篇具有很好参考价值的文章主要介绍了Elasticsearch:索引状态是红色还是黄色?为什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。

Elasticsearch:索引状态是红色还是黄色?为什么?

Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极强的分布式数据存储,并自动跟踪、管理和路由索引中的所有数据。

但有时事情会出错,索引会遇到或大或小的麻烦。 这通常最终会导致它们具有红色或黄色的状态。 集群将紧随其后,因为它的状态是所有索引中最差的,例如 如果一个索引为红色,则集群为红色。

如果你的集群和一些索引是红色或黄色的,你会怎么做? 那么,你需要找出原因。 你是怎样做的? 

红色或黄色是什么意思?

首先,说一下颜色的含义,因为它们看起来很复杂,但最终很简单:

  • 黄色 —— 一个或多个索引缺少(“未分配 - unassigned”)副本分片。 索引仍在工作,可以完全索引、搜索和提供数据,只是没有我们想要的那么快和可靠。
  • 丢失的碎片可能真的丢失、损坏或有其他问题; 或者集群可能正处于移动或重建这些丢失的分片的过程中。
  • 我们的工作是手动或自动重新创建这些丢失的副本以达到绿色。
  • 红色 —— 一个或多个索引缺少主分片并且无法正常工作,即它无法索引、搜索或提供数据。
  • 请注意,这是基于每个分片的,因此即使有 50 个分片,也只需要一个分片失效即可将索引和集群变为红色。
  • 我们的工作是手动查找或修复这些缺失的主索引,如果可以的话,否则索引就会丢失,必须从快照或原始源数据中重新创建。

查找红色和黄色索引

1) 第一步是确定你知道的主要问题,例如死节点、磁盘空间问题等可能产生问题的问题。 这有助于告知我们寻找什么以及我们以后如何修复它。

有时你只需要耐心等待,因为系统通常会通过移动数据来修复自身,例如将副本提升为主要副本,然后重新创建新副本,但这需要时间,从几分钟到更长,具体取决于分片数量和大小, 集群负载、磁盘速度等。

但你不能指望这一点,除非很明显系统正在自我修复。 有时事情真的坏了,这就是为什么了解历史是件好事,因为重启节点肯定会使一些索引变黄,但几分钟后又变绿。

2) 第二步是确定哪些索引有问题,有多少索引有问题。 _cat API 可以通过状态告诉我们:

GET /_cat/indices?v&health=red
GET /_cat/indices?v&health=yellow

从中我们可以了解我们有多少问题,这可能与上面讨论的任何最近事件有关。 我们还需要这个列表,以便我们可以更深入地挖掘每个索引。

3) 第三步是查看哪些分片有问题以及原因。 这与索引列表有关,但索引列表只会告诉你哪些索引有问题,现在我们需要每个分片的问题列表。

我们为此使用 _cat 接口,理想情况下使用排序和一些额外的列,例如这将列出按状态排序的索引,包括未分配的基本原因 - 查找 UNASSIGNED 状态:

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

Elasticsearch:索引状态是红色还是黄色?为什么?

这可能足以了解正在发生的事情,其中有未分配的详细信息列,我们可以从中解决问题。 但有时我们需要更多细节,特别是当我们有节点路由或其他更复杂的问题时。

我们可以询问集群为什么分片没有分配 …

为此,我们可以要求集群解释给定分片的当前分配情况和逻辑。 这有点混乱,因为我们需要上面列表中的两个分片编号(从 0 开始),并且要知道我们是否要查看主分片或副本,同样来自上面的列表。

API 调用是这样的,这里需要设置索引名,分片号,primary true/false:

GET _cluster/allocation/explain
{
  "index": ".ds-heartbeat-8.6.1-2023.03.27-000001",
  "shard": 0,
  "primary": true
}

Elasticsearch:索引状态是红色还是黄色?为什么?

这将使您更详细地了解情况,接下来要做什么取决于您在那里找到的原因。

一些常见问题包括:

  • 磁盘空间不足 —— 没有空间可以分配。请详细阅读文章 “Elasticsearch:Low disk watermark”。
  • 分片计数限制 —— 每个节点的分片太多,这在创建新索引或删除某些节点并且系统无法为它们找到位置时很常见。
  • JVM 或堆限制 —— 一些版本可以在 RAM 不足时限制分配
  • 路由或分配规则 —— 常见的 HA(Highly Available)云或大型复杂系统
  • 损坏或严重问题 —— 可能会出现更多问题,每个问题都需要特别注意或解决方案,或者在许多情况下,只需删除旧分片并添加新副本或主分片。

修复红色和黄色索引

第四步是修复问题。 修复分为几类:

  • 等待并让 Elasticsearch 修复它 —— 对于节点重启等临时情况
  • 手动分配分片 —— 有时需要解决问题
  • 检查路由/分配规则 —— 许多 HA 或复杂系统使用路由或分配规则来控制放置,随着情况的变化,这可能会创建无法分配的分片。 解释应该清楚这一点。
  • 通过将数字设置为 0 来删除所有副本 —— 也许你无法修复副本或手动移动或分配它。 在这种情况下,只要你有一个主节点(索引是黄色的,而不是红色的),你总是可以将副本计数设置为 0,等一下,然后设置回 1 或任何你想要的,使用:“index” :{“number_of_replicas”:0}

我们将在出现状态和解决方案时添加更多详细信息,但这是一个复杂的问题,并且与所有系统一样,修复会根据问题的确切细节和历史记录而有所不同。 文章来源地址https://www.toymoban.com/news/detail-408584.html

到了这里,关于Elasticsearch:索引状态是红色还是黄色?为什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么安装了SSL证书,网站还是显示不安全?

    SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL证书就是遵守SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。由于http明文方式传输缺乏安

    2024年02月02日
    浏览(83)
  • MySQl有哪些索引(种类)?索引特点?为什么要使用索引?

    普通索引:仅加速查询 唯一索引:加速查询 + 列值 唯一(可以有null) 主键索引:加速查询 + 列值 唯一(不可以有null)+ 表中只有一个 组合索引: 多列值组成一个索引 ,专门用于组合搜索,其效率大于索引合并 全文索引:对文本的内容进行分词,进行搜索 索引合并:使用

    2024年02月07日
    浏览(53)
  • 面试官灵魂拷问:什么是MySQL索引?为什么需要索引?

    关系型数据库是一种采用关系模型存储数据的数据库系统。在关系型数据库中,数据被组织成一个或多个表格(也称为关系),每个表格包含多行记录,每行记录代表一组相关数据。每个表格都有一个定义该表格中数据的结构的模式,即表格的列和每个列的数据类型。关系型

    2024年02月09日
    浏览(47)
  • 为什么网络可以ping通,还是不能ssh到目标主机?

      做运维工作,我们都是通过远程的方式去连接一台服务器或者虚拟机,很多初次做运维的朋友可能经常会遇到这样一个问题:我ping目标服务器的IP是通的,但是我通过ssh却不能连上主机。今天,就来浅谈一下,为什么你ping网络是通的,但是却不能连接到远程主机,当你弄

    2024年02月09日
    浏览(38)
  • 0062__对象指针为NULL,为什么还是可以调用成员函数

    对象指针为NULL,为什么还是可以调用成员函数_空对象指针为什么能调用函数_一颗石头崽儿的博客-CSDN博客

    2024年02月10日
    浏览(31)
  • 为什么hive表不经常用索引

    Hive 表不经常使用索引的主要原因是由于其设计初衷和使用场景的特点。下面是一些可能的解释: Hive 主要用于处理大规模数据集的批量分析任务,而不是对单个记录的实时查询。对于批处理任务,全表扫描通常是更为高效的方式,因为索引需要维护额外的数据结构并带来一

    2024年02月16日
    浏览(27)
  • 解决mysql的启动类型设置了自动,为什么电脑开机后还是需要手动启动?

    问题: 明明mysql的启动类型设置了自动,为什么电脑开机后还是需要手动启动,如下图。  解决方式: 一、ctrl+R 快捷键弹出运行框  二、输入 regedit 后回车  三、地址栏内输入  计算机HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl 后回车    四、找到Control入径后,新建一个名称为

    2024年02月14日
    浏览(38)
  • 为什么很多企业融入云计算、AI、BI却还是有30%的企业败北

    hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年+经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在这个数字化的时代,云计算、AI、BI等高科技手段已经成为了企业发展的必备工具。 然而,令人惊讶的是,尽管有许多企业积

    2024年01月24日
    浏览(40)
  • MySQL为什么选择B+树创建索引

    将磁盘中存储的所有数据记录依次加载,与给定条件对比,直到找到目标记录; 类比数组结构的线性查找,效率较低; 结合数组和链表结构(或者树结构)存储数据; 通过哈希函数(散列函数)计算哈希地址,相同输入在固定函数下输出保持不变; 哈希结构会发生哈希冲突

    2024年02月13日
    浏览(36)
  • mysql的主键索引为什么不能null

    这是一个非常奇怪且有趣的问题。可以通过官方文档进行解读 https://dev.mysql.com/doc/refman/5.7/en/glossary.html A special value in SQL, indicating the absence of data. Any arithmetic operation or equality test involving a NULL value, in turn produces a NULL result. (Thus it is similar to the IEEE floating-point concept of NaN, “not

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包