故障现象

在部署ELK的单机环境,当连接Kibana时候提示下面错误,即使重启整个服务也是提示Kibana server is not ready.

{"message":"all shards failed: [search_phase_execution_exception] all shards failed","statusCode":503,"error":"Service Unavailable"}

排查过程

前段时间ELK服务还是正常的,进入容器去ping ip 也都没问题,服务也都是Up 状态; ElasticSearch 服务也可以通过http://localhost:9200/ 访问到,但是就是kibana 不能连接ElasticSearch

再查看 kibana 日志发现如下信息, 其中包含了no_shard_available_action_exception, 看起来是分片 的问题。

{
"type": "error",
"@timestamp": "2020-09-15T00:41:09Z",
"tags": [
"warning",
"stats-collection"
],
"pid": 1,
"level": "error",
"error": {
"message": "[no_shard_available_action_exception] No shard available for [get [.kibana][doc][config:6.8.11]: routing [null]]",
"name": "Error",
"stack": "[no_shard_available_action_exception] No shard available for [get [.kibana][doc][config:6.8.11]: routing [null]] :: {\"path\":\"/.kibana/doc/config%3A6.8.11\",\"query\":{},\"statusCode\":503,\"response\":\"{\\\"error\\\":{\\\"root_cause\\\":[{\\\"type\\\":\\\"no_shard_available_action_exception\\\",\\\"reason\\\":\\\"No shard available for [get [.kibana][doc][config:6.8.11]: routing [null]]\\\"}],routing [null]]"
}

通过 ES可视化工具-cerebro 查看

实际当时情况是"红色"的,而不是目前看到的 "黄色", heap/disk/cup/load 基本都是红色的, 可能因为当时手动删除了几个index原因

黄色虽然kibana可以访问ES了,但是黄色代表ES仍然是不健康的

查看单节点Elasticsearch健康状态

curl -XGET http://localhost:9200/_cluster/health\?pretty

{
"cluster_name" : "elasticsearch",
"status" : "red",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 677,
"active_shards" : 677,
"relocating_shards" : 0,
"initializing_shards" : 4,
"unassigned_shards" : 948,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 5,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 599,
"active_shards_percent_as_number" : 41.559238796807854
}

从上面的 unassigned_shards 可以存在大量分片没有被分配,当时看到的实际有1000多个。

查询 UNASSIGNED 类型的索引名字

curl -XGET http://localhost:9200/_cat/shards

故障原因大概确定了,应该就是unassigned_shards导致的 下面就看如何解决

解决方案

  1. 如果是集群环境,可以考虑使用 POST /_cluster/reroute 强制把问题分片分配到其中一个节点上了

  2. 但是对于目前的单机环境,从上面截图可以看出存在5个 unassigned 的分片,新建索引时候,分片数为5,副本数为1,新建之后集群状态成为yellow,其根本原因是因为集群存在没有启用的副本分片。

    解决办法就是,在单节点的elasticsearch集群,删除存在副本分片的索引,新建索引的副本都设为0。然后再查看集群状态

    通过如果下命令,设置number_of_replicas=0,将副本调整为0. 如下图所示,es变成了“绿色”

    curl -XPUT 'http://localhost:9200/_settings' -H 'content-Type:application/json' -d'
    {
    "number_of_replicas": 0
    }'

知识点

副本分片 主要目的就是为了故障转移,如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片的角色。

所以副本分片和主分片是不能放到一个节点上面的,可是在只有一个节点的集群里,副本分片没有办法分配到其他的节点上,所以出现所有副本分片都unassigned得情况。因为只有一个节点,如果存在主分片节点挂掉了,那么整个集群理应就挂掉了,不存在副本分片升为主分片的情况。

参考

ElasticSearch- 单节点 unassigned_shards 故障排查的更多相关文章

  1. elasticsearch 单节点搭建与爬坑记录

    elasticsearch 单节点搭建与爬坑记录   prepare   虚拟机或者云服务器(这里用的是阿里云ECS) linux---centos7 安装完毕的jdk 相应的安装包(在https:/ ...

  2. elasticsearch 单节点出现unassigned_shards

    查看单节点Elasticsearch健康状态 使用head插件查看集群状态 从上面截图可以看出存在5个unassigned的分片,新建索引blog5的时候,分片数为5,副本数为1,新建之后集群状态成为 ...

  3. elasticsearch 单节点实现

    一.安装java环境,这么不说了,一般用源码安装,配置好环境变量 二.新建es用户和组,es不能用root启动 三.下载需要的稳定版es 四.解压安装es .zip /opt/app/ es / 五. ...

  4. Elasticsearch源码分析 | 单节点的启动和关闭

    本文主要简要介绍Elasticsearch单节点的启动和关闭流程.Elasticsearch版本:6.3.2 相关文章 1.Google Guice 快速入门 2.Elasticsearch 中的 G ...

  5. Linux下利用docker搭建elasticsearch(单节点)

    1. 拉取镜像 #elasticsearch 6.x和7.x版本有很多不一样需要确认 docker pull docker.elastic.co/elasticsearch/elasticsearch ...

  6. Elasticsearch unassigned 故障排查

    1. 故障分析与排查 一个 Elasticsearch 集群至少包括一个节点和一个索引.或者它 可能有一百个数据节点.三个单独的主节点,以及一小打客户端节点--这些共同操作一千个索引(以及上万个分片) ...

  7. 单节点 Elasticsearch 出现 unassigned shards 原因及解决办法

    根本原因: 是因为集群存在没有启用的副本分片,我们先来看一下官网给出的副本分片的介绍: 副本分片的主要目的就是为了故障转移,正如在 集群内的原理 中讨论的:如果持有主分片的节点挂掉了,一个副本分片就会 ...

  8. Elasticsearch.安装(单节点)

    Elasticsearch.安装(单节点) 环境Linux 7.x jdk 1.8 elasticsearch 5.x 环境目录结构(根目录多了两个文件夹): /resources    /** 存放 ...

  9. Elasticsearch:单节点数据迁移

    Elasticsearch数据迁移:windows单节点迁移到windows 将源数据中的ES安装目录下的data/nodes目录整体拷贝到目标ES的对应目录下 迁移前请备份:迁移后需要重启ES: E ...

随机推荐

  1. Cookie 和JWT 并存同一项目代码记录

    Cookie管理后台管理,JWT对外提供接口验证 具体官方文档链接 使用 ASP.NET Core 中的特定方案授权 实现思路: 1.添加两种授权方式配置, AddAuthentication 的参数 ...

  2. 状压DP复习笔记

    前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...

  3. AH/HNOI 2017 礼物

    题目链接 描述 两个序列 \(x, y\),可以将一个序列每个值同时加非负整数 \(c\),其中一个序列可以循环移位,要求最小化: \[\sum_{i = 1}^{n}(x_i - y_i) ^ 2 ...

  4. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  5. TortoiseGit和intellij idea配置秘钥

    第一:intellij idea 配置gitlab ssh key 1:打开git bash,不需要进入任何目录,直接输入 ssh-keygen -t rsa 一路回车 2:生成之后找到秘钥文件id_ ...

  6. (原创)docker18.03的安装

    简要说明:docker的安装,官方主要是分为 1.在线yum命令安装: 2.离线安装: 3.安装指定的版本. 备注:官方的安装考虑的是全球区域,说白了就是大陆有一些不能照搬.所以这篇文章我是自己考虑实 ...

  7. mac系统下用ssh方式连接git仓库

    1.应用程序-终端,键入命令  ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  ,后面是你的邮箱地址.一直回车,生成密钥. 2.键入  open ~ ...

  8. Day5 - 06 函数的参数-命名关键字参数

    引子:对于关键字参数,调用时可以传入任意个不受限制的关键字参数,至于到底传入了哪些,就需要在函数内部通过[函数里定义的关键字参数]检查,例子里就是通过otherinfo检查.        >& ...

  9. SpringBoot基于JustAuth实现第三方授权登录

    1. 简介   随着科技时代日渐繁荣,越来越多的应用融入我们的生活.不同的应用系统不同的用户密码,造成了极差的用户体验.要是能使用常见的应用账号实现全应用的认证登录,将会更加促进应用产品的推广,为生活 ...

  10. JavaSE23-函数式接口&Stream流

    1.函数式接口 1.1 函数式接口概述 概念 有且仅有一个抽象方法的接口 如何检测一个接口是不是函数式接口 @FunctionalInterface 放在接口定义的上方:如果接口是函数式接口,编译通过 ...