Elasticsearch索引库迁移(索引库备份、重建索引)

前一段时间呢,遇到点问题,就是生产上某个索引库累积了 T 为单位的数据,且这个索引库是单点的.........

对没错,这个索引库没有分片没有副本(因为当时上线太着急,没来得及设置,后期已经不能再加了)

所以这个单点问题必须处理,毕竟是以T为单位的,万一索引库挂了,容易造成这个Elasticsearch集群节点的离线,这要是节点离线了,可能会对其他节点以及索引库造成不可预知的影响,毕竟其他索引库在这个节点上也是有分片和副本的....

有这么几个处理方案:

1、使用策略

   占用多大空间时就自动开启一个新的索引库写入,或每天、每周、每月定时开启新的索引库写入
   缺点:查询影响不是特别大,但是对于会发生变更的数据,难以操作

2、使用Elasticsearch官方提供的 reindex 重建索引

   此方法其实就是将老索引的数据迁移到新索引中,既然老索引无法更改,那就换一个设置好的新索引,将数据导过去

   语法:

POST _reindex
{
  "source": {"index": "old_index"},
  "dest": {"index": "new_index"}
}

 既然已经说了是讲老的索引数据导入新的索引,那肯定需要新老索引你需要导入的部分结构一致,比如说一个username字段,你老索引是keyword类型,你新索引是long类型,这明显不行啊

reindex 底层也是滚动查询,为了避免对正常业务的影响,默认的读取速度还是很慢的(我测试的时候,一天只复制了300W的数据,实话实说,太慢了,但是不敢调,怕对别的业务有影响)

3、使用 logstash 读取

此种做法也是将老索引库的数据读到新索引库中,logstash 是Elastic生态中的一个也很重要的组件,本次对logstash不做解释,详细的请移步官网~

4、最简单的就是写一个程序,这边取,写到那边,这是最麻烦的,也是复用程度最低的,而且你写的程序,很大情况下没有logstash这种中间件读得快.....

下篇讲具体怎么迁移

你可能感兴趣的:(java日常分享,elasticsearch相关,elasticsearch,java,reindex,索引库迁移,数据迁移)