前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >elasticsearch迁移最佳实践

elasticsearch迁移最佳实践

原创
作者头像
迁云小助手
修改2021-09-06 20:11:59
1.2K0
修改2021-09-06 20:11:59
举报
文章被收录于专栏:上云那些事上云那些事

方案一:跨机房集群迁移

适用场景:

客户ES集群在自建IDC机房里

大量数据需要同步到腾讯云ES集群

写入不可中断,业务要保证查询

原理:

把IDC自建的es集群与腾讯云es集群互通,做成一个大集群,通过es本身的数据同步功能做同步。

迁移过程中,需要限制迁移速率和查询范围,这样才不会影响线上es使用

数据迁移完后,原IDC机房的es集群可以下线,然后切换查询、写入设置到腾讯新es集群里

注意事项:这种方案没法展现迁移状态

方案二:Reindex api迁移

适用场景:

客户ES集群在自建IDC机房里

大量数据需要同步到腾讯云ES集群

原es集群数据可停止写入

原理:

ES自带有reindex 迁移数据的API

Reindex采用scroll快照方式查询数据并导出的方式

如果在迁移的期间,原集群有删除或者修改的操作,会导致数据不一致

注意事项:这种方式需要根据数据量来定下停止写入时间,估算好,操作期间es源集群不能有数据增量、修改的操作

方案三:elastic-dump工具迁移

介绍:

elasticsearch-dump是一款开源的ES数据迁移工具,github地址: https://github.com/taskrabbit/elasticsearch-dump

迁移单个索引:

elasticdump --input=http://x.x.x.1:9200/companydatabase --output=http://x.x.x.2:9200/companydatabase --type=settings

elasticdump --input=http://x.x.x.1:9200/companydatabase --output=http://x.x.x.2:9200/companydatabase --type=mapping

elasticdump --input=http://x.x.x.1:9200/companydatabase --output=http://x.x.x.2:9200/companydatabase --type=data

迁移所有索引:

此操作并不能迁移索引的配置如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据:

elasticdump --input=http://x.x.x.1:9200 --output=http://x.x.x.2:9200

注意事项:这种方式需要根据数据量来定下停止写入时间,估算好

操作期间es源集群不能有数据增量、修改的操作

方案四:logstash工具迁移

介绍:

logstash支持从一个ES集群中读取数据然后写入到另一个ES集群,因此可以使用logstash进行数据迁移

操作配置:

代码语言:yaml
复制
input { 
	elasticsearch { 
hosts => ["http://x.x.x.1:9200"] 
index => "*" 
		docinfo => true } 
} 
output { 
	elasticsearch { 
hosts => ["http://x.x.x.2:9200"] 
index => "%{[@metadata][_index]}" 
		} 
} 

总体迁移注意事项

风险点:

1. elasticsearch 本身的稳定性可能影响迁移数据的正确性;

2. 迁移过程中,可能出现数据迁移异常,如果出现迁移线程异常,需要人为干预;

3. 需要限流,需要保证迁移占用带宽不影响其他服务;

4. 自建机房的 elasticsearch 服务下线之后,需要调用方将调用 es 服务的 ip 或者域名指向新的 elasticsearch 服务,

5. 可能需要调用方重启客户端。

最佳实践:

1. 集群索引最好提前创建,避免凌晨自动并发生成大量索引导致集群 hang 住,集群异常;

2. 索引最好是采用静态 mapping,避免频繁的 mapping 变更导致集群元数据的变更引起集群 hang 住;

3. 根据实际应用场景和硬件配置,建议在小规格节点下单 shard 大小不要超过 20GB。更高规格的节点单 shard 大小不要超过 50GB。同时即使是高规格节点,对于日志分析场景或者超大索引,建议单 shard 大小不要超过 50GB,对于在线分析类的业务场景,建议单个 shard 大小不要超过 20GB;

4. 一般情况下, 日志场景,对于单个日志集数据量特别小的情况,可以按月创建索引;

5. 不建议单个集群 shard 数量太多,因为集群元数据太大之后,每次元数据变更都会造成集群的卡顿;

6. 如果集群只有一个索引,那么 shard 的个数(包括副本)要尽可能匹配节点数,等于节点数,或者是节点数的整数倍。如果集群为多个业务提供服务,则集群整体的 shard 数均匀分布即可;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方案一:跨机房集群迁移
  • 方案二:Reindex api迁移
  • 方案三:elastic-dump工具迁移
  • 方案四:logstash工具迁移
  • 总体迁移注意事项
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档