1、序言
Elasticsearch
默认配置是数据持久化的,就是ES会定时地把缓存数据刷新到硬盘,从而达到数据持久化地效果。在生产环境中,ES的数据持久化是必须的,防止出现断电时数据的丢失。固然,除了数据持久化外,咱们也是得作到数据备份的,防止出现数据损坏时没法恢复数据的状况。
下面开始介绍ES的数据备份和恢复。
2、ES环境
在开始ES的数据备份和恢复以前,咱们得确保服务器的ES环境时搭建好的,这里就很少作介绍了,如有不懂的能够查看这篇ES入门文章了解下:
https://blog.csdn.net/qq_15092079/article/details/81411334。
在搭建ES环境中须要注意的几点:
- JDK的安装配置,ES的启动时依赖于JDK的
- 须要另外建立个用户来启动ES,root用户是不能启动ES的
- 启动时的vm.max_map_count的报错问题
- ES默认是只能让本机访问,若须要远程访问还需修改文件elasticsearch.yml的
network.host
- kibana数据可视化界面的安装
3、备份数据
3.1 配置文件elasticsearch.yml
在配置文件config/elasticsearch.yml
中添加一行数据,设置ES备份的快照数据存储路径。如果没有此目录则须要自行建立。配置好后,须要重启ES
path.repo: ["/usr/local/elasticsearch/snapshot"]
3.2 建立仓库
其实就是在ES库中建立一个备份存储的目的仓库,这里以仓库名称为 backup 为例,有以下两种方式。
1)在linux服务器上执行如下命令。
curl -H "Content-Type: application/json" -XPUT -u elastic:xxx http://ES的IP:9200/_snapshot/backup -d '{"type": "fs","settings": {"location": "/usr/local/elasticsearch/snapshot"}}'
2)在kibana的Dev Tools开发工具中调用接口。
PUT _snapshot/backup{ "type": "fs", "settings": { "location": "data_bk", "compress": true, "max_snapshot_bytes_per_sec" : "50mb", "max_restore_bytes_per_sec" : "50mb" }}
调用参数说明:
compress,是否压缩,默认为是。
max_snapshot_bytes_per_sec,每一个节点快照速率。默认40mb/s。
max_restore_bytes_per_sec,节点恢复速率。默认40mb/s。
返回结果以下,则说明建立成功。
{ "acknowledged": true}
3.3 删除备份数据
在备份数据以前,最好是先根据备份数据的名称删除原来已经备份好的数据。相同名称的备份数据是不能重复备份的。
这里以备份数据的名称为 bk_20190926 为例,后面的执行都以此为例,有以下两种方式。
1)在linux服务器上执行如下命令。
curl -XDELETE http://ES的ip:端口/_snapshot/backup/bk_20190926
2)在kibana的Dev Tools开发工具中调用接口。
DELETE _snapshot/backup/bk_20190926
返回结果以下,则说明删除成功。
{ "acknowledged": true}
3.4 开始备份数据
备份数据一样是与删除数据同样,直接调用ES的接口实现的,有以下两种方式。
1)在linux服务器上执行如下命令。
curl -XPUT http://ES的ip:端口/_snapshot/backup/bk_20190926?wait_for_completion=true
2)在kibana的Dev Tools开发工具中调用接口。
PUT _snapshot/backup/bk_20190926?wait_for_completion=true
返回结果以下,则说明已经备份成功。
{ "snapshot": { "snapshot": "bk_20190926", "uuid": "K4fze5eGSvOwot_xWtz0Hw", "version_id": 6050399, "version": "6.5.3", "indices": [ "first_index" ], "include_global_state": true, "state": "SUCCESS", "start_time": "2019-09-27T05:36:39.398Z", "start_time_in_millis": 1569562599398, "end_time": "2019-09-27T05:36:39.723Z", "end_time_in_millis": 1569562599723, "duration_in_millis": 325, "failures": [], "shards": { "total": 5, "failed": 0, "successful": 5 } }}
同时,能够在ES所在的服务器的目录/usr/local/elasticsearch/snapshot/data_bk
下查看到增长了不少文件,这些就是备份数据所需的文件。
3.5 查看备份数据
备份完数据后,直接在服务器上能够看到这些备份的文件,可是这些文件并非一眼就能看出你备份了哪些数据的,此时你能够经过调用ES的接口来查看你备份了哪些数据。一样有两种方式调用。
1)在linux服务器上执行如下命令。
curl -XGET http://ES的ip:端口/_snapshot/backup/_all
2)在kibana的Dev Tools开发工具中调用接口。
GET _snapshot/backup/_all
返回结果以下,你备份了多少快照均可以在这里看到,snapshots列表的最后一个元素就是你最近备份的快照。
{ "snapshots": [ { "snapshot": "bk_20190926", "uuid": "K4fze5eGSvOwot_xWtz0Hw", "version_id": 6050399, "version": "6.5.3", "indices": [ "first_index" ], "include_global_state": true, "state": "SUCCESS", "start_time": "2019-09-27T05:36:39.398Z", "start_time_in_millis": 1569562599398, "end_time": "2019-09-27T05:36:39.723Z", "end_time_in_millis": 1569562599723, "duration_in_millis": 325, "failures": [], "shards": { "total": 5, "failed": 0, "successful": 5 } } ]}
4、恢复数据
数据备份好了,若是真的出现了不可逆的数据损坏状况,此时就能够进行数据恢复了。
4.1 备份data文件夹
data文件夹其实就是当前ES的数据存储地,防止恢复数据出现异常,先把ES目录下面的data目录备份一下。
tar -cvf data-20190626.tar.gz data
4.2 清空数据
恢复数据以前,先把当前ES的数据清空掉。有以下两种方式。
(1)在linux服务器上执行如下命令。
curl -XDELETE http://ES的ip:端口/_all
(2)在kibana的Dev Tools开发工具中调用接口。
DELETE _all
返回结果以下,则说明清空数据成功。
{ "acknowledged": true}
4.3 恢复数据
恢复数据一样有以下两种方式操做。
(1)在linux服务器上执行如下命令。
curl -XPOST http://ES的ip:端口/_snapshot/backup/bk_20190926/_restore
(2)在kibana的Dev Tools开发工具中调用接口。
POST _snapshot/backup/bk_20190926/_restore
返回结果以下,则说明恢复数据成功。
{ "accepted": true}
至此,ES的数据备份和恢复就介绍完啦!
5、总结
这里只是讲解了手动的操做ES的数据备份和恢复,在程序里面咱们同样能够经过调用ES的接口来进行数据备份和恢复,例如经过java程序来定时天天进行ES地数据备份,而后删除昨天或前天的备份数据,只保留一份或两份备份数据,以此来节约磁盘空间。