自建Elasticsearch迁移上云实战

简介: 自建的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迁移的最佳实践。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
7月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
1155 6
|
人工智能 自然语言处理 运维
让搜索引擎“更懂你”:AI × Elasticsearch MCP Server 开源实战
本文介绍基于Model Context Protocol (MCP)标准的Elasticsearch MCP Server,它为AI助手(如Claude、Cursor等)提供与Elasticsearch数据源交互的能力。文章涵盖MCP概念、Elasticsearch MCP Server的功能特性及实际应用场景,例如数据探索、开发辅助。通过自然语言处理,用户无需掌握复杂查询语法即可操作Elasticsearch,显著降低使用门槛并提升效率。项目开源地址:&lt;https://github.com/awesimon/elasticsearch-mcp&gt;,欢迎体验与反馈。
3355 1
|
存储 数据采集 数据处理
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
819 12
|
人工智能 自然语言处理 开发者
Langchain 与 Elasticsearch:创新数据检索的融合实战
Langchain 与 Elasticsearch:创新数据检索的融合实战
|
存储 缓存 监控
干货 | Elasticsearch 8.X 性能优化实战
干货 | Elasticsearch 8.X 性能优化实战
|
存储 机器学习/深度学习 API
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
858 1
|
缓存 数据处理 数据安全/隐私保护
Elasticsearch索引状态管理实战指南
Elasticsearch索引状态管理实战指南
352 0
|
存储 索引
Elasticsearch索引之嵌套类型:深度剖析与实战应用
Elasticsearch索引之嵌套类型:深度剖析与实战应用