Elasticsearch
默认配置是数据持久化的,就是ES会定时地把缓存数据刷新到硬盘,从而达到数据持久化地效果。在生产环境中,ES的数据持久化是必须的,防止出现断电时数据的丢失。固然,除了数据持久化外,咱们也是得作到数据备份的,防止出现数据损坏时没法恢复数据的状况。
下面开始介绍ES的数据备份和恢复。
在开始ES的数据备份和恢复以前,咱们得确保服务器的ES环境时搭建好的,这里就很少作介绍了,如有不懂的能够查看这篇ES入门文章了解下:
https://blog.csdn.net/qq_15092079/article/details/81411334。
在搭建ES环境中须要注意的几点:
network.host
在配置文件config/elasticsearch.yml
中添加一行数据,设置ES备份的快照数据存储路径。如果没有此目录则须要自行建立。配置好后,须要重启ES
path.repo: ["/usr/local/elasticsearch/snapshot"]
其实就是在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
}
在备份数据以前,最好是先根据备份数据的名称删除原来已经备份好的数据。相同名称的备份数据是不能重复备份的。
这里以备份数据的名称为 bk_20190926 为例,后面的执行都以此为例,有以下两种方式。
1)在linux服务器上执行如下命令。
curl -XDELETE http://ES的ip:端口/_snapshot/backup/bk_20190926
2)在kibana的Dev Tools开发工具中调用接口。
DELETE _snapshot/backup/bk_20190926
返回结果以下,则说明删除成功。
{
"acknowledged": true
}
备份数据一样是与删除数据同样,直接调用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
下查看到增长了不少文件,这些就是备份数据所需的文件。
备份完数据后,直接在服务器上能够看到这些备份的文件,可是这些文件并非一眼就能看出你备份了哪些数据的,此时你能够经过调用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
}
}
]
}
数据备份好了,若是真的出现了不可逆的数据损坏状况,此时就能够进行数据恢复了。
data文件夹其实就是当前ES的数据存储地,防止恢复数据出现异常,先把ES目录下面的data目录备份一下。
tar -cvf data-20190626.tar.gz data
恢复数据以前,先把当前ES的数据清空掉。有以下两种方式。
(1)在linux服务器上执行如下命令。
curl -XDELETE http://ES的ip:端口/_all
(2)在kibana的Dev Tools开发工具中调用接口。
DELETE _all
返回结果以下,则说明清空数据成功。
{
"acknowledged": true
}
恢复数据一样有以下两种方式操做。
(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的数据备份和恢复就介绍完啦!
这里只是讲解了手动的操做ES的数据备份和恢复,在程序里面咱们同样能够经过调用ES的接口来进行数据备份和恢复,例如经过java程序来定时天天进行ES地数据备份,而后删除昨天或前天的备份数据,只保留一份或两份备份数据,以此来节约磁盘空间。