记录下
ElasticSearch
数据的备份与迁移过程
1.指定备份文件地址
由于这里使用docker安装的es,所以指定备份文件到挂载的宿主机目录中,如果不是docker安装,直接指定为主机的目录即可
root@zssy-test:/opt/docker/elk#vimdocker-compose.yml root@zssy-test:/opt/docker/elk#dockervolumels DRIVERVOLUMENAME local73cd0ce3970fee80b3ff3d0211fb39c44b3b2cdcfd5c46d4b51f96ba59806d6e localelk_elasticsearch localelk_kibana 2.查看对应的宿主机目录 root@zssy-test:/opt/docker/elk#dockervolumeinspectelk_elasticsearch [ { "CreatedAt":"-07-29T13:40:15+08:00", "Driver":"local", "Labels":{ "pose.project":"elk", "pose.volume":"elasticsearch" }, "Mountpoint":"/var/lib/docker/volumes/elk_elasticsearch/_data", "Name":"elk_elasticsearch", "Options":null, "Scope":"local" } ] 3.查看dokcer-compose中指定的挂载关系 volumes: -"elasticsearch:/usr/share/elasticsearch"1.列出所有的volume
可以看到容器内/usr/share/elasticsearch目录对应宿主机的/var/lib/docker/volumes/elk_elasticsearch/_data目录。所以,设置的备份文件必须在/usr/share/elasticsearch下,这样再宿主机下可以直接找到对应的备份文件,否则,需要自己进入到容器内部,使用docker cp 命令从容器中拷贝出来,比较麻烦。修改
elasticsearch.yml
配置文件
path.repo:["/usr/share/elasticsearch/backup"]
修改完成之后重启es,重启之后配置才会生效
2.注册快照存储库
注册{ "type":"fs", "settings":{ "location":"E://es/backup" } }PUThttp://192.168.0.112:9200/_snapshot/ecopherebbs
查看结果
GEThttp://192.168.0.112:9200/_snapshot
3.备份数据(执行快照)
备份{ "indices":"sjy_index,economic_index", "ignore_unavailable":true, "include_global_state":true }PUThttp://192.168.0.112:9200/_snapshot/ecopherebbs/snapshot_2029?wait_for_completion=true
其中:
wait_for_completion=true
时会一直阻塞直到快照完成snapshot_2029
就是指定的备份快照命中请求体重indices
指定需要备份的索引(多个用逗号隔开),也可以不指定,这样会备份所有的es索引库数据
执行后最终返回如下信息表示备份创建成功:
"accepted":true }{
查看结果
GEThttp://192.168.0.112:9200/_snapshot/ecopherebbs/snapshot_2029
其中最后的 snapshot_2029 就是上一步指定的备份快照名称 返回如下信息:
"snapshots":[ { "snapshot":"snapshot_2029", "uuid":"6LFUlFLRRBGHah3NkopxsA", "version_id":7010199, "version":"7.1.1", "indices":[ "weather_fetch_bd_index", "sjy_soil_tem_index", "economic_income_index", "sjy_rock_sys_index", "sjy_pile_index", ".kibana_task_manager", ".kibana_1", "sjy_economic_index", "water_usage_index", "water_temp_index", "wild_animal_index", "plant_light_index", "plant_park_index", ".security-7", "check_station_index", "sjy_index" ], "include_global_state":true, "state":"SUCCESS", "start_time":"-07-29T05:44:08.321Z", "start_time_in_millis":1596001448321, "end_time":"-07-29T05:44:09.928Z", "end_time_in_millis":1596001449928, "duration_in_millis":1607, "failures":[], "shards":{ "total":38, "failed":0, "successful":38 } } ] }{
可以看到备份文件中所有索引库(indices)列表,总分片(shards)数,成功备份的分片数等信息
查看备份完成的数据文件
/var/lib/docker/volumes/elk_elasticsearch/_data/backup root@zssy-test:/var/lib/docker/volumes/elk_elasticsearch/_data/backup#ll 总用量52 drwxrwxr-x3zssyroot40967月2913:44./ drwxrwxr-x11zssyroot40967月2913:40../ -rw-rw-r--1zssyroot297月2913:44incompatible-snapshots -rw-rw-r--1zssyroot15447月2913:44index-0 -rw-rw-r--1zssyroot87月2913:44index.latest drwxrwxr-x18zssyroot40967月2913:44indices/ -rw-rw-r--1zssyroot222687月2913:44meta-6LFUlFLRRBGHah3NkopxsA.dat -rw-rw-r--1zssyroot5257月2913:44snap-6LFUlFLRRBGHah3NkopxsA.dat root@zssy-test:/var/lib/docker/volumes/elk_elasticsearch/_data/backup#root@zssy-test:/var/lib/docker/volumes/elk_elasticsearch/_data/backup#pwd
4.恢复数据
为本机恢复 本机节点恢复数据直接执行如下请求即可为其他节点恢复 如果需要对其他节点机器上的es进行数据恢复,需要再其他机器执行以上1、2、3步操作,进行备份目录的注册和指定,最后将上一步的备份文件拷贝至对应的备份文件目录中其中:snapshot_2029就是之前备份时指定的备份名称POSThttp://192.168.0.112:9200:9200/_snapshot/ecopherebbs/snapshot_2029/_restore
返回如下信息表示恢复成功:
"accepted":true }{
5.最佳实践
快照名称中加上节点名称与时间戳信息,便于备份文件管理恢复数据之前保证恢复的索引库在当前es示例中没有创建,否则会恢复失败使用定时任务和curl
工具进行定时备份以保证es数据的可靠性