ElasticSearch 7.17创建索引快照遇empty_store无数据传输问题
Elasticsearch 7.17快照停滞无字节传输问题排查
问题场景
使用Elasticsearch 7.17,单分片索引myIndex(状态yellow,主分片1个,副本未分配),已配置S3仓库backups,发起快照后状态停滞1小时无字节传输:
索引状态:
$ curl -s -k "http://localhost:9200/_cat/indices" yellow open myIndex vVr6ojDCQTi9ASOUGkkRBA 1 1 679161903 0 140.8gb 140.8gb
快照创建命令及返回:
$ curl -s -k -X PUT "http://localhost:9200/_snapshot/backups/myIndex?pretty&wait_for_completion=false" -H "content-type:application/json" -d'{"indices": "myIndex"}' { "accepted" : true }
快照及恢复状态(停滞无变化):
$ curl -s -k "http://localhost:9200/_cat/snapshots/backups/myIndex" myIndex IN_PROGRESS 1676385605 14:40:05 0 00:00:00 8.6m 1 0 0 0 $ curl -s -k "http://localhost:9200/_cat/recovery" myIndex 0 37ms empty_store done n/a n/a 172.24.0.3 7529c7447620 n/a n/a 0 0 0.0% 0 0 0 0.0% 0 0 0 100.0%
关键疑问解析
1. empty_store的含义
这里的empty_store并非指索引实际为空,而是快照流程中分片的一种状态标识:当快照初始化时,分片被判定为“无需传输数据”(可能是元数据同步延迟、分片状态异常导致的误判),并非索引内容为空。
2. 无字节传输的可能原因及排查方向
- S3仓库权限不足:ES节点的IAM角色/AKSK缺少S3的核心权限(
PutObject、ListBucket、GetObject),导致快照无法写入数据到S3,停滞在初始化阶段。 - 分片状态异常:虽然索引显示为open,但主分片可能处于隐性的
initializing或unassigned状态,用以下命令确认分片状态:curl -s -k "http://localhost:9200/_cat/shards/myIndex" - 磁盘/网络瓶颈:ES节点磁盘IO过高(无法读取分片数据),或者到S3的网络链路不通、带宽被占满,导致数据无法传输。可通过
iostat、netstat工具排查。 - ES内部错误:查看ES节点日志(默认路径
/var/log/elasticsearch/),搜索snapshot相关报错,比如S3连接超时、元数据写入失败等,这是最直接的排查方式。
解决步骤
- 取消停滞的快照:
curl -s -k -X DELETE "http://localhost:9200/_snapshot/backups/myIndex" - 验证S3仓库有效性:
若返回错误,重新配置仓库权限或端点信息。curl -s -k "http://localhost:9200/_snapshot/backups/_verify" - 确认分片正常运行:确保
_cat/shards输出中主分片状态为STARTED,再重新发起快照。 - 排查网络连通性:在ES节点上测试到S3存储桶的连通性,例如:
curl https://your-bucket-name.s3.your-region.amazonaws.com
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

