前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch快照备份之physical contents错误

Elasticsearch快照备份之physical contents错误

原创
作者头像
空洞的盒子
发布2024-07-02 15:38:30
440
发布2024-07-02 15:38:30
举报
文章被收录于专栏:JD的专栏JD的专栏

问题背景:

在正常进行索引快照备份的过程中,快照备份任务突然失败。查询仓库,发现仓库不可用,并返回以下异常日志信息。

代码语言:txt
复制
[xxxx_backup] Could not read repository data because the contents of the repository do not match its expected state. 
This is likely the result of either concurrently modifying the contents of the repository by a process other than this cluster or an issue with the repository's underlying storage. 
The repository has been disabled to prevent corrupting its contents. 
To re-enable it and continue using it please remove the repository from the cluster and add it again to make the cluster recover the known state of the repository from its physical contents.

此时仓库的状态为:各节点连接仓库均正常,但是仓库无法检索快照,也无法继续向该仓库进行快照备份。

问题原因:

在快照进行写入时,由于其他服务进程也对该仓库进行了修改,导致仓库状态与Elasticsearch集群中存储的状态不一致,造成了仓库不可用。

1. 仓库内容被其他进程并发修改:这可能导致仓库状态与 Elasticsearch 预期的状态不一致。

2. 底层存储问题:可能是由于底层存储(如 NFS、S3 等)的问题导致。

解决思路:

当前项目集群使用的是NFS作为仓库存储介质,基于es构建类型为“Shared file system”的仓库。

1.移除并重新添加该快照仓库。

这样操作可以让Elasticsearch集群从物理内容恢复已知的仓库状态。

  • 删除仓库
代码语言:json
复制
DELETE _snapshot/my_backup
  • 重建该仓库
代码语言:json
复制
PUT _snapshot/my_backup
{
 "type": "fs", // 或其他仓库类型,例如 "s3"
 "settings": {
 "location": "/path/to/repository" // 或 S3 存储桶名称等
 }
}

这里我们删除仓库并进行重建一个相同的仓库,相当于让Elasticsearch重新刷新了对于该仓库的状态,同时该操作不会对仓库内的快照进行删除。

2.检查底层存储问题

主要排查底层存储如(NFS,S3等)存储介质没有任何问题。

  • nfs存储

如果使用nfs存储,检查nfs挂在是否正常,是否存在权限问题。

代码语言:bash
复制
mount | grep nfs

可以在nfs挂载点上进行读写操作测试。

代码语言:bash
复制
touch /path/to/repository/testfile
echo "test" > /path/to/repository/testfile

以确保没有任何权限错误。

  • S3存储

如果使用S3存储,需要确保存储桶与凭证没有任何问题。使用AWS CLI检查S3存储桶的可访问性。

代码语言:bash
复制
aws s3 ls s3://my-bucket

3.检查并发访问

确保没有其他进程或集群在并发访问或修改快照仓库。如果有多个 Elasticsearch 集群在使用相同的快照仓库,可能会导致数据不一致问题。每个快照仓库应仅由一个集群使用。

4.检查Elasticsearch日志

通过日志,排查导致问题的可能原因。

代码语言:bash
复制
sudo tail -f /var/log/elasticsearch/elasticsearch.log

如果上述方式都无法解决仓库错误,在考虑使用以下方式。

5.清理并初始化仓库

在某些情况下,可能需要手动清理仓库内容并重新初始化。注意,这会导致现有的快照数据丢失,请谨慎操作。

  • 1. 停止 Elasticsearch 集群:

在进行清理操作前,确保停止 Elasticsearch 集群,避免并发访问。

  • 2. 清理仓库内容:

手动删除仓库目录中的内容(如 NFS 挂载点中的文件):

代码语言:bash
复制
sudo rm -rf /path/to/repository/*
  • 3. 重新初始化仓库:

启动 Elasticsearch 集群,并重新添加快照仓库。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景:
  • 问题原因:
  • 解决思路:
    • 1.移除并重新添加该快照仓库。
      • 2.检查底层存储问题
        • 3.检查并发访问
          • 4.检查Elasticsearch日志
            • 5.清理并初始化仓库
            相关产品与服务
            Elasticsearch Service
            腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档