Elasticsearch的数据备份是保障业务连续性的核心手段,可有效应对硬件故障、软件错误、误操作等导致的数据丢失风险。其备份方式主要分为两类:快照与恢复(Snapshot and Restore)(官方推荐,原生集成)和第三方工具(如elasticdump、Logstash等)。其中,快照功能是Elasticsearch的原生解决方案,支持全量/增量备份,适用于大多数场景。
快照是Elasticsearch在特定时间点的只读数据副本,包含索引数据、映射(Mapping)、设置(Settings)及集群状态(可选)。其核心优势是支持增量备份(仅备份自上次快照以来更改的数据),节省存储空间和备份时间。
快照需存储在可靠的存储介质中(如本地文件系统、云存储、HDFS等)。以本地文件系统为例,需先修改Elasticsearch配置文件(elasticsearch.yml),添加备份目录路径:
path.repo: ["/mnt/es_backup"] # 支持多个路径,用逗号分隔
修改后需重启Elasticsearch服务使配置生效,并确保该目录存在且具备读写权限(chown -R elasticsearch:elasticsearch /mnt/es_backup)。
通过REST API创建存储库,指定存储类型(如fs表示文件系统)和位置:
PUT /_snapshot/my_backup_repo
{
"type": "fs",
"settings": {
"location": "/mnt/es_backup", # 必须与配置文件中的路径一致
"compress": true, # 可选:压缩快照文件,减少存储空间
"max_snapshot_bytes_per_sec": "50mb", # 可选:限制备份速度,避免影响集群性能
"max_restore_bytes_per_sec": "50mb" # 可选:限制恢复速度
}
}
注:若使用云存储(如Amazon S3),需安装对应插件(如
repository-s3),并配置bucket、access_key等参数。
PUT /_snapshot/my_backup_repo/snapshot_full_20250924?wait_for_completion=true
{
"indices": "*,-.*", # 备份所有非系统索引(排除以`.`开头的系统索引)
"ignore_unavailable": true, # 忽略不可用的索引(如关闭的索引)
"include_global_state": false # 不备份集群全局状态(如模板、角色等,减少快照大小)
}
wait_for_completion=true:同步执行,命令返回前完成备份(适合小数据量);若为false(默认),则异步执行,可通过GET /_snapshot/my_backup_repo/snapshot_full_20250924/_status查看进度。Elasticsearch的快照机制自动支持增量备份。后续创建的快照仅备份自上次快照以来更改的数据,无需额外配置。例如:
PUT /_snapshot/my_backup_repo/snapshot_incremental_20250925
{
"indices": "*,-.*",
"ignore_unavailable": true,
"include_global_state": false
}
GET /_snapshot/my_backup_repo/_all
GET /_snapshot/my_backup_repo/snapshot_full_20250924
DELETE /_snapshot/my_backup_repo/snapshot_incremental_20250925
恢复数据需通过REST API实现,可将快照中的数据还原到原始集群或新集群。
rsync同步)。POST /_snapshot/my_backup_repo/snapshot_full_20250924/_restore
{
"indices": "*,-.*", # 恢复所有非系统索引
"ignore_unavailable": true, # 忽略不可用的索引
"include_global_state": false # 不恢复集群全局状态
}
POST /_snapshot/my_backup_repo/snapshot_full_20250924/_restore
{
"indices": "my_index_1,my_index_2", # 指定要恢复的索引名称
"ignore_unavailable": true,
"include_global_state": false
}
若需恢复集群的模板、角色、用户等全局配置,需设置include_global_state: true:
POST /_snapshot/my_backup_repo/snapshot_full_20250924/_restore
{
"indices": "*,-.*",
"ignore_unavailable": true,
"include_global_state": true
}
可通过以下命令查看恢复进度:
GET /_tasks?detailed=true&actions=*restore
恢复完成后,可通过GET /_cat/indices?v验证索引是否恢复正常。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。