Elasticsearch系列07:数据迁移与备份
来源:互联网 发布:手环源码 编辑:程序博客网 时间:2024/06/05 09:04
虽然ES提供了replicas shards的机制来保证数据的完整性不会因为几个节点的奔溃而被破坏,但是定期的数据备份以备不时之需依然重要。此外,通过备份与恢复也可实现数据在不同集群间的迁移(直接复制data目录下的索引文件的做法我尝试过,但没有成功)。
备份的方式在官方文档里有清楚的交代:先创建仓库(repository),再往仓库里添加一个快照(snapshot),查看备份状态,搞定。虽然官方文档很轻描淡写,但我在第一步就卡住了,创建仓库时需要一个共享文件系统(每个ES节点都需要能访问),我只是想把数据从线上集群迁移到线下进行更全面的测试,为了这么点事去找系统部走流程等待共享服务器是多么头疼啊……
一阵Google之后,决定使用sshfs在ES集群中每个节点的相同位置挂载一个共享目录,以下是操作命令:
// 在每个节点上安装sshfs
yum install fuse sshfs
// 选定一个节点的一个目录作为共享目录(不要放在系统盘所在目录)
mkdir /data0/es_backup
// 在每个节点的相同位置创建目录,并挂载共享目录
mkdir /mnt/backup
sshfs root@192.168.x.x:/data0/es_backup /mnt/backup -o allow_other
// 测试运行ES的用户是否有对共享目录的写权限
sudo -u elasticsearch touch /mnt/backup/test
这里最大的坑是写权限问题,我试过在创建/mnt/backup时把owner改成elasticsearch或者在挂载的时候用-o uid= gid= 这样参数更改目录的owner,然并卵……折腾了一下午。最后总算在stack overflow找到了这个参数-o allow_other,但其实这样做比较粗鲁,机器上的任何用户都可以访问这个目录了,有更优雅实现方式的同学请赐教。
解决了共享目录的问题之后,就可以像官方文档一样轻描淡写啦:
// 在_plugin/marvel/sense里
// 创建仓库
PUT _snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mnt/backup",
"compress": true
}
}
// 针对具体的index创建快照备份
PUT _snapshot/my_backup/snapshot_test
{
"indices": "index_1, index_2"
}
// 查看备份状态
GET _snapshot/my_backup/snapshot_test/_status
现在可以开始进行迁移了:
// 备份创建好之后,在共享目录/data0/es_backup里是这样的:
-rw-r--r-- 1 root root 31 12月 15 22:14 index
drwxr-xr-x 3 root root 4096 12月 15 22:14 indices
-rw-r--r-- 1 root root 83 12月 15 22:14 metadata-snapshot_test
-rw-r--r-- 1 root root 181 12月 15 22:14 snapshot-snapshot_test
// 在迁移目标的集群上重复上面创建仓库的操作
// 将源集群的备份内容(/data0/es_backup里的所有文件),复制到迁移目标的集群仓库目录里
// 在sense中使用RESTful API进行备份的恢复
POST _snapshot/my_backup/snapshot_test/_restore
// 查看恢复的状态
GET _snapshot/my_backup/snapshot_test/_status
以上就是参照官方文档实施的ES数据备份与迁移,希望对大家有帮助,欢迎留言与交流。
备份的方式在官方文档里有清楚的交代:先创建仓库(repository),再往仓库里添加一个快照(snapshot),查看备份状态,搞定。虽然官方文档很轻描淡写,但我在第一步就卡住了,创建仓库时需要一个共享文件系统(每个ES节点都需要能访问),我只是想把数据从线上集群迁移到线下进行更全面的测试,为了这么点事去找系统部走流程等待共享服务器是多么头疼啊……
一阵Google之后,决定使用sshfs在ES集群中每个节点的相同位置挂载一个共享目录,以下是操作命令:
// 在每个节点上安装sshfs
yum install fuse sshfs
// 选定一个节点的一个目录作为共享目录(不要放在系统盘所在目录)
mkdir /data0/es_backup
// 在每个节点的相同位置创建目录,并挂载共享目录
mkdir /mnt/backup
sshfs root@192.168.x.x:/data0/es_backup /mnt/backup -o allow_other
// 测试运行ES的用户是否有对共享目录的写权限
sudo -u elasticsearch touch /mnt/backup/test
这里最大的坑是写权限问题,我试过在创建/mnt/backup时把owner改成elasticsearch或者在挂载的时候用-o uid= gid= 这样参数更改目录的owner,然并卵……折腾了一下午。最后总算在stack overflow找到了这个参数-o allow_other,但其实这样做比较粗鲁,机器上的任何用户都可以访问这个目录了,有更优雅实现方式的同学请赐教。
解决了共享目录的问题之后,就可以像官方文档一样轻描淡写啦:
// 在_plugin/marvel/sense里
// 创建仓库
PUT _snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mnt/backup",
"compress": true
}
}
// 针对具体的index创建快照备份
PUT _snapshot/my_backup/snapshot_test
{
"indices": "index_1, index_2"
}
// 查看备份状态
GET _snapshot/my_backup/snapshot_test/_status
现在可以开始进行迁移了:
// 备份创建好之后,在共享目录/data0/es_backup里是这样的:
-rw-r--r-- 1 root root 31 12月 15 22:14 index
drwxr-xr-x 3 root root 4096 12月 15 22:14 indices
-rw-r--r-- 1 root root 83 12月 15 22:14 metadata-snapshot_test
-rw-r--r-- 1 root root 181 12月 15 22:14 snapshot-snapshot_test
// 在迁移目标的集群上重复上面创建仓库的操作
// 将源集群的备份内容(/data0/es_backup里的所有文件),复制到迁移目标的集群仓库目录里
// 在sense中使用RESTful API进行备份的恢复
POST _snapshot/my_backup/snapshot_test/_restore
// 查看恢复的状态
GET _snapshot/my_backup/snapshot_test/_status
以上就是参照官方文档实施的ES数据备份与迁移,希望对大家有帮助,欢迎留言与交流。
参考:
http://logos.name/archives/515
http://blog.csdn.net/u014431852/article/details/52905821
elasticsearch1.0升级2.2的数据备份和恢复
http://www.cnblogs.com/muzhiye/p/elasticsearch_snapshot_restore.html
0 0
- Elasticsearch系列07:数据迁移与备份
- Elasticsearch数据迁移与备份
- Elasticsearch--索引备份与迁移
- ElasticSearch数据备份与恢复
- 云上ELK系列 Logstash迁移Elasticsearch数据方法解读
- elasticsearch数据备份与还原恢复
- MongoDB 数据备份、恢复与迁移管理
- redmine数据备份,迁移与恢复
- elasticsearch-数据迁移解决方案
- ElasticSearch 5 数据迁移
- Elasticsearch数据迁移
- Elasticsearch数据如何备份
- 备份Elasticsearch的数据
- redis数据备份,迁移
- elasticsearch-重建索引,数据迁移
- elasticsearch 备份 与 恢复
- svn备份与迁移
- Cacti 备份与迁移
- ueditor编辑器使用查阅资料
- Spark DecisionTreeModel print
- java中四种方式解析XML文件
- android:windowIsTranslucent
- 用cublas实现行优先矩阵乘法和列优先矩阵乘法
- Elasticsearch系列07:数据迁移与备份
- poj2892 Tunnel Warfare(数状数组+二分)
- 图解HTTPS
- js监听浏览器关闭事件 onbeforeunload和Onunload不生效 使用onpadehide可以监听到浏览器关闭事件
- Java解析复杂嵌套JSON数据格式代码,提取出来所有的key和value。亲测代码可用
- ajax请求返回了两个重复json对象
- 集合框架-键盘录入学生按照总分从高到底输出
- JAVA的Date类和Calendar类
- AutoCompleteTextView 设置了点击事件需要点击两下解决办法