场景:
将一台elasticsearch服务器(A)上的索引导出,然后在再另一台elasticsearch服务器上(B)中导入;也适用于单机的备份与还原操作。
准备工作:
1、服务两台:linux(本人使用centos6.5) -- A和B(数据A->B)
2、操作电脑window一台 -- W
3、在A、Bl两台服务器上分别安装好elasticsearch(本人使用的2.3.3)与head插件;具体如何安装这里不过多介绍,百度教程很多。
流程开始:
1、在A服务器上建立一个数据仓库:在elasticsearch.yml中添加:path.repo: ["/elasticsearch/back_up"](仓库路径自定义)配置;
2、假设我将要建立的仓库路径为:/elasticsearch/back_up,然后创建此路径文件夹,赋予文件写入权限(一定要有);
3、执行下面命令创建一个仓库:
curl -XPUT 'http://localhost:9200/_snapshot/test(仓库名称)' -d '{
"type": "fs", //是使用共享的文件系统去存储快照
"settings": {
"location": "/elasticsearch/back_up",
"compress": true
}
}'
创建仓库成功后(执行创建命令后返回true),执行 curl -XGET 'http://localhost:9200/_snapshot/_all' 查看所有仓库信息;若要查看指定仓库执行 curl -XGET 'http://localhost:9200/_snapshot/test' (test为我测试仓库名称,可根据自己命名情况)。
4、创建一个快照执行如下命令:
curl -XPUT "localhost:9200/_snapshot/test/snapshot_1" -d '{
"indices": "index_1,index_2", //索引名称,多个用逗号隔开
"ignore_unavailable": "true", //忽略不存在的索引(不设置会快照请求会失败)
"include_global_state": false, //防止集群的全局状态被作为快照的一部分储存起来
"partial": "false" //默认情况下,如果快照红的1个或多个索引不是全部分片都可用会导致整个请求过程失败,将其设置为 true 可以改变此行为
还可以使用 curl -XPUT "localhost:9200/_snapshot/test/snapshot_1?wait_for_completion=true" 命令创建es全部索引快照;
执行 curl -XGET "localhost:9200/_snapshot/test/_all" 列出仓库所有快照信息;将 _all 换成指定快照名称列出指定快照信息
5、到此为止A服务器上的索引已经备份好(若索引很大需要较长时间耐心等待即可),可进入/elasticsearch/back_up(根据自己定义的仓库路径)查看文件
如下图(我创建的是一个名为 sdk_android 的快照,此为我实际项目命名,若为上文快照名此文件名应为 snapshot_1):
6、在B服务器上也创建一个仓库步骤回看 1->2->3 ;创建完成后将A服务器上的快照文件拷贝到B服务器的仓库文件夹下(A->B);此过程若是索引很大需要较长时间(我当时索引文件15G拷贝了整整1天!服务器下载上传速度也比较有限);
7、执行以下命令还原快照:
curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore" -d '{
"indices": "index_1,index_2", //根据自己快照情况指定要还原的索引
"ignore_unavailable": "true",
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}'
也可通过执行 curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore" 命令全部还原;
8、若索引文件较大,还原需要一定时间,可执行 curl -XGET "localhost:9200/_snapshot/test/snapshot_1" 查看还原进度
9、删除快照执行如下命令:
curl -XDELETE "localhost:9200/_snapshot/test/snapshot_1"
10、若是单机备份还原,可直接执行还原命令。
以上便是我查看N各文档整理的一个可用的es数据备份与还原的操作,我当时也是被搞的一个头两个大,用惯了mysql,以为备份还原直接鼠标导出导入即可。所幸最后还是有找到办法解决,再次感谢百度给想学习的人一个强大的搜索机制。最后也希望同为es数据备份还原苦恼的小伙伴们多一份参考!