通过Reindex API实现Elasticsearch集群间数据迁移
使用Reindex API可以实现Elasticsearch集群间的数据迁移。
应用场景
- 集群合并:Reindex API能够将分散在多个Elasticsearch集群中的索引数据合并至单一集群,实现数据的集中管理和分析。
- 服务迁移上云:企业可以将自建的Elasticsearch服务迁移至云平台,以利用云服务的弹性扩展、简化维护和成本效益。
- 变更服务提供商:对于当前使用第三方Elasticsearch服务的企业,若出于成本、性能或其他战略考量,希望更换至华为云等其他服务提供商,Reindex API提供了一种迁移途径。
- 全量迁移:实现跨集群的完整索引数据迁移。在此过程中,必须暂停对源集群的写入操作,以确保源集群与目标集群数据的一致性。
- 增量迁移:当集群索引包含时间字段时,Reindex API支持基于时间戳的增量数据迁移。在业务切换阶段,全量迁移完成后,需暂停源集群的写入操作,并利用Reindex API基于最近更新时间快速同步增量数据,随后将业务全面切换至目标集群。
- 索引重构:当需要调整索引结构,如Mapping、分词器或分片设置时,Reindex API可用于在迁移过程中重新配置索引结构。
方案架构
通过Reindex API实现Elasticsearch集群间数据迁移的迁移流程如图1所示。
- 在目标集群配置Reindex白名单,连接源集群和目标集群。
- 通过Reindex API,将源集群的索引数据迁移至目标集群。
方案优势
- 操作简单:Reindex API作为Elasticsearch的内置功能,提供了一个简单直接的方法来迁移数据,无需复杂的配置或额外的工具。
- 数据处理灵活:在迁移过程中,可以对数据进行处理,例如调整Mapping、分词、Shard等。
- 性能控制:在迁移过程中,可以通过配置Scroll API的参数来控制迁移速率,优化迁移性能。
性能影响
Reindex API的工作原理基于Scroll API,此API能够高效地从源集群查找索引数据,并批量同步至目标集群。这一过程可能会对源集群性能产生影响,具体影响程度取决于目标集群对源集群的读取速度,而读取速度取决于Scroll API的size和slice参数配置。参数配置的详细指导可参考Reindex API文档。
由于Reindex任务在Elasticsearch集群中作为异步任务执行,在低并发情况下对源集群性能的影响是可管理的。然而,对于资源占用较高的集群,建议通过调整Scroll API的size参数来减缓迁移速度,或选择在业务低峰期进行迁移,以降低对业务的影响。
约束限制
- 集群迁移过程中,源集群的索引数据不能增删改,否则会导致迁移后的源集群数据和目标集群数据内容不一致。
- 源集群和目标集群的版本必须一致。
前提条件
- 源Elasticsearch集群和目标Elasticsearch集群处于可用状态。
- 集群间需要保证网络连通。
- 如果源集群和目标集群在不同VPC,则需要先打通VPC网络建立对等连接。具体操作请参见对等连接简介。
- 如果是自建Elasticsearch集群迁移至华为云,则可以通过给自建Elasticsearch集群配置公网访问打通网络。
- 如果是第三方Elasticsearch集群迁移至华为云,则需要建立企业内部数据中心到华为云的VPN通道或专线。
- 确认集群的索引已开启“_source”。
集群索引的“_source”默认是开启的。执行命令GET {index}/_search,当返回的索引信息里有“_source”信息时表示已开启。
获取Elasticsearch源集群信息
在迁移集群前,需要先获取必备的源集群信息,用于配置迁移任务。
源集群来源 |
要获取的信息 |
获取方式 |
---|---|---|
华为云Elasticsearch集群 |
|
|
自建Elasticsearch集群 |
|
联系服务管理员获取。 |
第三方Elasticsearch集群 |
|
联系服务管理员获取。 |
源集群的来源不同,获取信息的方式不同,此处仅介绍如何获取华为云Elasticsearch集群的信息。
配置Reindex白名单
- 登录云搜索服务管理控制台。
- 在左侧菜单栏选择 。
- 在Elasticsearch集群列表,单击目标集群,进入集群基本信息页面。
- 在左侧导航栏选择“参数配置”,单击“编辑”,添加自定义参数配置Reindex白名单。
- 参数名称:reindex.remote.whitelist
- 参数值:填写源集群的访问地址,获取方式请参见获取Elasticsearch源集群信息。
当源Elasticsearch集群是HTTPS访问方式,则还需要添加自定义参数忽略SSL认证。
- 参数名称:reindex.ssl.verification_mode
- 参数值:none
- 单击“提交”,在弹窗中确认参数无误后勾选“参数修改后需要手动重启才能生效”,单击“确定”。
- 返回Elasticsearch集群列表,单击目标集群操作列的“更多 > 重启”重启集群,使修改的配置生效。
通过Reindex API迁移集群数据
- 在目标集群,创建索引结构。
- 登录云搜索服务管理控制台。
- 在左侧菜单栏选择 。
- 在Elasticsearch集群列表,单击集群操作列的“Kibana”,登录Kibana。
- 单击左侧导航栏的“Dev Tools”进入操作页面。
- 执行命令,创建和源集群一样的索引结构。
PUT {index_name} { 源集群的索引结构 }
index_name表示迁移后的索引名称。源集群的索引结构可参见获取Elasticsearch源集群信息获取。
- 执行如下命令,通过Reindex API迁移集群数据。
- 全量迁移:源集群的索引数据全量迁移到目标集群。
在目标集群的Kibana,执行如下命令:
POST _reindex?wait_for_completion=false { "source": { "remote": { "host": "http://xx.xx.xx.xx:9200", //源集群的访问地址,当源集群是HTTPS访问方式,则使用“https://xx.xx.xx.xx:9200”。 "username": "xxx", //访问源集群的用户名,仅安全集群涉及。 "password": "******" //访问源集群的用户密码,仅安全集群涉及。 }, "index": "index_name", //源集群的索引名称。 "size": 3000 }, "dest": { "index": "index_name" //目标集群的索引名称。 } }
- 增量迁移:通过时间字段,将源集群的索引数据增量迁移到目标集群。该方案也可以用于进行大数据量索引的分段迁移。
在目标集群的Kibana,执行如下命令:
POST _reindex?wait_for_completion=false { "source": { "remote": { "host": "http://xx.xx.xx.xx:9200", //源集群的访问地址,当源集群是HTTPS访问方式,则使用“https://xx.xx.xx.xx:9200”。 "username": "xxx", //访问源集群的用户名,仅安全集群涉及。 "password": "******" //访问源集群的用户密码,仅安全集群涉及。 }, "query": { "range" : { "timestamps" : { //增量时间字段。 "gte" : "xxx", //增量迁移的开始时间。 "lte" : "xxx" //增量迁移的结束时间。 } } }, "index": "index_name", //源集群的索引名称。 "size": 3000 }, "dest": { "index": "index_name" //目标集群的索引名称。 } }
- 同集群索引重构:Reindex API在迁移过程中可以重新配置索引结构。
在目标集群的Kibana,执行如下命令:
POST _reindex?wait_for_completion=false { "source": { "index": "index_name", //源集群的索引名称 "size": 3000 }, "dest": { "index": "index_name" //目标集群的索引名称 } }
- 全量迁移:源集群的索引数据全量迁移到目标集群。
常见问题:当索引数据大、数据同步慢时,如何处理?
当索引数据大、数据同步慢时,有如下几种方案可以提高效率。
- Reindex API是使用Scroll方式读取源端数据写入目标端,因此可以通过配置size和slice参数增加迁移并发和速度。具体使用指导请参见Reindex API。
- 当单个索引数据量比较大时,可以在迁移前将目标索引的副本数设置为0,以加快数据同步速度。待数据迁移完成后,再修改为实际值。
- 当源端数据量很大时,建议采用快照方式迁移数据。例如通过备份与恢复实现华为云Elasticsearch集群间数据迁移、通过S3插件备份与恢复迁移自建Elasticsearch集群至华为云和通过备份与恢复迁移第三方Elasticsearch集群至华为云。
- 当索引数据存在时间字段时,可以使用跨集群增量迁移方案,分段迁移索引数据。