Elasticsearch迁移方案

本文涉及的产品
对象存储 OSS,20GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: Elasticsearch迁移方案

迁移方案

  • 通过logstash的input和output配置迁移(配置灵活适用于长期数据同步等)
  • 通过迁移工具如elasticdump等(适用于备份一次性小量数据操作,支持备份到文件)
  • 通过elasticsarch自带快照功能(适用于一次性迁移大量数据)

迁移的方式主要有通过Logstash迁移、通过snapshot、通过reindex方式、通过elasticsearch-dump

Logstash迁移Elasticsearch

原理:通过logstash从源elasticsearch Cluster读数据,写入到目标elasticsearh

在logstash的目录下创建一个logstash的用于数据同步的conf文件

vim ./logstash-5.5.3/es-es.conf
  • 只迁移指定index
input {
    elasticsearch {
        hosts => ["********源es_ip:port********"]
        user => "*******"
        password => "*********"
        index => "***indexname*****"
        size => 1000
        scroll => "1m"
    }
}
#filter是可选的
filter {
}
output {
    elasticsearch {
        hosts => ["********目标es_ip:port********"]
        user => "********"
        password => "**********"
        index => "***indexname*****"
    }
}
  • 迁移所有索引

执行后,logstash会将源Cluster中所有的index全部copy到目标Cluster中去,并将mapping信息携带过去,随后开始逐步做index内的数据迁移。

input {
    elasticsearch {
        hosts => ["yourhost"]
        user => "**********"
        password => "*********"
        index => "*"  #该通配符代表需要读取所有index信息
        size => 1000
        scroll => "1m"
        codec => "json"
        docinfo => true
    }
}
#filter是可选的
filter {
}
output {
    elasticsearch {
        hosts => ["yourhost"]
        user => "********"
        password => "********"
        index => "%{[@metadata][_index]}"
    }
}

conf文件配置完成后执行logstash开始迁移

bin/logstash -f es-es.conf

如果执行顺利,执行下面这个命令就可以在目标的elasticsearch中看到对应的index

curl -u username:password host:port/_cat/indices

通过snapshot快照迁移

如果是自建ES安装elasticsearch-repository-oss插件

解压插件到your-es-root/plugins/

  • 非5.5.3需要修改plguins/plugin-descriptor.properties中的elasticsearch.version和version,改为自己es集群的版本
  • 重启es
购买OSS实例并创建和阿里云ECS相同region的bucket
在自建ES创建仓库
PUT _snapshot/my_backup 
{
    "type": "oss",
    "settings": {
        "endpoint": "xxxx", <1>
        "access_key_id": "xxxx", 
        "secret_access_key": "xxxxxx", 
        "bucket": "xxxxxx", <2>
        "compress": true
    }
}
快照指定索引

默认行为是备份所有打开的索引。不过如果你在用Kibana,你不是真的想要把所有诊断相关的 .kibana 索引也备份起来。可能你就压根没那么大空间备份所有数据。这种情况下,你可以在快照你的集群的时候指定备份哪些索引:

PUT _snapshot/my_backup/snapshot_1
{
    "indices": "index_1,index_2"
}

这个快照命令现在只会备份 index1 和 index2 了。

在阿里云ES上创建相同仓库my_backup
PUT _snapshot/my_backup 
{
    "type": "oss",
    "settings": {
        "endpoint": "xxxx", <1>
        "access_key_id": "xxxx", 
        "secret_access_key": "xxxxxx", 
        "bucket": "xxxxxx", <2>
        "compress": true
    }
}

注意 这里的endpoint要填该region的内网地址

在阿里云ES上恢复快照

一旦你备份过了数据,恢复它就简单了:只要在你希望恢复回集群的快照 ID 后面加上 _restore 即可:

POST _snapshot/my_backup/snapshot_1/_restore

默认行为是把这个快照里存有的所有索引都恢复。如果snapshot_1包括五个索引,这五个都会被恢复到我们集群里。和snapshot API一样,我们也可以选择希望恢复具体哪个索引。

还有附加的选项用来重命名索引。这个选项允许你通过模式匹配索引名称,然后通过恢复进程提供一个新名称。如果你想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称:

POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", <1>
    "rename_pattern": "index_(.+)", <2>
    "rename_replacement": "restored_index_$1" <3>
}
  • <1> 只恢复 index_1 索引,忽略快照中存在的其余索引。
  • <2> 查找所提供的模式能匹配上的正在恢复的索引。
  • <3> 然后把它们重命名成替代的模式。

这个会恢复 index_1 到你及群里,但是重命名成了 restored_index_1 。

通过reindex方式

https://help.aliyun.com/knowledge_detail/61145.html

通过elasticsearch-dump迁移

采用elasticsearch-dump插件

安装
yum install nodejs npm
npm install elasticdump

cd node_modules/elasticdump/bin

导出mapping

elasticdump --input=http://源ip:9200/索引名称 --output=http://目标ip:9200/索引名称 --type=mapping

导出数据

elasticdump --input=http://源ip:9200/索引名称 --output=http://目标ip:9200/索引名称 --type=data

如果索引很多,你还是懒得一个个去迁移,那么你可以改用这个命令:

./elasticdump --input=http://192.168.1.1:9200/ --output=http://localhost:9200/ --all=true
1
加个–all=true,input与output里不需要把索引名加上,这样就可以自动把原机器上的所有索引迁移到目标机器

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4月前
|
数据采集 人工智能 安全
阿里云Elasticsearch 企业级AI搜索方案发布
本文从AI搜索落地的挑战、阿里云在RAG场景的实践、效果提升三个方面,深度解读阿里云Elasticsearch 企业级AI搜索方案。
385 8
|
6月前
|
API 索引
近期,几个典型 Elasticsearch 8.X 问题及方案探讨
近期,几个典型 Elasticsearch 8.X 问题及方案探讨
93 3
|
6月前
|
自然语言处理 测试技术 网络安全
ElasticSearch7最新实战文档-附带logstash同步方案
ElasticSearch7最新实战文档-附带logstash同步方案
83 0
|
6月前
|
监控 API 索引
实战问题:Elasticsearch 2.X 数据如何迁移到 7.X?
实战问题:Elasticsearch 2.X 数据如何迁移到 7.X?
47 0
|
6月前
|
存储 API 索引
Elasticsearch 8.X 防止 Mapping “爆炸”的三种方案
Elasticsearch 8.X 防止 Mapping “爆炸”的三种方案
75 0
|
6月前
|
存储 分布式计算 关系型数据库
Elasticsearch 8.X 导出 CSV 多种方案,一网打尽!
Elasticsearch 8.X 导出 CSV 多种方案,一网打尽!
86 0
|
6月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
266 0
|
6月前
|
算法 搜索推荐 关系型数据库
Elasticsearch算分优化方案之rescore_query
Elasticsearch算分优化方案之rescore_query
134 0
|
存储 自然语言处理 监控
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
144 0
|
分布式计算 大数据 API
完美避坑!记一次Elasticsearch集群迁移架构实战
Elastic自身设计了集群分片的负载平衡机制,当有新数据节点加入集群或者离开集群,集群会自动平衡分片的负载分布。