前几天,领导要求在现有系统上增加个数据(ES及MySqlDB)备份及还原功能,仔细想想DB备份常见,可直接java运行时执行mysqldump命令就行了,那么,Elasticsearch数据备份常见是使用curl工具执行指令,是不是也可以用java来代替操作呢?
不再犹豫--Beyond,直接开搞,在开搞之前,来复习有关ES操作的几个简单指令:
1、获取快照:curl -XPUT 'http://ip:port/_snapshot/reponame',reponame仓库快照名称,可用于判断仓库快照是否存在;
2、创建仓库快照 :curl -XPUT 'http://ip:port/_snapshot/reponame'
3、创建快照(备份):curl -XPUT 'http://ip:port/_snapshot/reponame/snapshot_name1?wait_for_completion=true' ,wait_for_completion=true 表示等待创建完成后返回;
另外,我们还需要在es服务端的配置文件中配置快照路径path.repo,如下图配置:
好了,熟悉以上几个指令后,有没有发现,其实它们就是一些http请求指令,我们只要发给ES服务端处理就行。
这里,我们将es的操作命令封装成http请求,再使用CloseableHttpClient的execute()方法来执行HttpGet请求提交到ES服务器,通过解析返回信息判断处理结果。废话不多说,直接上代码:
/**
* 判断快照仓库是否存在
*
* @param repoName 仓库快照
* @return
* @throws Exception
*/
public boolean isSnapshotRepoExists(String repoName) throws Exception {
CloseableHttpClient client = HttpUtil.g