利用Knapsack进行elasticseach的备份迁移(为生产环境)

背景: 公司项目生产环境的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的备份迁移(为生产环境))