因为系统规划,ElasticSearch需要做整体的迁移。业务要求中断时间尽可能少。所以考虑到利用快照迁移数据。
准备:ElasticSearch源端和目标端都需要开启snapshot。
一、事前准备
1、源端与目标端都需在elasticsearch.yml里配置path.repo
操作系统准备
mkdir /es_bak -- 创建临时挂载点
mount ip:/dles_data/data/bak /es_bak -- 挂载路径
ElasticSearch准备
修改配置文件
vim ~.elasticsearch/config/elasticsearch.yml
path.repo: ["/es_bak"]
2、源端与目标端都需在数据库里配置镜像仓库
curl -v -XPUT 'http://127.0.0.1:9200/_snapshot/my_backup' -H "Content-Type: application/json" -d '
{
"type": "fs",
"settings": {
"location": "/es_bak"
}
}'
二、备份&恢复
1、检查镜像仓库的状态
curl -XGET "http://127.0.0.1:9200/_snapshot/my_backup"
2、检查索引
curl -v -XGET 'http://127.0.0.1:9200/_cat/indices'
3、备份
备份所有索引
curl -XPUT "http://127.0.0.1:9200/_snapshot/my_backup/snapshot_all?wait_for_completion=true"
-- 如果希望创建快照命令阻塞执行,可以添加wait_for_completion参数。命令执行的时间与索引大小相关。
不加的话,可以通过
curl -XGET "http://127.0.0.1:9200/_snapshot/my_backup/snapshot_all/_status"|grep state
查看备份状态
备份指定索引数据
curl -XPUT http://127.0.0.1:9200/_snapshot/my_cos_backup/snapshot_1{"indices": "index_1,index_2"}
4、移动数据
这就是数据的cp或者mv了
5、恢复
curl -XPOST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_all/_restore
这个过程很可能遇到问题,我就遇到如下问题
{
"error": {
"root_cause": [{
"type": "snapshot_restore_exception",
"reason": "[my_backup:snapshot_all/hTsxYWrTQ-e2XK_NtQaTEg] cannot restore index [.monitoring-alerts-6] because it's open"
}],
"type": "snapshot_restore_exception",
"reason": "[my_backup:snapshot_all/hTsxYWrTQ-e2XK_NtQaTEg] cannot restore index [.monitoring-alerts-6] because it's open"
},
"status": 500
}
解决方法很简单,关闭报错的索引就好
curl -XPOST http://127.0.0.1:9200/.monitoring-alerts-6/_close
之后再重新执行restore,直到恢复完毕。