点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!
1
背景介绍
1.1 关于分片
elasticsearch分片可以理解为数据的容器。
elasticsearch的索引文档存储在分片中,然后分片分配到集群中的节点上。当集群扩容或缩小,Elasticsearch 将会自动在节点间迁移分片,以使集群保持平衡。这类似于 MySql 的分库分表,只不过 Mysql 分库分表需要借助第三方组件而 ES 内部自身实现了此功能。
分片分为主分片和副本分片,在索引写入时,新文档首先被索引进主分片然后再同步到其它所有的副本分片。副本分片可以服务于读请求,如果你的索引也如常见的那样是偏向查询使用的,那你可以通过增加副本的数目来提升查询性能。
与几乎所有的分布式组件存储数据一样,如果主分片和所有副本的分片都失效了,那么这部分数据也意味着丢失了。本文涉及的索引副本数为1,也就是索引的所有分片存在1个主分片和1个副本分片。
1.2 故障问题
此次elasticsearch故障是因为node04节点数据盘损坏,原本集群一个节点的一块数据盘损坏,因为分片有副本的关系,并不会对数据的完整性造成威胁,如上文描述,主分片失效后,副本分片会成为主分片,并在后续会重新生成一份副本分片,达到索引的主副分片要求。
当异常节点恢复启动完成后,丢失副本的分片会成为主分片,然后进行同步生成新的副本分片,但是在同步的过程中,另一个节点node01出现服务崩溃,最终定位也损坏了一块硬盘,短时间内同时损坏不同节点的2块硬盘,对于副本为1的分片来说,就有较大的概率丢失数据了,事实证明确实有索引存在数据丢失的情况,好在node01的盘还部分可读,于是我们尝试读取恢复了一部分索引的数据,详细步骤如下。
2
故障处理步骤
2.1 某日elasticsearch集群node04节点服务崩溃,检查发现磁盘损坏,硬件进行了磁盘更换和挂载,node04节点启动后集群正在同步数据。
2.2 此时node01节点服务出现崩溃,尝试启动node01节点的服务,发现elasticsearch无法拉起,检查日志发现加载过程中就直接关闭了,完成不了启动。
检查messages发现sde盘出现读取错误,怀疑磁盘问题,为了快速恢复业务,决定先注释sde盘的/data04目录,再次启动可以拉起服务了。
报错信息:
对elasticsearch.yml配置修改:
2.3 经过较为漫长的恢复后,发现仍然有3个索引处于red状态,可以确认这部分索引已经丢失了主分片和副本分片,也即数据丢失了。
2.4 对此3个索引进行indices检查,确认索引分片名分别为:
red open eopstat-2022.03.03 na8D2ItQQt2aY1M8Mka_Lg
red open eopstat-2022.03.12 kLybkgdoSluZTpcLnnraeQ
red open eopstat-2022.03.13 4uvJV5zeQ6az7cUBhXyhbQ
2.5 因sde磁盘尚未完全损坏,/data04目录部分数据是可以读写的,所以我们考虑将以上三个索引在/data04上的分片先备份出来,然后更换磁盘后恢复,以达到修复数据的目的。
2.6 备份过程中发现某索引报错padding with zeros,估计磁盘上这个索引的数据已经损坏了,但是另外的索引备份正常。
2.7 我们将其备份至/tmp目录下,待磁盘重新更换后将其恢复。
2.8 然后对node01节点进行磁盘更换和重新挂载,再将两个备份的分片恢复至原目录/data04/es/nodes/0/indices。
2.9 恢复完成后,我们将node01节点配置还原,将/data04目录加入,然后再进行es服务的重启。
2.10 待完全启动后,发现原本状态为red的索引2022.03.13/12已变为yellow,也就表示主分片正常了,正在恢复副本分片。
2.11 恢复完成后,检查索引状态,发现已经恢复为green了,数据恢复完成。
3
故障总结
此次故障虽然恢复,但是部分索引的数据依旧是主副都丢失了,只能进行清理,无法恢复了。所以此恢复方法也只能建立在原数据盘数据部分依旧可读的前提下进行,如果两个数据盘全部彻底损坏,也基本是不具备从系统层面进行恢复的,只能找专业人士从磁盘底层进行尝试了,这也是本文恢复方法的局限性。
另外针对老旧服务器搭建的集群,比如本文中的节点服务器其实服役年限都超过8年了,我们还是强烈适当增加集群的冗余配置,比如配置副本数为2,也即一主两副的配置,从而降低因为硬件故障造成的数据损失的风险。
END
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129508.html
摘要:倒排索引我们将需要扫描检索的内容的每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,根据事先建立的索引进行查找,并将查找的结果反馈给用户。 ES概述 1、什么是Elasticsearch (是什么?) 什么是ElasticSearch呢,首先看看百度百科上的解释: ElasticSearch是一个基于的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RE...
摘要:时间年月日星期四说明本文部分内容均来自慕课网。那么里面的数据就可以分为各种各样的索引,比如汽车索引图书索引家具索引等等。图书索引又可以细分为各种类型,比如科普类小说类技术类等等。具体到每一本书籍,就是文档,就是整个图书里面最小的存储单位。 时间:2017年09月14日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4099·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3594·2023-01-11 13:20