1.目的?
每当elasticsearch 断电或者数据锁坏时,此时 重启es就特别麻烦,es 状态为 red,尤其是还原数据,还得删除部分数据,有鉴于此,所以需要对es 数据进行备份还原。
特意研究了一下,做个记录。
2.环境检测。
输入命令,检测是否支持 curl 命令:
curl --version
出现如下信息,则说明支持此命令。
2.1 curl 命令不支持,安装办法。
2.1.1 上传
文件。
2.1.2 解压 tar -zxvf curl-7.20.1.tar.gz
2.1.3 安装,执行命令
cd curl-7.20.1
./configure
make & make install
2.1.4 再次执行 2. 环境检测。
3.备份es 数据。
3.1 修改elasticsearch 配置文件 elasticsearch.yml。
加入一行
path.repo: ["/usr/local/elasticsearch/snapshot"]
此路径为 es 快照路径, /usr/local/elasticsearch 在这一部分为你的 es 路径所在。
3.2 启动es,创建仓库。
在 linux 直接执行 下面命令:
curl -H "Content-Type: application/json" -XPUT http://你的ip:端口/_snapshot/backusssp -d '{"type": "fs", "settings": {"location":"location":"/usr/local/elasticsearch/snapshot" }}'
注意,这里不加 -H "Content-Type: application/json" 会报 Elasticsearch 错误:406 | Content-Type heade [xxx] is not supported
这里的 /usr/local/elasticsearch 和上面对应。返回显示:
{
"acknowledged": true
}
同时,在你的 elasticsearch 下面 创建文件夹 snapshot
3.3 在elasticsearch 下面,创建文件夹 back。
cd elasticsearch
mkdir back
3.4 编辑 es-back.sh ,修改配置。
cd back
vi es-back.sh
添加配置如下:
#!/bin/bash
#!/bin/bash
# 增量备份每小时的数据
# 这里 是你需要修改得 你的 ip:端口
ipHost='10.0.1.91:9200'
# 五分钟 循环备份一次
echo '开始备份,每小时增量备份一次'
while true;
do
# 设置文件名 时间格式(年月日时):20190620
indexName=`date +%Y%m%d%H`
# 删除当天的索引
curl -XDELETE ${ipHost}/_snapshot/backup/${indexName}?pretty
echo 'sleep 1m'
sleep 1m
curl -XPUT ${ipHost}/_snapshot/backup/${indexName}?wait_for_completion=true
echo '\n备份索引 '+${indexName}+' , sleep 4m'
sleep 9m
done
编辑保存之后,退出。注意:上面 ipHost 对应的地址是你需要修改得。这里是每小时增量备份一次。
3.5 为 es-back.sh 添加权限。
chmod 777 es-back.sh
3.6 后台运行备份文件。
./es-back.sh &
4. 还原 es 数据,在你需要恢复的时候才能用到,同时,先把elasticsearch 下面的data先备份一份,切记。
4.1 查看es 最新快照。
在这里 用get 请求,获取所有快照索引。
_snapshot/backup/_all
提交请求,把网页拉倒最下面一行,找到最后面一个 snapshot 的值,后面要用到的 (要恢复的快照索引 backupIndex)
4.2 在 elasticsearch 的 back 文件夹下,编辑 es-restore.sh 文件
vi es-restore.sh
添加配置如下:
#!/bin/bash
# es 快照还原
# 你的 ip 端口
ipHost='10.0.1.91:9200'
# 你的es文件目录 压缩文件,原数据 data
esPath='/usr/local/elasticsearch'
# 要恢复的快照索引,对应4.1 的 snapshot 的值
backupIndex='2019062009'
cd ${esPath}
date=`date +%Y%m%d%H%M%S`
tar -cvf es-data-${date}.tar.gz data
# 删除es所有数据
echo '清空数据'
curl -XDELETE http://${ipHost}/_all
# 恢复数据
echo '\n开始恢复快照数据\n'
curl -XPOST http://${ipHost}/_snapshot/backup/${backupIndex}/_restore
echo '\n数据恢复完成'
保存退出。
4.3 赋予权限 es-restore.sh。
chmod 777 es-restore.sh
4.4 运行恢复文件。
./es-restore.sh
4.5 显示 数据恢复完成 证明数据已经恢复完毕,同时 es 数据量 大的话,请耐心等待,在没有恢复数据之前,es 数据应该是空的。
Ok,基本完成,es 此时应该恢复为 绿色。
其他:
Elasticsearch 清除 unssigned,解决 red 问题 --- 采坑
Elasticsearch 错误:406 | Content-Type heade [xxx] is not supported --- 采坑
Elasticsearch recovery.RecoveryFailedException: [xxx][0]: Recovery failed on {node-1} --- 采坑