Elasticsearch的数据备份和恢复以及迁移
⽬录
1. 为什么备份?
常见的数据库都会提供备份机制,以解决在数据库⽆法使⽤的情况下通过备份来恢复数据减少损失。 Elasticsearch 虽然有良好的容灾性,但以下原因,其依然需要备份机制:
1) 数据灾备:在整个集⽆法正常⼯作时,可以及时从备份中恢复数据。
2) 归档数据:随着数据的积累,⽐如⽇志类的数据,集的存储压⼒会越来越⼤,不管是内存还是磁盘都要承担数据增多带来的压⼒,此时我们往往会选择只保留最近⼀段时间的数据,⽐如将1个⽉之前的数据删除。如果不想删除这些数据,以备后续有查看需求,那么就可以将这些数据以备份的形式归档。
3) 迁移数据:当你需要将数据从⼀个集迁移到另⼀个集时,也可以⽤备份的⽅式来实现。
Elasticsearch备份两种⽅式:
1) 将数据导出成⽂本⽂件,⽐如通过 、 等⼯具将存储在 Elasticsearch 中的数据导出到⽂件中。
2) 备份 elasticsearch data ⽬录中⽂件的形式来做快照,借助 Elasticsearch 中 snapshot 接⼝实现的功能。
第⼀种⽅式相对简单,在数据量⼩的时候⽐较实⽤,当应对⼤数据量场景效率就显得乏⼒。这⾥本⽂着重讲解下第⼆种备份⽅式,
即 snapshot api 的使⽤。其次,备份集的唯⼀可靠⽅法是使⽤快照和还原功能。
版本兼容性:
1) 5.x中创建的索引快照可以还原为6.x
2) 2.x中创建的索引快照可以还原为5.x
3) 1.x中创建的索引快照可以还原为2.x
2. 数据备份
1) 设置备份⽬录
修改l
百度数据恢复配置⽂件l中添加  po: ["/home/gocode/app/backup/elk"],重启ES。
创建ES数据备份的数据⽬录
# mkdir -p /home/gocode/app/backup/elk
# chmod 755 /home/gocode/app/backup/elk
# chown es:es /home/gocode/app/backup/elk  //给es⽤户⽬录权限
2) 创建仓库(creating the repository)
备份数据之前,要创建⼀个仓库来保存数据,仓库的类型⽀持Shared filesystem, Amazon S3, HDFS、Azure Cloud选择。
创建了⼀个备份仓库名为datasvr 存储⽬录为/home/gocode/app/backup/elk 的备份仓库。
curl -H "Content-Type: application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr' -d ' {"type":"fs","settings":{"location":"/home/gocode/app/backup/e
curl -H "Content-Type: application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr' -d '
{
"type": "fs",
"settings": {
"location": "/home/gocode/app/backup/elk",
"compress": true
}
}'
3) 创建快照(备份索引)
⼀个仓库可以拥有同⼀个集的多个快照。在⼀个集中快照拥有⼀个唯⼀名字作为标识。在仓库 datasvr 中创建名字为
snapshot_1 的快照。
#curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr/snapshot_1'
备份名称为snapshot_1 (⾃⾏定义备份名称)
同步执⾏,加wait_for_completion 标志,备份完成后才返回,如果数据量⼤的话,会花很长时间
#curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr/snapshot_1?
wait_for_completion=true'
如果只想备份部分索引的话,可以加上indices 参数:
curl -H "Content-Type:application/json" -XPUT '127.0.0.1:9200/_snapshot/datasvr/snapshot_1' -d '
{
"indices": "index_1,index_2"
}'
执⾏完后,查看备份数据⽬录下,已经备份在备份⽬录下
4) 查看仓库信息
浏览器中查看备份仓库信息
5) 查看仓库存储的所有快照
浏览器中查看备份仓库某个快照信息
浏览器中查看备份仓库所有快照信息
6) 删除快照
# curl -X DELETE "localhost:9200/_snapshot/snapshot_1"
7) 删除仓库
仓库被注销时,ElasticSearch 只删除仓库存储快照的引⽤位置,快照本⾝没有被删除并且在原来的位置
# curl -X DELETE "localhost:9200/_snapshot/"
集备份恢复:
注意: 以上是单机的备份⽅法,集的备份恢复⽅法和单机模式⼀样,只不过需要增加⼀个集共享⽬录⽤来存放备份数据,使所有节点可访问。
1) 配置集共享⽬录
# yum install sshfs
2) 创建集共享⽬录,并将各节点备份⽬录挂载到共享⽬录
创建集共享⽬录
# mkdir -p /home/backup/elk_share
共享⽬录挂载
# sshfs root@172.20.32.239:/home/backup/elk_share /home/backup/elk  -o allow_other
3) 数据备份恢复与单机备份恢复⼀样,参考单机备份恢复
3. 数据恢复
# curl -H "Content-Type:application/json" -XPOST '127.0.0.1:9200/_snapshot/datasvr/snapshot_1/_restore'
⽤过head插件查看,数据已经恢复:
4. ES备份数据迁移⽬标服务器
1) 源数据备份
参考以上第⼆步
2) 源数据备份⽬录拷贝⽬标ES备份⽬录下
注意:这⾥为了⽅便,源备份⽬录和⽬标备份⽬录⼀致。
3) ⽬标ES机器创建源ES同名仓库
4) ⽬标ES查看快照
5) ⽬标ES执⾏恢复操作
5. 脚本备份恢复
将⽤到的api封装成shell脚本进⾏备份恢复操作较为⽅便,后续有时间在补充。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。