自建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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
存储 运维 监控
Elasticsearch Serverless形态对比测评
阿里云检索分析服务 Elasticsearch 版是100%兼容开源的分布式检索、分析套件。提供ELK开源全托管的产品服务能力。为结构化/非结构化数据提供低成本、高性能及可靠性的检索、分析平台级产品服务。Serverless版本是基于云原生Serverless技术,为用户打造的更低成本、弹性灵活、开放兼容、开箱即用的云上Elasticsearch服务。本文对比国内阿里云、华为云和腾讯云三大主要云服务提供商的该产品,希望能给大家带来一些帮助。
|
监控 数据可视化 Serverless
Elasticsearch Serverless体验
通过这次体验探究阿里云Elasticsearch Serverless版的基本功能、性能表现以及稳定性。同时也会针对Elasticsearch版进行对比分析。
446 68
|
机器学习/深度学习 运维 数据可视化
|
分布式计算 大数据 API
完美避坑!记一次Elasticsearch集群迁移架构实战
Elastic自身设计了集群分片的负载平衡机制,当有新数据节点加入集群或者离开集群,集群会自动平衡分片的负载分布。
|
监控 NoSQL MongoDB
《云数据库MongoDB监控指标解读与关注》电子版地址
云数据库MongoDB监控指标解读与关注
122 1
《云数据库MongoDB监控指标解读与关注》电子版地址
|
弹性计算 Java 应用服务中间件
【最佳实践】Logstash高效的数据索引迁移能力—如何实现从腾讯云Elasticsearch迁移至阿里云
本文为您介绍通过Logstash,将Elasticsearch(简称ES)索引从腾讯云ES迁移至阿里云ES中的方法。
3318 0
【最佳实践】Logstash高效的数据索引迁移能力—如何实现从腾讯云Elasticsearch迁移至阿里云
|
API 索引 存储
干货 Elasticsearch方案选型必须了解的10件事!
Elasticsearch 目前被广泛使用,也越来越受到欢迎。一些传统的行业甚至婚庆公司都已经在使用Elasticsearch。
1735 0
|
JSON JavaScript API
Elasticsearch 跨集群数据迁移方案总结
Elasticsearch 跨集群数据迁移方案总结
649 0
Elasticsearch 跨集群数据迁移方案总结
|
存储 缓存 固态存储
Elasticsearch集群规划最佳实践
Elasticsearch集群规划最佳实践
1382 0
Elasticsearch集群规划最佳实践
|
搜索推荐
云速搭部署Elasticsearch应用
本实践通过云速搭实现一个DTS+Elasticsearch的搜索引擎架构,构建一个快速分析和检索业务数据的系统。
云速搭部署Elasticsearch应用