美文网首页
利用Knapsack进行elasticseach的备份迁移(为生

利用Knapsack进行elasticseach的备份迁移(为生

作者: brightliming | 来源:发表于2017-04-01 10:54 被阅读0次

    背景: 公司项目生产环境的ES集群索引的初始分片创建时没有设置,默认为5个分片,一个副本。生产环境数据量激增,需要横向扩展,分片太少而无法横向扩展(ES的分片为最小逻辑单位,一个分片只能存在于一台物理机,一台物理机可以有多个分片)。由于ES2.2.1版本尚未支持分片的修改,所以需要重新建立索引(加大分片数),并将原有索引备份过来。

    考虑方案:

    1. 运用官方提供的API snapshot and restore,官方文档轻描淡写,但建立snapshot时需要利用分布式存储。优点是官方api比较靠谱。 网上有利用fuse和sshfs 在集群机器挂载共享目录的方式,但还是生产环境太烂,无外网,centos yum 用不了,单独安装软件还需要处理复杂的包依赖。。。。总之一堆问题的情况下决定放弃这个方法。

    github上面的开源elasticsearch 插件,Knapsack 。优点是简单已用,不需要分布式存储,缺点是非官方(经过实验可用)。目前只支持到ES的2.3.4版本。Knapsack的github地址:https://github.com/jprante/elasticsearch-knapsack

    下面对索引迁移的过程做了一下整理:

    (1) 将原有索引进行备份,注意由于需要将数据导入新的索引,所以需要导出的时候就将索引改名。

    curl -XPOST 'localhost:9200/vehicle/data/_export?map=\{"vehicle":"vehicle_new"\}'

    文件超大的时候, 需要将文件分块:

    curl -XPOST 'localhost:9200/ehlindex/_export?map=\{"ehlindex":"ehlindex_new"\}&archivepath=/data1/elasticsearch/logs/ehlindex.bulk&bytes=10g'

    (2) 新建索引

    curl -XPOST 'localhost:9200/vehicle_new'  -d @settings.json

    settings.json文件内容:

    {

    "settings": {

    "number_of_shards" : 20,//分片

    "number_of_replicas" : 1 //副本

    }

    }

    (3) 新建类型,设置类型mapping

    curl -XPOST 'localhost:9200/vehicle_new/_mapping/data' -d  @mapping.json

    (3) 将数据导入新索引(注:如果分块,需要指定导入的文件archivepath)

    curl -XPOST 'localhost:9200/vehicle/_import?map=\{"vehicle":"vehicle_new"\}&createIndex=false&archivepath=/data1/elasticsearch/logs/ehlindex.bulk'

    相关文章

      网友评论

          本文标题:利用Knapsack进行elasticseach的备份迁移(为生

          本文链接:https://www.haomeiwen.com/subject/cvhiottx.html