解决es集群Yellow与Red的问题

12 篇文章 1 订阅
订阅专栏

1. 集群健康度

  • 分片健康,在集群中节点的状态有三种:绿色、黄色、红色

    • 红色:至少有一个主分片没有分配,表示集群无法正常工作。

    • 黄色:表示节点的运行状态为警告状态,所有的主分片目前都可以直接运行,但是至少有一个副本分片是不能正常工作的。

    • 绿色:节点运行状态为健康状态。所有的主分片、副本分片都可以正常工作。

  • 索引健康:最差的分片的状态

  • 集群健康:最差的索引的状态

2. Health相关的API

解释API
集群的状态(检查节点数量)GET _cluster/health
所有索引的健康状态(查看有问题的索引)GET _cluster/health?level=indices
单个索引的健康状态(查看具体的索引)GET _cluster/health/my_index
分片级的索引GET _cluster/health?level=shards
返回第一个未分配 Shard 的原因GET _cluster/allocation/explain

示例1:获取索引的健康值

# 浏览器查看
http://IP:9200/_cat/health

# 有问题的结果
1635313779 05:49:39 kubernetes-logging red 15 10 2128 1064 0 0 32 0 - 98.5%

# 正常的结果
1635328870 10:01:10 kubernetes-logging green 15 10 2160 1080 2 0 0 0 - 100.0%

Kibana查看

GET _cat/health 

示例2:集群的状态(检查节点数量)

# 浏览器查看
http://IP:9200/_cluster/health
# 结果
{"cluster_name":"kubernetes-logging","status":"red","timed_out":false,"number_of_nodes":15,
"number_of_data_nodes":10,"active_primary_shards":1064,"active_shards":2128,"relocating_shards":0,
"initializing_shards":0,"unassigned_shards":32,"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":98.51851851851852}

Kibana查看

GET _cluster/health

示例3:所有索引的健康状态

# 浏览器查看
http://IP:9200/_cluster/health?level=indices
# 结果略

Kibana 查看

GET _cluster/health?level=indices

示例4:单个索引的健康状态(查看具体的索引)

http://IP:9200/_cluster/health/dev-tool-deployment-service
# 结果
{"cluster_name":"kubernetes-logging","status":"red","timed_out":false,"number_of_nodes":15,
"number_of_data_nodes":10,"active_primary_shards":2,"active_shards":4,"relocating_shards":0,
"initializing_shards":0,"unassigned_shards":6,"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":98.52534562211981}

kibana 查看

GET _cluster/health/my_index

3. 集群健康与问题排查

3.1 启动 Elasticsearch 集群

cat docker-compose.yaml
version: '2.2'
services:
  cerebro:
    image: lmenezes/cerebro:0.8.3
    container_name: hwc_cerebro
    ports:
      - "9000:9000"
    command:
      - -Dhosts.0.host=http://elasticsearch:9200
    networks:
      - hwc_es7net
  kibana:
    image: docker.elastic.co/kibana/kibana:7.1.0
    container_name: hwc_kibana7
    environment:
      #- I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - hwc_es7net
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es7_hot
    environment:
      - cluster.name=geektime-hwc
      - node.name=es7_hot
      - node.attr.box_type=hot
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_hot,es7_warm,es7_cold
      - cluster.initial_master_nodes=es7_hot,es7_warm,es7_cold
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - hwc_es7data_hot:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - hwc_es7net
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es7_warm
    environment:
      - cluster.name=geektime-hwc
      - node.name=es7_warm
      - node.attr.box_type=warm
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_hot,es7_warm,es7_cold
      - cluster.initial_master_nodes=es7_hot,es7_warm,es7_cold
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - hwc_es7data_warm:/usr/share/elasticsearch/data
    networks:
      - hwc_es7net
  elasticsearch3:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: es7_cold
    environment:
      - cluster.name=geektime-hwc
      - node.name=es7_cold
      - node.attr.box_type=cold
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_hot,es7_warm,es7_cold
      - cluster.initial_master_nodes=es7_hot,es7_warm,es7_cold
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - hwc_es7data_cold:/usr/share/elasticsearch/data
    networks:
      - hwc_es7net


volumes:
  hwc_es7data_hot:
    driver: local
  hwc_es7data_warm:
    driver: local
  hwc_es7data_cold:
    driver: local

networks:
  hwc_es7net:
    driver: bridge

案例1

  • 症状:集群变红

  • 分析:通过 Allocation Explain API 发现创建索引失败,因为无法找到标记了相应 box type 的节点

  • 解决:删除索引,集群变绿,重新创建索引,并且指定正确的 routing box type,索引创建成功,保持绿色状态

