记录ElasticSearch分片被锁定导致无法分配处理过程
.suofang img { max-width: 100% !important; height: auto !important }
一、问题描述
这次遇到的问题比较特殊,尝试过以下几种手段都没有恢复:
- _cluster/reroute手动分片shard
- 由于是从shard无法分片,所以当时试过将所以的副本改成0,然后再设置成1,想通过重新生成副本来解决,结果也失败
接下来是排查问题的过程:
indexname 3 r UNASSIGNED
indexname 4 r UNASSIGNED
indexname 1 r UNASSIGNED
之前在运维过程中也遇到过UNASSIGNED这种从shard无法分配的问题,通过"allocate_replica"命令手动分配可以解决,这类问题一般都是因为node节点重启或者失联导致的shard分片异常
2、通过“GET _cluster/allocation/explain”错误信息如下:
"index": "indexname",
"shard": 3,
"primary": false,
"current_state": "unassigned",
"unassigned_info": {
"reason": "ALLOCATION_FAILED",
"at": "2023-11-02T18:43:14.758Z",
"failed_allocation_attempts": 300,
"details": "failed shard on node [4MMOUt8-SMatWGCzX1asAQ]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[indexname][3]: obtaining shard lock timed out after 5000ms]; ",
"last_allocation_status": "no_attempt"
},
"can_allocate": "no",
"allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",
大多数情况下shard的allocate相关的问题都可以通过“GET _cluster/allocation/explain”命令获取到有用的关键信息,从返回的内容来分析是索引的第3个shard导致的,在node节点[4MMOUt8-SMatWGCzX1asAQ]被锁定。
二、处理过程
前置工作
- 业务将索引的读写请求切走
- 创建一个测试索引验证shard是否都正常
- 备份索引数据
方案1:重启索引
--刷新索引
POST indexname/_flush
--关闭索引
POST indexname/_close
---打开索引
POST indexname/_open
在本次处理过程中,使用了方案1重启索引就已经把问题解决了,但是方案一还是的业务配合将读写请求切走,否则索引close会导致应用的请求报错
方案2:重启节点node节点
[4MMOUt8-SMatWGCzX1asAQ]
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
} PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
方案2重启锁定shard的节点理论上来说也是可以解决这个问题,但是因为方案一已经解决了问题就没机会做测试
方案3.重建索引
- 先还原备份到一个临时索引,验证数据没问题
- 删除当前索引,还原创建新索引
三、思考总结
其实整个问题处理过程中还有一些其它的细节在文中没有提到,就是集群在默认开启自动shard均衡过程中由于shard多长尝试分片无法成功,达到默认的5次重试之后就会报错,这个时候其实可以尝试将集群的自动分片关闭"cluster.routing.allocation.enable": "none",然后执行"POST /_cluster/reroute?retry_failed=true"来重置计数,最后通过手动分片shard的方式来做迁移也有可能能解决问题。只不过在每次遇到问题的时候需要结合当时的最佳场景去做判断,寻找影响范围最小的方案;
|
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。 《欢迎交流讨论》 |
.feedbackCon a { border-bottom: 1px dotted rgba(51, 51, 51, 1) }
记录ElasticSearch分片被锁定导致无法分配处理过程的更多相关文章
- Elasticsearch 分片集群原理、搭建、与SpringBoot整合
单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了.集群不仅可以实现高可用,也能实现海量数据存储的横向扩展. 新的阅读体 ...
- 超详细从零记录Hadoop2.7.3完全分布式集群部署过程
超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程.包含,Ubuntu服务器创建.远程工具连接配置.Ubuntu服务器配置.Hadoop文件配置.Had ...
- 【控制分片分配】控制Elasticsearch分片和副本的分配
ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本.通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题.不能运 ...
- Elasticsearch分片&副本分配
集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的 大型索引. 由于每个分片有多个副本,通过副本分配到多个服务器,可以提高查询的 ...
- Elasticsearch分片优化
原文地址:https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index 大多数ElasticSearch用户在创建索引 ...
- Elasticsearch分片、副本与路由(shard replica routing)
本文讲述,如何理解Elasticsearch的分片.副本和路由策略. 1.预备知识 1)分片(shard) Elasticsearch集群允许系统存储的数据量超过单机容量,实现这一目标引入分片策略sh ...
- 事故记录:php-cgi进程过多导致系统资源耗尽
事故现象:机房一台服务器运行一段时间后,突然发现系统资源即将被耗尽! 1)top命令查看一下系统的cpu ram swap的使用情况 由上图分析,可以看出1--共有602个进程,但其中有601个进程休 ...
- Elasticsearch 分片路由原理指定分片存储查询
Elasticsearch 项目中使用到Es的父子结构.在数据填充之后,查看每个节点的数据分布情况,发现有的节点数据多,有的节点少的情况,在未使用Es父级结构之前,每个节点的数据分布还算平均,如下图: ...
- 【分片无法挂载】Elasticsearch分片和副本无法挂载(分片移位)
部署说明 硬件 服务器两台: 机器A:64G内存 机器B:32G内存 分片 共12个节点 2个查询节点,10个存储节点 8个主分片 1个复制分片(每个分片都有一个副本分布在不同的节点上面) 每台机器都 ...
- 有关elasticsearch分片策略的总结
最近在优化部分业务的搜索吞吐率,结合之前优化过写请求的经验,想和大家讨论下我对es分片在不同场景下的分配策略的思路 原先普通索引我的分片策略是: 主分片=节点数,副本=1,这样可以保证业务数据一定 ...
随机推荐
- C语言基础--逻辑判断和循环
目录 一.储存标识符 1.auto 2.register 3.static 4.const 二.运算符 1.逻辑运算符 2.位运算符 3.运算符 4.三元运算符 三.选择结构 1.if判断 1.1 i ...
- 【持续更新】C++ 并不完全是 C 的超集!
一些容易被忽略的 C 与 C++ 的不兼容特性 头文件和命名空间 C 标准库头文件名在 C++ 中通常去除扩展名,并加上 c 前缀,如: stdio.h -> cstdio stdlib.h - ...
- sudo:pam_open_session Permission denied 与 Too many open files
sudo:pam_open_session Permission denied 一,验证 sudo 权限失败: /etc/sudoers 文件未给相关用户配置权限. 打开 /etc/sudoers 文 ...
- python-stack
implements list deque LifoQueue 原文地址:https://realpython.com/how-to-implement-python-stack/ Argue lis ...
- Godot无法响应鼠标点击等输入事件时,检查这些内容
注:本文以Godot 4.0 为基准,可能其他版本也能参考. 这是我用C#写项目时发现的,可能和gdscript使用者遇到的问题有一定区别. 如果你用Godot制作的游戏无法响应鼠标点击等输入事件,请 ...
- Flutter 学习笔记(01)__从 0 开始创建一个 flutter 项目
最近发现有不少的公司已经跳出 uniapp 的坑坑,开始使用 flutter 开发app了,为了让自己不失业,赶紧卷起来!此篇文章教你从 0 基础开发一个 简单页面,文章篇幅较长,建议收藏!也可以直接 ...
- SpringBoot3数据库集成
标签:Jdbc.Druid.Mybatis.Plus: 一.简介 项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富: 通过如下几个组件来实现数 ...
- [ABC126E] 1 or 2
2023-01-07 题目 题目传送门 翻译 翻译 难度&重要性(1~10):2 题目来源 AtCoder 题目算法 并查集 解题思路 因为每张卡片上的数字只能是 \(1\) 或者 \(2\) ...
- Airtest遇到模拟器无法输入中文的情况该如何处理?
此文章来源于项目官方公众号:"AirtestProject" 版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 1. 前言 最近有收到同学们的一些提问,使用Air ...
- 问题排查:nginx能跑,但是只能跑一会,不能跑多了
背景 上周都是查测试环境的问题,比如,我上一篇写的问题排查:nginx的反向代理感觉失效了一样,就是说这个事的.在文章里,最终查到是nginx的全连接队列满了(每个监听端口有个队列,完成三次握手的请求 ...