算起来使用ElasticSearch相关技术也已经快三年了,期间也没有总结过什么关于es的相关的技术类文章。今天因为项目的原因的需要在本地进行索引的调试和一个优化索引的搜索排序需求,因此需要在本机mac环境下进行下测试和开发工作,于是申请从线上生产环境拿部分数据到本地来测试。之前会采用将数据库中的数据导入本地数据库重新索引来获取需要的数据时间比较久,因为之前在线上跑过一份一个月的数据,因此考虑能不能将线上的数据备份下来并还原到本地来实现呢?答案是肯定可以的,ES为我们准备了强大的_snapshot功能来进行这个任务。
首先来看下怎么创建一个_snapshot。如同其他ES的操作,_snapshot es以为我们提供了相关的REST API来进行。
首先需要设置备份的路径,可以是多个,这个可以通过设置elasticsearch.yml来实现
path.repo: ["/mount/backups", "/mount/longterm_backups"]
通过如下REST API创建一个Respority
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mount/backups/my_backup"
}
}
对于分布式集群我们一般可以将文件备份到分布式文件系统中,通过制定type来进行,比如hdfs,nfs等
创建备份:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
上述API将会创建服务器上所有的索引的备份,如果仅仅需要备份某一个备份可以通过如下:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
{
"indies":[a,b,c] //索引名称
}
通过
GET /_snapshot/my_backup/_all
可以看到Repository下所有的备份集.
之后看如何还原恢复,只要执行如下API:
POST T /_snapshot/my_backup/snapshot_1/_restore
{
"indies":[a,b,c] //索引名称
}
可以制定需要还原的索引名,也可以更改名称,具体参见es的官方文档。
由于线上备份的索引和我们本地最后的索引不相同,更改过mapping这点我们可以通过es的reindex api快速的达成.
POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang