自建Elasticsearch迁移上云实战

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 自建的Elasticsearch服务运维难度高,操作复杂,需要手动调整资源,遇到性能瓶颈时优化难度相对云上Elasticsearch较大。本文介绍自建Elasticsearch迁移上云的方案,介绍自建Elasticsearch数据迁移至阿里云的常见方案,以及在迁移上云实战中遇到的关键问题和解决方法,以帮助企业客户更好的进行Elasticsearch迁移上云。

自建的Elasticsearch服务运维难度高,操作复杂,需要手动调整资源,遇到性能瓶颈时优化难度相对云上Elasticsearch较大。本文介绍自建Elasticsearch迁移上云的方案,介绍自建Elasticsearch数据迁移至阿里云的常见方案,以及在迁移上云实战中遇到的关键问题和解决方法,以帮助企业客户更好的进行Elasticsearch迁移上云。

1. 概述

自建的Elasticsearch服务运维难度高,操作复杂,需要手动调整资源,遇到性能瓶颈时优化难度相对云上Elasticsearch较大。本文介绍自建Elasticsearch迁移上云的方案,介绍自建Elasticsearch数据迁移至阿里云的常见方案,以及在迁移上云实战中遇到的关键问题和解决方法,以帮助企业客户更好的进行Elasticsearch迁移上云。

2. 方案介绍

目前可以通过Logstash、reindex和OSS快照等方式来完成自建Elasticsearch数据迁移至阿里云Elasticsearch,源端数据量较大场景,一般通过OSS快照方式进行迁移,但由于OSS快照方式不支持迁移增量数据,需要在迁移前关闭源端待迁移索引的写入或者更新。

如果源端数据量较大且无法在迁移前关闭源端待迁移索引的写入或者更新,则推荐通过Logstash将自建Elasticsearch数据全量+增量迁移至阿里云的方案。

如果源端数据量较小,一般推荐通过Logstash将自建Elasticsearch数据全量迁移至阿里云的方案。

方案的具体步骤请查看官网链接:https://help.aliyun.com/document_detail/170095.html,本文不作详细介绍,本文主要介绍客户自建ES数据迁移至阿里云ES实战过程中遇到的常见问题和解决方法。

image.png

3. 迁移前规格容量评估

规格容量评估主要包括4方面:快速选型、磁盘容量评估、集群规格评估、和Shard评估,购买目标Elasticsearch集群前需要先做好评估,以确保目标集群规格容量符合业务需求。

阿里云Elasticsearch官网购买页提供了选型工具,链接地址为:Elasticsearch购买页,可以结合工具推荐配置和已有集群的配置确定目标集群配置。

Shard大小和数量是Elasticsearch集群稳定性和性能的关键因素之一,Elasticsearch集群中任何一个索引都需要有一个合理的shard规划,合理的shard规划能够防止因业务不明确,导致分片庞大消耗Elasticsearch本身性能的问题。

关于规格容量评估的具体方法可参考官网说明:https://help.aliyun.com/document_detail/72660.html

4. 版本兼容性确认

通过Logstash进行数据迁移时,需注意Elastic、Logstash产品之间的版本兼容性,具体信息请查看官网产品兼容性:https://help.aliyun.com/document_detail/149588.htm

image.png

5. 目标集群分片(Shards)数量优化方案

如果已有Elasticsearch集群分片(Shards)数量设置不合理,希望在目标集群重新设置优化分片(shards)数量,建议手动在目标Elasticsearch集群中创建空索引,创建时,复制源端的mappings和settings结构,并合理分配shard数量,进行shard数量优化。

在进行自建Elasticsearch集群数据迁移时,不建议开启自动创建索引功能,因为Logstash只同步数据,不同步数据结构特征,所以开启自动创建索引功能后,可能会存在同步前后数据结构不一致的情况,导致迁移前后数据的格式不一致。如果需要同步前后的数据结构一致,那么建议先在目标端Elasticsearch中手动创建目标索引,并按照规划设置好分片数量。

6. 如何加快Logstash迁移数据速度

当客户迁移数据量较大时,需要调优Logstash的性能以加快数据迁移速度,调优Logstash的性能主要通过调整参数:管道批大小(即pipeline.batch.size)和管道工作线程(即pipeline.workers),关于管道批大小和管道工作线程参数说明和建议如下:

image.png

建议确认Logstash实例性能是否达到瓶颈,如果Logstash未达到瓶颈,并且源端和目标端Elasticsearch性能负载不高时,适当调大Logstash的管道批大小和工作线程数并持续监控源端Elasticsearch、目标端Elasticsearch和Logstash性能压力情况,如果Logstash实例性能达到瓶颈,需要升配Logstash后再继续调整。

以下是通过控制台监控阿里云Elasticsearch集群性能和Logstash实例性能的界面:

image.png

阿里云Elasticsearch集群监控

image.png

阿里云Logstash实例监控

7. 查看数据迁移结果

分别登录源端Elasticsearch和目标端阿里云Elasticsearch集群的Kibana控制台,在左侧导航栏,单击Dev Tools,在控制台中执行命令:GET /_cat/indices?v,查看迁移成功的索引,正常情况下,返回的记录条数应该与自建Elasticsearch集群一致,如下图:

(1)自建Elasticsearch集群索引和数据量信息:

image.png

(2)阿里云Elasticsearch集群索引和数据量信息:

