前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elasticsearch unassigned shard

elasticsearch unassigned shard

作者头像
Kevin song
发布2020-09-04 05:35:43
2.8K0
发布2020-09-04 05:35:43
举报
文章被收录于专栏:运维监控日志分析

故障回顾

Zabbix 报警 Elasticsearch 集群状态 yellow。查看发现 Elasticsearch 集群出现 unassigned shard。定位发现是由于集群节点磁盘使用率过高超过85% 触发 Elasticsearch 集群对副本分片停止自动分配。

– green

  所有分片均已分配。

  – yellow

  所有主分片均已分配,但未分配一个或多个副本分片。

  – red

主分片不可用,可能已经丢失数据。

查看 unassigned shard 原因

Kibana DEV Tools

代码语言:javascript
复制
GET  /_cluster/allocation/explain

日志错误提示

代码语言:javascript
复制
"cannot allocate because allocation is not permitted to any of the nodes"

查看日志初步怀疑是由于前几天 Elasticsearch 节点磁盘使用率过高超过 85% 后对 Elasticsearch index 进行手动删除导致。

查看未分配的分片信息

代码语言:javascript
复制
curl -u elastic:****** -XGET http://localhost:9200/_cat/shards |grep UNASSIGNED

解决方案

代码语言:javascript
复制
POST /_cluster/reroute?retry_failed=true

Elasticsearch 节点磁盘使用率超过 85% 将不允许在分配新的副本分片,分片自动分配达到最大重试次数5次后,触发集群停止副本自动分配,手动执行恢复自动分配即可(故障后无法自动恢复需要手动恢复)。

Elasticsearch 磁盘的分片分配机制

Elasticsearch 在决定是向该节点分配新的碎片还是主动将碎片从该节点移开之前,先考虑节点上的可用磁盘空间。

cluster.routing.allocation.disk.threshold_enabled

默认为true。设置为false禁用磁盘分配决定器。

cluster.routing.allocation.disk.watermark.low

控制磁盘使用的低水位。默认为85%,意味着如果节点磁盘使用率超过85%,则Elasticsearch 不允许在分配新的分片。当配置具体的大小如500MB时,表示如果磁盘空间小于500MB不允许分配分片。此设置对新创建的索引的主分片没有影响,但是会阻止分配它们的副本。

cluster.routing.allocation.disk.watermark.high

控制磁盘使用的高水位。默认为90%,表示Elasticsearch将尝试将分片从磁盘使用率超过90%的节点移开。如果分片少于指定的可用空间量,也可以将其设置为绝对字节值(控制磁盘使用的低水位)以将碎片重新放置到远离节点的位置。此设置影响所有分片的分配,无论之前是否分配。

cluster.routing.allocation.disk.watermark.flood_stage

控制洪水阶段水位,默认为95%。触发后索引会被强制修改为只读权限。此设置是防止节点用完磁盘空间的最后手段。当磁盘利用率低于高水位线时,索引块将自动释放(低版本无法自动释放,需要通过 index.blocks.read_only_allow_delete 参数释放)。

index.blocks.read_only_allow_delete

Kibana DEV Tools

代码语言:javascript
复制
PUT _settings
    {
    "index": {
    "blocks": {
    "read_only_allow_delete": "false"
    }
    }
    }

API

代码语言:javascript
复制
curl -XPUT localhost:9200/_cluster/settings -d '{
"index.blocks.read_only_allow_delete": null
}'

cluster.info.update.interval

Elasticsearch 应该多久检查一次集群中每个节点的磁盘使用情况。默认为30s。

Kibana DEV Tools

代码语言:javascript
复制
PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "90%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "95%",
    "cluster.info.update.interval": "1m"
  }
}

API

代码语言:javascript
复制
curl -XPUT localhost:9200/_cluster/settings -d '{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "90%",
    "cluster.routing.allocation.disk.watermark.flood_stage": "95%",
    "cluster.info.update.interval": "1m"
    }
}'

persistent 表示为永久修改,transient 表示临时修改。

官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/7.9/modules-cluster.html#disk-based-shard-allocation

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档