近期由于elasticsearch的版本升级,需要研究下elasticsearch的快照(snapshot)和恢复(restore)功能。
先说下背景,目前环境采用的是elasticsearch1.0版本,如果升级2.2版本,数据必须进行迁移,看官方文档给的建议是采用snapshot和restore的api操作。
同时说下elasticsearch2.2版本的启动不可以采用root账号,必须建立单独的账号才可以启动,否则会报以下错误
Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.
接下来说下创建备份的过程(es1.0版本的操作):
1. 确保索引数据保存到硬盘中,运行以下命令:
curl -X 'localhost:9200/_flush'
2. 创建备份的目录,如"/opt/es_backups/my_backup",用户需要对该目录拥有读写权限
3. 创建一个仓库(repository),命令:
curl -X PUT 'localhost:9200/_snapshot/my_backup' -d '{"type": "fs","settings": {"compress": "true","location": "/opt/es_backups/my_backup"}}'
4. 备份索引,命令:
curl -X PUT 'localhost:9200/_snapshot/my_backup/snapshot_1?waif_for_comletion=true'
5. 查看备份状态,命令:
curl -X GET 'localhost:9200/_snapshot/my_backup/snapshot_1?pretty'curl -X GET 'localhost:9200/_snapshot/my_backup/snapshot_1/_status?pretty'
恢复备份的过程(es2.2版本的操作):
1. 停止es1.0集群的运行,使用kill命令杀掉es相关进程
2. es2.2版本还原1.0版本备份最重要的就是创建1.0版本备份目录相同的仓库,但是从es1.6开始,创建仓库,必须修改elasticsearch.yml文件,增加结点"path.repo",同时,es2.2的运行用户也必须有备份目录的读写权限。
elasticsearch.yml文件中增加的节点内容为:
path.repo: ["/opt/es_backups"]
运行创建仓库的命令,和上面备份第3点的命令完全一致。
3. 恢复备份,命令如下:
curl -X POST 'localhost:9200/_snapshot/my_backup/snapshot_1/_restore?pretty'
4. 查看恢复的状态:
curl -X GET 'localhost:9200/_recovery?pretty'
参考内容:
Scripting and Security:https://www.elastic.co/blog/scripting-security