美文网首页DBA
记一次ES的索引迁移

记一次ES的索引迁移

作者: mysia | 来源:发表于2020-08-04 17:29 被阅读0次

由于公司需要统一整合ES服务,最近开始着手迁移。迁移方案主要分为物理迁移、本地升级、逻辑迁移三种。

  • 物理迁移,就是冷拷ES数据到新集群,适合可以停机升级的业务;
  • 本地升级,是在原集群上升级,不涉及到数据迁移,但也是需要停机的;
  • 逻辑迁移,使用迁移工具从老集群将数据迁移到新集群,同时业务双写;

逻辑迁移的工具有很多,因为我们提供ES服务的同时,也提供了logstash的服务。所以逻辑迁移采用了logstash作为数据迁移工具。

前期迁移的几套集群没出现问题,速度很稳定。但是遇到了一套ES集群,启用了IK分词,问题就来了。

原集群的版本是6.4.2,使用了IK分词,版本是6.4.2。新集群的版本是6.8.0,IK使用的也是对应的6.8.0版本。但是迁移数据的过程中出现了问题。

[2020-08-03T13:56:10,894][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>"91889274", :_index=>"toutiao", :_type=>"news", :routing=>nil}, #<LogStash::Event:0x5fc60d63>], :response=>{"index"=>{"_index"=>"toutiao", "_type"=>"news", "_id"=>"91889274", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards startOffset=6398,endOffset=6399,lastStartOffset=6400 for field 'content'"}}}}

看到这个报错,首先怀疑的是logstash或者ik的配置有问题,排查了一下,发现一切正常。询问业务人员,核对数据时发现双写也有部分数据没有写进去。这样就排除了logstash的问题,报错应该是ik导致的。

到github上看了一下ik的issue,结果发现好多人都有这个问题。原因是,ik更新重复中文分词的计数策略,导致大文本的分词会出现上述问题。

既然定位了问题,是版本更新导致,那么新版本是否能解决问题呢?看了下6.8系列的release note,发现并没有相关信息,于是考虑回滚版本。最终选择了6.6.1版本的ik,解决了上述问题。

这里还涉及到一个问题,6.6.1版本的ik,如何部署到6.8.0版本的ES集群呢?

其实,在一个大版本下(比如6.x),ik没有太大的差异,只需要更改依赖文件即可。

# vim plugin-descriptor.properties

description=IK Analyzer for Elasticsearch
version=6.6.1
name=analysis-ik
classname=org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
java.version=1.8
elasticsearch.version=6.6.1

将version和elasticsearch.version改为相应版本就可以了,比如我的版本是6.8.0,那么如下:

# vim plugin-descriptor.properties

description=IK Analyzer for Elasticsearch
version=6.8.0
name=analysis-ik
classname=org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
java.version=1.8
elasticsearch.version=6.8.0

修改完之后,替换原有集群的ik,重启各节点就可以了。

相关文章

  • 记一次ES的索引迁移

    由于公司需要统一整合ES服务,最近开始着手迁移。迁移方案主要分为物理迁移、本地升级、逻辑迁移三种。 物理迁移,就是...

  • 索引的迁移

    索引的迁移 API介绍 ES提供了_reindexAPI用来进行索引的迁移。其最简单的用法如下: 可选参数 sou...

  • ES索引迁移

    再对索引的分片数量或者是字段分词器进行调整时,需要对索引进行重建迁移,对应操作API为reindex。 创建索引 ...

  • es迁移索引数据合并

    es集群迁移有两种方式使用 1.先在原来的es集群将迁移当天的索引文件名reindex,然后做快照,然后用快照恢复...

  • es

    数据迁移 es,es是一个开源的搜索引擎,es包括数据存储和数据检索,搜索数据会比 mysql 快很多,搜索接口是...

  • ElasticSearch——索引及基本操作

    ES的基础概念 接下来我们介绍以下索引的基本操作,创建、更改、迁移、查询配置信息等1、仅创建索引:PUT inde...

  • ES 5.5.0索引迁移至ES 6.5.1

    1、在 5.5的机器上,对elasticsearch.yml 中新增 path.repo: ["/data/bac...

  • Logstash:获取业务时间并替换@timestamp

    业务场景 使用logstash从Mysql迁移数据到ES,并根据Mysql的业务创建时间,分批建立索引。 @tim...

  • es笔记---新建es索引

    es对索引的一堆操作都是用restful api去进行的,参数时一堆json,一年前边查边写搞过一次,这回搞迁移,...

  • ES:reindex中的坑

    吐槽一个ES-reindex迁移的大坑 在做ES跨集群迁移的时候,用到了ES的reindex进行数据迁移,查了很多...

网友评论

    本文标题:记一次ES的索引迁移

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