# 将 hot 写成 hott 创建索引查看状态
DELETE mytest
PUT mytest
{
  "settings":{
    "number_of_shards":3,
    "number_of_replicas":0,
    "index.routing.allocation.require.box_type":"hott"
  }
}


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

# 查看索引级别,找到红色的索引
GET /_cluster/health?level=indices


#查看索引的分片
GET _cluster/health?level=shards

# Explain 变红的原因
GET /_cluster/allocation/explain

GET /_cat/shards/mytest

GET _cat/nodeattrs


# 将 hott 修改成正确的 hot 后,创建索引查看状态
DELETE mytest
GET /_cluster/health/

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

GET /_cluster/health/

案例2:Explain 看 hot 上的 explain

  • 症状:集群变黄

  • 分析:通过 Allocation Explain API 发现无法在相同的节点上创建副本

  • 解决:将索引的副本数设置为0,或者通过增加节点解决

# 错误的写法
DELETE mytest
PUT mytest
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1,
    "index.routing.allocation.require.box_type":"hot"
  }
}

GET _cluster/health
GET _cat/shards/mytest
GET /_cluster/allocation/explain

# 修改为正确的之后再次查看
PUT mytest/_settings
{
    "number_of_replicas": 0
}

4. 分片没有被分配的一些原因

  • INDEX_CREATE:创建索引失败,在索引的全部分片分配完成之前,会有短暂的 Red,不一定代表有问题

  • CLUSTER_RECOVER:集群重启阶段,会有这个问题

  • INDEX_REOPEN:Open 一个之前 Close 的索引

  • DANGLING_INDEX_IMPORTED:一个节点离开集群期间,有索引被删除,这个节点重新返回时,会导致 Dangling 的问题

5. 常见问题与解决办法

  • 集群变红,需要检查是否有节点离线,如果有,通常通过重启离线的节点就可以解决问题

  • 由于配置导致的问题,需要修复相关的配置(例如错误的 box_type,错误的副本数)

  • 因为磁盘空间限制,分片规则(Shard Filtering)引发的,需要调整规则或者增加节点

  • 对于节点返回集群,导致 danging 变红,可直接删除 dangling 索引

6. 集群 Red & Yellow 问题的总结

  • Red & Yellow 是集群运维中常见的问题

  • 除了集群故障,一些创建,增加副本等操作,都会导致集群短暂的 Red 和 Yellow,所以监控和报警时需要设置一定的延时

  • 通过检查节点数,使用 ES 提供的相关 API,找到真正的原因

  • 可以指定 Move 或者 Reallocate 分片

POST _cluster/reroute
{
    "commands": [
        {
            "move": {
                "index": "index_name",
                "shard": 0,
                "from_node": "node_name_1",  # 将一个索引的分片从一个 node 移动到另外一个 node,来解决集群变红或变黄的问题
                "to_node": "node_name_2"
            }
        }
    ]
}

POST _cluster/reroute?explain
{
    "commands": [
        {
            "allocate": {
                "index": "index_name",
                "shard": 0,
                "node": "nodename"
            }
        }
    ]
}

7. 生产案例

# Kibana-Dev Tools

GET _cluster/health?level=indices

ctrl + F 搜索 red 状态的索引

"bj-task-hdfs-rpc-2021.11.24" : {
      "status" : "red",               # 分片状态为红色
      "number_of_shards" : 5,         # 主分片数
      "number_of_replicas" : 1,       # 每个分片的副本数
      "active_primary_shards" : 4,    # 活动的主分片数,说明 1 个故障
      "active_shards" : 7,            # 活动的总分片数,说明 3 个故障
      "relocating_shards" : 0,
      "initializing_shards" : 0,
      "unassigned_shards" : 3          # 未分配的分片 3 个,既故障 3 个分片(1主分片 + 2副本分片)
    },

再通过 cerebro 确认

通过查看 cerebro 发现,主分片和副本分片在同一台机器中,所以,这台机器故障之后,显示分片丢失

解决办法:删除索引,集群变绿,重新创建索引

我们也可以看看 yellow 的信息

解决办法:修好机器,删除副本分片,分片将会自动重新分配