image.png

8. 迁移后使用阿里云ES--认证机制

自建Elasticsearch可能没有配置用户、角色以及相应的权限,应用程序就可以直接访问Elasticsearch。阿里云Elasticsearch默认启动认证机制Basic Auth且不支持关闭认证机制,以实现用户权限管控。Basic Auth是X-pack自带的Kibana认证机制,ES实例包含X-Pack功能,因此不支持关闭Basic Auth。

在完成数据迁移至阿里云Elasticsearch后,通过客户端访问阿里云Elasticsearch时需要在程序代码中配置已授权的用户,才能正常访问阿里云Elasticsearch,否则会有类似以下的报错信息:

{"error":{"root_cause":[{"type":"security_exception","reason":"action [indices:xxx] is unauthorized for user [xxx_user]"}],"type":"security_exception","reason":"action [indices:xxx] is unauthorized for user [xxx_user]"},"status":403}

需通过Kibana控制台自定义角色分配权限,并将角色分配给用户,在客户端程序代码中使用已授权的用户访问阿里云Elasticsearch,以下是python代码访问阿里云Elasticsearch示例,具体代码可参考阿里云官网https://help.aliyun.com/document_detail/69194.html

from elasticsearch import Elasticsearch, RequestsHttpConnection
import certifi
es = Elasticsearch(
    ['<YourEsHost>'],
    http_auth=('<UserName>', '<YourPassword>'),
    port=9200,
    use_ssl=False
)
res = es.index(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>, body={"<YourEsField1>": "<YourEsFieldValue1>", "<YourEsField2>": "<YourEsFieldValue2>"})
res = es.get(index="<YourEsIndex>", doc_type="<YourEsType>", id=<YourEsId>)
print(res['_source'])

关于如何在Kibana控制台创建角色和用户,以及权限配置方法,包括配置索引只读权限、配置索引读写和集群只读权限、配置Dashboard操作权限等,请参考官网详细说明:https://help.aliyun.com/document_detail/194708.html

以下是由于缺少用户信息或者使用的测试用户gxj_test缺少相应权限情况下,访问Elasticsearch实例失败的报错信息:

image.png

以下是为用户gxj_test授权后能够正常访问Elasticsearch实例的返回信息:

image.png

9. 总结

本文主要介绍了自建Elasticsearch迁移至阿里云的几种方案,并结合迁移实战介绍了在迁移整个过程中以及完成迁移后使用阿里云Elasticsearch可能遇到的常见问题和对应解决方法。本文无法列举出Elasticsearch迁移过程中可能遇到的所有问题,有些问题需要基于业务场景进行分析,也欢迎大家积极在社区分享更多Elasticsearch迁移的最佳实践。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
7月前
|
机器学习/深度学习 运维 数据可视化
|
8月前
|
分布式计算 大数据 API
完美避坑!记一次Elasticsearch集群迁移架构实战
Elastic自身设计了集群分片的负载平衡机制,当有新数据节点加入集群或者离开集群,集群会自动平衡分片的负载分布。
|
存储 SQL 分布式计算
clickhouse集群安装与实践
因项目需要,将阿里云中间件tablestore替换成clickhouse,并将tablestore中的亿级数据迁移到clickhouse
1045 2
|
弹性计算 Java 应用服务中间件
【最佳实践】Logstash高效的数据索引迁移能力—如何实现从腾讯云Elasticsearch迁移至阿里云
本文为您介绍通过Logstash,将Elasticsearch(简称ES)索引从腾讯云ES迁移至阿里云ES中的方法。
3143 0
【最佳实践】Logstash高效的数据索引迁移能力—如何实现从腾讯云Elasticsearch迁移至阿里云
|
API 索引 存储
干货 Elasticsearch方案选型必须了解的10件事!
Elasticsearch 目前被广泛使用,也越来越受到欢迎。一些传统的行业甚至婚庆公司都已经在使用Elasticsearch。
1698 0
|
存储 弹性计算 Java
自建Elasticsearch通过Logstash全量、增量迁移阿里云
利用Logstash将自建Elasticsearch数据全量、增量迁移到阿里云Elasticsearch。部署Logstash在阿里云ECS上,Logstash ECS选择和阿里云Elasticsearch集群相同的VPC,同时Logstash需要支持同时访问源ES集群、目标ES集群。 数据迁移可以全量迁移和增量迁移,首次迁移都是全量迁移,后续写入数据选择增量迁移,增量迁移需要索引有时间戳字段。环
1695 0
自建Elasticsearch通过Logstash全量、增量迁移阿里云
|
弹性计算 JavaScript API
Elasticsearch迁移方案
Elasticsearch迁移方案
811 0
|
消息中间件 存储 容灾
Elasticsearch 多种跨机房灾备方案对比与实战解读
本文将会介绍几种 Elasticsearch 常见的灾备方案,同时提供了 Demo 案例方便大家动手体验。
4433 1
Elasticsearch 多种跨机房灾备方案对比与实战解读
|
JSON JavaScript API
Elasticsearch 跨集群数据迁移方案总结
Elasticsearch 跨集群数据迁移方案总结
582 0
Elasticsearch 跨集群数据迁移方案总结
|
存储 缓存 固态存储
Elasticsearch集群规划最佳实践
Elasticsearch集群规划最佳实践
1071 0
Elasticsearch集群规划最佳实践