• ElasticSearch--排查集群健康状态是Red、Yellow的问题


    原文网址:ElasticSearch--排查集群健康状态是Red、Yellow的问题_IT利刃出鞘的博客-CSDN博客

    简介

    说明

            本文介绍ElasticSearch的红色、黄色、绿色状态的含义以及如何将其变为绿色(恢复正常)。

    相关网址

    ElasticSearch--查看健康状态(health)的方法(API)_IT利刃出鞘的博客-CSDN博客

    什么是副本?

            在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于某种原因消失了,这种情况下,有一个故障转移机制非常有用,并且也是强烈
    推荐的。为此,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫作复制分片,或者直接叫副本。

    副本之所以重要,有以下两个主要原因:

    1. 在分片/节点失败的情况下,保证高可用性。因为这个原因,复制分片不与主分片置于同一节点上,这一点非常重要。
    2. 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

            总之,每个索引可以被分成多个分片。一个索引可以有一至多个副本。一旦有了副本,每个索引就有了主分片(作为复制源的原来的分片)和副本分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,可以在任何时候动态地改变副本的数量,但是事后不能改变分片的数量。

    颜色的含义

    颜色含义影响
    绿色

    所有的主分片和副本分片都可用。

    这是最健康的状态。
    黄色所有的主分片可用,但至少一个副本分片不可用。

    数据都是可用的。

    搜索性能下降;数据有丢失风险。

    红色至少一个主分片不可用。

    一些数据以及索引的某些部分不可用。

    部分数据仍然可以查到。

    未分片的原因(unassigned)

    正常情况导致的

            下边这些会导致unassigned,但过一会儿一般能自动恢复正常。

    1. INDEX_CREATED
      1. 由于 create index api 创建索引导致,索引创建过程中,把索引的全部分片分配完毕需要一个过程,在全部分片分配完毕之前,该索引会处于短暂的 RED 或 YELLOW 状态。因此监控系统如果发现集群 RED,不一定代表出现了故障。
    2. CLUSTER_RECOVERED
      1. 集群完全重启时,所有分片都被标记为未分配状态,因此在集群完全重启时的启动阶段,reason属于此种类型。
    3. INDEX_REOPENED
      1. open 一个之前 close 的索引, reopen 操作会将索引分配重新分配。
    4. NEW_INDEX_RESTORED
      1. 从快照恢复到一个新索引。
    5. EXISTING_INDEX_RESTORED,
      1. 从快照恢复到一个关闭状态的索引。
    6. REPLICA_ADDED
      1. 增加分片副本。
    7. NODE_LEFT
      1. 由于节点离线。
    8. REROUTE_CANCELLED
      1. 由于显式的cancel reroute命令。
    9. REINITIALIZED
      1. 由于分片从 started 状态转换到 initializing 状态。
    10. REALLOCATED_REPLICA
      1. 由于迁移分片副本。
    11. PRIMARY_FAILED
      1. 初始化副分片时,主分片失效。
    12. FORCED_EMPTY_PRIMARY
      1. 强制分配一个空的主分片。
    13. MANUAL_ALLOCATION
      1. 手工强制分配分片。

    错误导致的

    1. ALLOCATION_FAILED
      1. 由于分配失败导致。
    2. DANGLING_INDEX_IMPORTED
      1. 正在导入一个 dangling index
      2. 什么是 dangling index?
                磁盘中存在,而集群状态中不存在的索引称为 dangling index,例如从别的集群拷贝了一个索引的数据目录到当前集群,Elasticsearch 会将这个索引加载到集群中,因此会涉及到为 dangling index 分配分片的过程。

    排查方法

    1. 检查集群状态

    法1:命令行方式

    GET _cluster/health?filter_path=status,*_shards
    

    结果:

    法2:可视化方式

    head 插件可视化

    法3:Kibana

    2. 查看未分配的分片

    方法

    GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

    几个参数解释如下:

    • v=true, 代表显示字段含义;否则首行内容不显示。
    • h=*,代表列名;
    • s=state,代表基于state方式排序。等价于:s=state:asc,默认升序方式排序。
    • prirep,代表分片类型。p:代表主分片;r:代表副本分片。

    结果

    如上截图代表:order_info、test_data等索引包含未分配的副本分片,这点和集群健康状态“黄色”一致。 

    3. 查看未分配的分片的原因

            上面的返回结果:unassigned.reason 已经基本包含了未分配的原因。但想得到更为详细的解释,需要使用如下的命令。

    1. GET _cluster/allocation/explain?filter_path=index,node_allocation_decisions.node_name,node_allocation_decisions.deciders.*
    2. {
    3. "index": "order_info",
    4. "shard": 0,
    5. "primary": false
    6. }

    结果 

            Explanation 就是根本原因。

            本质原因就是:只有一个节点,但是设置了副本,导致了主分片可以分片正常,副本分片无法分配。进而导致:集群健康状态是黄色。

    也可以在Head插件和Kinana查看节点数量

    4. 修复非健康状态

    见: ElasticSearch--解决集群健康状态是Red、Yellow的问题_IT利刃出鞘的博客-CSDN博客

  • 相关阅读:
    异质图神经网络(HGNN)常用数据集信息统计(持续更新ing...)
    二叉搜索树中的搜索(力扣700)
    Ros cartographer pure localization 自定位+重定位+导航
    信号系统之连续信号处理
    React从0到1后台管理系统实战
    【牛客刷题】带你在牛客刷题第一弹(C/C++语言基础题)
    OpenHarmony 3.1 Beta 版本关键特性解析——ArkUI canvas组件
    经典论文-SeNet论文及实践
    angular:trunk包探究
    Linux笔记
  • 原文地址:https://blog.csdn.net/feiying0canglang/article/details/125807916