精品分享:解决ES集群状态为yellow,原因(cannot allocate because allocation is not permitted to any of the nodes
q1035331653的博客
02-08 1万+
新年第一天开工。兴致高高的来上班,想着拿个开门红包,红包没拿到。结果遇到了Elasticsearch有个索引状态为yellow。很好,很惊喜,perfect! 首先,介绍下个人理解的ES集群的三种状态: Green - 所有数据都可用,主副分片都已经分配好 Yellow - 所有数据都可用,但尚未分配一些副本,不影响查询,可能影响恢复。 Red - 某些数据由于某种原因 存在主分片未分配,对查询会有影响 虽然不影响查询,但是也要解决下这个问题问题排查: 使用es 运维命令 GET /_cl
MySQL 与 Elasticsearch 数据不对称问题解决办法
09-09
主要介绍了MySQL 与 Elasticsearch 数据不对称问题解决办法的相关资料,对于 elasticsearch 增量写入,但经常jdbc源一端的数据库可能会做数据库删除或者更新操作,这里提供解决办法,需要的朋友可以参考下
es 开启集群_【ELK】【docker】6.Elasticsearch 集群启动节点 + 解决ES节点集群状态为yellow...
weixin_36358383的博客
01-12 187
ELK系列的示例中,启动的是单个的ES节点。系列文章:======================================================================================一、单节点问题描述----ES集群状态可能为yellow节点ES使用起来,没有多大的问题。但有一点无法避免,即index创建多分片和多备份的话,会显示ES节点状态为yel...
Elasticsearch数据库的基本使用及ES健康状态red问题处理_es数据库的使用
最新发布
2401_84166896的博客
04-29 712
System.out.println(“》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》执行查询所有文档”+ DateTime.now());System.out.println(“》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》执行查询所有文档”+ DateTime.now());System.out.println(“》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》执行删除文档”+ DateTime.now());// 设置排序条件。
ElasticSearch--解决集群健康状态是RedYellow问题
IT利刃出鞘的博客
08-03 1454
本文介绍如何修复ES的非健康状态(黄色或者红色)。
Elasticsearch(ES)生产集群健康状况为黄色(yellow)的官方详细解释、原因分析和解决方案(实测可用)
热门推荐
巨魔战将
05-12 4万+
文章目录介绍elasticsearch健康装填查询接口`/_cluster/health`接口反馈内容解释如下:处理方案步骤一、找到elasticsearch集群异常的索引步骤二、查看es集群健康信息,以及黄色状态索引的settings信息进行分析步骤三、分析并解决问题 介绍   Elasticsearch(ES)集群状态显示黄色时,使用cerebro会提示显示黄色原因,如果使用其他工具,则可以通过健康检查api查看集群状态GET /_cluster/health。 调用健康检查apiGET /_clus
Elasticsearch集群异常状态 yellow 问题处理_es状态yellow怎么办(1)
2401_84164617的博客
04-12 319
关注 “number_of_replicas” : “1” 代表此处的副本分片的大小。本环境的ES是单节点测试环境,则副本分片应为0,而yellow状态异常索引settings中,副本分片大小为1,因此此时只需要重新设置该索引副本分片数即可。当集群状态异常时,同时需要重点关注unassigned_shards没有正常分配的分片,查看集群状态可知存在一个未分配的分片数。例如:假设节点数为3,主分片数为5,副本数为3,那么无法分配的副本数则为:5*(3-(3-1))=5。
Elasticsearch生产集群健康状况为yellow原因分析和解决方案
qq_37351541的博客
09-26 4653
问题描述: ES状态如下图所示,且新产生的日志发送至Elasticsearch失败 问题分析: 查看es集群的健康状态 执行命令curl -X GEThttp://127.0.0.1:9200/_cluster/health -u elastic:nroadelastic,查看集群分片的情况,重点关注unassigned_shards没有正常分配的副本数量,返回信息如下: 各返回字段描述: cluster_name---集群的名称。 status---集群的...
Elasticsearch 重启后不正常,索引部分为Red
m0_54849806的博客
09-02 1241
分析: 重启Elasticsearch 仍然不正常。索引数量为 1000 多个,查看打开文件数为默认1024 ,怀疑打开文件数不足,导致恢复索引失败。总结: Elasticsearch 等数据库存储软件,安装时候需要进行打开文件数等相关优化,避免出现因为Linux 系统限制,产生的问题。现象: Elasticsearch 重启后,索引健康状态为Red , kibana 不能访问相关索引。操作: 修改打开文件数为 65535 , 重启ES 服务, 等待服务加载完成,服务恢复正常。
Elasticsearch 解决集群 YellowRed问题
爱死亡机器人
03-12 990
集群健康度 分片健康 红:至少有一个主分片没有分配 黄:至少有一个副本没有分配 绿:主副本分片全部正常分配 索引健康:最差的分片的状态 集群健康:最差的索引的状态 Health 相关的 API GET _cluster/health 集群的状态(检查 节点数量) GET _cluster/health?level=indices 所有索引的健康状态 (查看有问题的索引 GET _cluster/health/my_index 单个索引的健康状态(查看具体的索引) GET _cl
Kubernetes持久化部署elasticsearch7.15.0分布式集群
02-21
原文链接:https://blog.csdn.net/m0_37814112/article/details/122965720 说明:包含elasticsearch7.15.0集群3节点、5节点、7节点等三种方式的K8S部署yaml文件、镜像文件,里面有详细的README.txt部署参考
SpringBoot整合elasticsearch集群
01-07
8.2.8 SpringBoot整合elasticsearch集群 Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。Spring Boot是由Pivotal团队...
Elasticsearch集群模式部署
06-30
学习总结资料
Docker部署Elasticsearch集群
01-07
1、配置环境参数 cat /etc/hosts 172.16.1.1 test-es01 172.16.1.2 test-es02 172.16.1.3 test-es03 # grep vm.max_map_count /...mkdir -p /data/server/elasticsearch/{esdata01,esdata02,esdata03} chown 1000.
es 错误处理(this cluster currently has [3002]/[3000] maximum shards open)
临江仙我亦是行人
04-01 3309
问题ES 莫名其妙宕机 查看 Elasticsearch 日志如下 [2022-03-22T09:00:02,430][WARN ][o.e.x.m.e.l.LocalExporter] [aibee-devops-es03] unexpected error while indexing monitoring document org.elasticsearch.xpack.monitoring.exporter.ExportException: [.monitoring-es-7-2022.03.22
物理机重启后ES无法访问
临江仙我亦是行人
05-03 1565
master_not_discovered_exception not enough master nodes discovered during pinging failed to send join request to master
elasticsearch的索引(增删改查)管理
临江仙我亦是行人
10-27 1294
1. 创建索引 # 语法 PUT /索引名/[类型名]/文档id { 请求体 } 可以通过 postman 发送请求,也可以通过 kibana 发送请求,由于 kibana 有提示,所以我们选择kibana 索引名不能有大写字母 PUT Book { "error" : { "root_cause" : [ { "type" : "invalid_index_name_exception", "reason" : "Invalid inde
k8s Operator 部署 elasticsearch 7.10 + kibana + cerebro
临江仙我亦是行人
06-10 1245
基于 Kubernetes Operator 模式部署 elasticsearch kifana cerebro
解决es集群状态为yellow
05-26
Elasticsearch 集群的状态为 yellow 时,表示所有的主分片都已经分配到了某些节点上,但是某些副本分片尚未分配到节点上。...总之,解决 Elasticsearch 集群状态为 yellow问题需要您根据实际情况采取适当的措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
127
原创
199
点赞
752
收藏
2954
粉丝
关注
私信
写文章

热门文章

  • K8s集群重启与恢复-Master节点启停 16513
  • docker和k8s面试题总结(未完待续) 13470
  • linux history命令详解 11152
  • K8s集群重启与恢复-Node节点启停 9286
  • echo命令 8855

分类专栏

  • CICD 4篇
  • Kubernetes 22篇
  • docker 17篇
  • Redis 7篇
  • ELK 12篇
  • Loki 1篇
  • Prometheus 8篇
  • Ceph 2篇
  • Zabbix 14篇
  • Linux 31篇
  • Nginx 4篇
  • MySQL 7篇
  • ansible 9篇
  • Shell 8篇
  • Python 5篇

最新评论

  • nvidia-docker runtime报错(Unknown runtime specified nvidia)

    捕风抓影: 脚本哪来的

  • 在运行一段时间的集群中加入新的节点(k8s-node)

    Sult845: 不行,这步骤假货

  • nvidia-docker runtime报错(Unknown runtime specified nvidia)

    RY_01: 靠谱啊兄弟,原来是这样

  • K8s集群重启与恢复-Master节点启停

    liujie1008_cn: 我使用的方法:pv有backup,所有worker节点停止调度,集群可以自动恢复。

  • K8s集群重启与恢复-Master节点启停

    hehehehhhehehe: 完全不行啊,一个集群重启 就没有一个人写个正常的教程吗。。。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Jenkins部署与基础配置(2)
  • Jenkins部署与基础配置(1)
  • docker 夯住,无法启动
2022年22篇
2021年105篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司布吉网站排名优化拉萨推广网站多少钱滨州seo公司永湖网站制作设计多少钱坪地设计公司网站价格龙岩网站制作设计哪家好贺州高端网站设计推荐四平网站改版多少钱韶关网站优化按天扣费推荐银川网络营销报价潍坊如何制作网站价格清徐优秀网站设计报价飞来峡百姓网标王推荐宿迁模板推广推荐凉山网站推广方案哪家好崇左网站定制多少钱南宁百度竞价多少钱贵港网站排名优化哪家好昌吉百度seo价格SEO按天计费价格昆明SEO按天扣费哪家好鸡西网络广告推广推荐广州百度竞价包年推广价格吉林网站推广价格济宁网站优化排名太原网站建设推荐阜新至尊标王推荐娄底设计网站多少钱山南建网站公司黔南网站搭建公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化