3.5.15.Snapshot
创作人:冯江涛
审稿人:胡征南
简介
无论使用哪种存储数据的软件,定期备份数据都是很重要的。Elasticsearch 副本提供了高可靠性;它们让你可以容忍少量的节点丢失而不会中断服务。但是,副本并不提供对灾难性故障的保护。对这种情况,你需要的是对集群真正的备份——在某些东西确实出问题的时候有一个完整的拷贝。需要注意的是 Elasticsearch 并不支持直接拷贝集群 data 目录、备份服务器的方式来备份、升级群集,这样做会导致数据损坏、无法恢复数据。
Elasticsearch 提供的 Snapshot API 就是从正在运行的集群中获取备份用的,可以根据情况选择整个集群,也可以指定 index 和 data stream。Elasticsearch 是以增量的方式获取 Snapshot,节约了时间和空间,小开销意味着可以适当增加备份的频率。每一个 Snapshot 在逻辑上相互独立,所以删除某一个 Snapshot 不会影响到其他的 Snapshot。
从 Snapshot 恢复集群数据可以指定 index 和 data stream,当然也可以通 SLM 来管理
Snapshot 的生命周期。
备份恢复时的版本兼容性:当前版本支持当前版本及升高一个的版本进行恢复,不支持跨版本直接恢复。当然如果你想跨版本恢复,可以尝试版本递增滚动升级来达到目的。反之则不可行,不能递减版本来恢复备份的数据。
配置 Snapshot 仓库
在使用 Snapshot 备份前,必须要注册快照仓库。可以存储在本地或者远程仓库中,远程仓库支持 Amazon S3,HDFS,Microsoft Azure,Google GCS 等,参考仓库插件的类型。
1.创建仓库
在创建仓库之前需要在所有 Master 和 Data 节点中增加仓库配置(elasticsearch.yml),下面以共享存储的方式举例。单节点的情况下可以用本地物理存储路径,如果是多节点分布式,需要保证共享存储在所有的 data 节点都进行了正确的 mount 挂载。
path: repo: - /apps/data/esbackup - /apps/data/stream-backup # Windows系统下注意路径分隔符的不同 - D:\\apps\\data\\esbackup
如果是运行中的集群,修改配置需要等到滚动重启完所有的节点,就可以创建仓库了。建议在集群初始化时就规划好备份策略、仓库,避免中途需要滚动重启集群。
PUT /_snapshot/my_fs_backup { # fs:共享文件系统;s3:亚马逊的S3仓库;azure:微软 Azure 仓库; # hdfs:HDFS 仓库;gcs:谷歌的 GCS 仓库。 # "type": "url",url 支持类型:file、ftp、http、https、jar。 # url 为只读类型,意味着只能从此类型中恢复和检索数据。 # "type": "source",source 类型的前提是 filed 里面设置 _source # 为 enabled ,这样可以节约大概50%的备份空间。 "type": "fs", "settings": { # location 为配置文件中 path.repo 所配置的子路径,所以也可以 # 写相对路径 "location": "My_fs_backup_location" "location": "/apps/data/esbackup/My_fs_backup_location", # 是否启用压缩,默认为 true "compress": "true" } } # 成功后会返回 { "acknowledged": true }
创建完成后可以 GET 查询仓库。
GET /_snapshot # 返回结果 { "my_fs_backup": { "type": "fs", "settings": { "compress": "true", "location": "My_fs_backup_location" } } }
通过 verify 验证节点仓库是否在所有节点已生效。
POST /_snapshot/my_fs_backup/_verify # 返回结果 { "nodes": { # 节点uuid "8Z7MmAUeToq6WGCxhVFk8A": { # 节点名称 "name": "jt-hpzbook" }, "yRahNXjuR2-w6w1ObVXQjg": { "name": "jt-hpzbook2" }, } }
其他接口:
# 查看所有仓库 GET /_snapshot/_all # 删除仓库 DELETE /_snapshot/my_fs_backup
2.可配置参数
更多参数可以参考:Repository API
l location: 仓库地址
l compress: 是否启用压缩,默认为 true
l chunk_size: 是否将文件切块,并指定文件块大小,默认:null (不切分)
l max_restore_bytes_per_sec: Snapshot 从仓库恢复时的限速,默认:无限制
l max_snapshot_bytes_per_sec: 节点创建 Snapshot 进入仓库时的限速,默认:40 mb/s
l readonly: Snapshot 是否只读,默认:false
3.插件
插件的扩展使得 Snapshot 可以选择更多的方式,无论是 HDFS 集群还是常见的云厂商的云端仓库。
l 官方插件:
○ S3 Repository: 亚马逊的 S3 仓库
○ Azure Repository: 微软 Azure 仓库
○ HDFS Repository: HDFS 仓库
○ Google Cloud Storage Repository: 谷歌的 GCS 仓库
l 社区插件:
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.15.Snapshot (中) https://developer.aliyun.com/article/1228107