背景需求,阿里云新建了一套 elk 但是数据需要进行迁移备份,
解决方案使用 logstash 迁移很慢,100 多 g 的索引基本要一天才能迁移完成。
使用 oss 快照方式迁移,方便测试了下一个 100 多 g 的索引快照恢复只需要 50 分钟即可完成
但是阿里云的 es 插件 elasticsearch-repository-oss 在安装好后使用报错
{
"error" : {
"root_cause" : [
{
"type" : "repository_exception",
"reason" : "[my_backup] repository type [oss] does not exist"
}
],
"type" : "repository_exception",
"reason" : "[my_backup] repository type [oss] does not exist"
},
"status" : 500
}
网上找了下资料发现其实 oss 与 s3 的接口是兼容的所以安装 s3 插件进行迁移
注意需要 oss 授权所有权限
/data/elasticsearch/bin/elasticsearch-plugin install repository-s3 | |
#安装成功后导入 oss key | |
/data/elasticsearch/bin//elasticsearch-keystore add s3.client.default.access_key | |
/data/elasticsearch/bin//elasticsearch-keystore add s3.client.default.secret_key |
安装完成后依次重启 es 集群。
新旧集群创建 my_oss_repo 的快照仓库注意需要使用 s3 类型,
bucket 为你的 oss 存储桶
{ | |
"type": "s3", | |
"settings": { | |
"endpoint": "oss-cn-shenzhen-internal.aliyuncs.com", | |
"bucket": "g6k-log-es-snapshot", | |
"base_path": "es-backup", | |
"compress": true | |
} | |
} |
创建一个快照:名为 snapshot_g6k_nginx,将 prod-applogs-g6k-nginx-2025.05.06 索引备份到已经创建好的仓库 my_oss_repo 中。
PUT _snapshot/my_oss_repo/snapshot_g6k_nginx?wait_for_completion=true | |
{"indices": "prod-applogs-g6k-nginx-2025.05.06", | |
"ignore_unavailable": true, | |
"include_global_state": false | |
} |
备份多个索引到仓库中
# 备份 4 月所有索引到新的快照 | |
PUT _snapshot/my_oss_repo/snapshot_g6k_202504?wait_for_completion=true | |
{"indices": "prod-applogs-g6k-nginx-2025.04.*", | |
"ignore_unavailable": true, | |
"include_global_state": false | |
} |
使用命令查看备份进度
GET _snapshot/my_oss_repo/snapshot_g6k_202504 | |
"start_time" : "2025-05-14T07:59:33.939Z", | |
"start_time_in_millis" : 1747209573939, | |
"end_time" : "1970-01-01T00:00:00.000Z", |
end_time 大于 start_time 就是备份成功了
恢复数据
POST _snapshot/my_oss_repo/snapshot_g6k_nginx/_restore | |
{"indices": "prod-applogs-g6k-nginx-2025.05.06", | |
"ignore_unavailable": true, | |
"include_global_state": false | |
} |
完整yaml格式请参考elasticsearch7.8.0索引备份到阿里云oss以及恢复