在正常进行索引快照备份的过程中,快照备份任务突然失败。查询仓库,发现仓库不可用,并返回以下异常日志信息。
[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”的仓库。
这样操作可以让Elasticsearch集群从物理内容恢复已知的仓库状态。
DELETE _snapshot/my_backup
PUT _snapshot/my_backup
{
"type": "fs", // 或其他仓库类型,例如 "s3"
"settings": {
"location": "/path/to/repository" // 或 S3 存储桶名称等
}
}
这里我们删除仓库并进行重建一个相同的仓库,相当于让Elasticsearch重新刷新了对于该仓库的状态,同时该操作不会对仓库内的快照进行删除。
主要排查底层存储如(NFS,S3等)存储介质没有任何问题。
如果使用nfs存储,检查nfs挂在是否正常,是否存在权限问题。
mount | grep nfs
可以在nfs挂载点上进行读写操作测试。
touch /path/to/repository/testfile
echo "test" > /path/to/repository/testfile
以确保没有任何权限错误。
如果使用S3存储,需要确保存储桶与凭证没有任何问题。使用AWS CLI检查S3存储桶的可访问性。
aws s3 ls s3://my-bucket
确保没有其他进程或集群在并发访问或修改快照仓库。如果有多个 Elasticsearch 集群在使用相同的快照仓库,可能会导致数据不一致问题。每个快照仓库应仅由一个集群使用。
通过日志,排查导致问题的可能原因。
sudo tail -f /var/log/elasticsearch/elasticsearch.log
如果上述方式都无法解决仓库错误,在考虑使用以下方式。
在某些情况下,可能需要手动清理仓库内容并重新初始化。注意,这会导致现有的快照数据丢失,请谨慎操作。
在进行清理操作前,确保停止 Elasticsearch 集群,避免并发访问。
手动删除仓库目录中的内容(如 NFS 挂载点中的文件):
sudo rm -rf /path/to/repository/*
启动 Elasticsearch 集群,并重新添加快照仓库。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。