本文主要介绍当您的阿里云Elasticsearch创建于新网络架构下时,如何通过实例私网连接打通网络后,使用reindex方式将ECS上自建的Elasticsearch中的数据迁移至阿里云Elasticsearch中,包括创建索引和迁移数据。
前提条件
- 自建Elasticsearch需要满足以下条件:
- 所在的ECS的网络类型必须是专有网络(不支持Classiclink方式打通的ECS),且必须与阿里云Elasticsearch在同一个专有网络下。
- 所在的ECS的安全组不能限制阿里云Elasticsearch实例的各节点IP(Kibana控制台可查看各节点的IP),且要开启9200端口。
- 已经与阿里云Elasticsearch实例连通。可在执行脚本的机器上,使用
curl -XGET http://<host>:9200
验证。说明 您可以通过任意一台机器执行文档中的脚本,前提是该机器可以同时访问自建Elasticsearch和阿里云Elasticsearch集群的9200端口。 - 准备自建Elasticsearch索引数据,本文以下图中的source索引作为需要迁移的索引为例。
- 阿里云Elasticsearch需要满足以下条件:
- 提前开启自动创建索引功能或者在阿里云Elasticsearch上创建好索引
mappings
、settings
。 - 未做白名单限制。
- 提前开启自动创建索引功能或者在阿里云Elasticsearch上创建好索引
使用限制
自2020年10月起,由于网络架构的调整,导致部分通过reindex方式跨集群迁移数据的场景受到了限制。您可以参见下表,查看您的业务场景是否支持reindex功能,并参考解决方案进行处理。
使用场景 | 网络状态(2020年10月之前属于旧网络架构,2020年10月及之后属于新网络架构) | 是否支持reindex功能 | 解决方案 |
---|---|---|---|
通过reindex方式迁移阿里云Elasticsearch集群间的数据 | 两个Elasticsearch集群均创建于旧网络架构下。 | 是 | 请参见通过reindex迁移数据。 |
两个Elasticsearch集群均创建于新网络架构下。 | 否 | 不支持reindex方式,建议使用OSS或Logstash方式。具体操作请参见通过OSS将自建Elasticsearch数据迁移至阿里云和通过阿里云Logstash将自建Elasticsearch数据迁移至阿里云。 | |
两个Elasticsearch集群分别创建于旧网络架构下和新网络架构下。 | 否 | ||
将ECS上自建的Elasticsearch集群中的数据迁移至阿里云Elasticsearch集群中 | 阿里云Elasticsearch集群创建于旧网络架构下。 | 是 | 请参见通过reindex将自建Elasticsearch数据迁移至阿里云。 |
阿里云Elasticsearch集群创建于新网络架构下。 | 是 | 借助PrivateLink,打通ECS上自建Elasticsearch集群所处的网络与阿里云服务账号的网络,再使用终端节点域名进行reindex。详情请参见通过实例私网打通将自建Elasticsearch数据迁移至阿里云。 说明 PrivateLink仅支持部分地域私网连接,详情请参见支持私网连接的地域和可用区。如果您的集群可用区不满足此条件,则不支持reindex功能。 |
操作流程
- 步骤一:配置支持PrivateLink功能的负载均衡实例目前,仅支持PrivateLink功能的负载均衡实例作为终端节点服务的服务资源。通过PrivateLink实现在VPC间私网访问服务前,您需要创建支持PrivateLink功能的负载均衡实例,并配置相关监听信息。
- 步骤二:创建终端节点服务终端节点服务是可以被其他VPC通过创建终端节点建立私网连接的服务,待负载均衡实例配置完成后,您需要创建终端节点服务。
- 步骤三:配置阿里云Elasticsearch私网互通在Elasticsearch控制台关联阿里云Elasticsearch实例与步骤二中创建的终端节点服务。
- 步骤四:获取终端节点域名目标实例与终端节点服务关联成功后,即可获取终端节点域名,用于配置reindex白名单。
- 步骤五:配置reindex白名单在Elasticsearch控制台将步骤四中获取的域名配置到目标实例的reindex白名单中,进行授权。
- 步骤六:数据迁移完成以上步骤后,即完成源实例与目标实例间的网络互通,可以进行数据迁移。
步骤一:配置支持PrivateLink功能的负载均衡实例
- 创建负载均衡实例。确保负载均衡实例的地域和后端添加的云服务器ECS的地域相同。详情请参见创建支持PrivateLink功能的负载均衡实例。说明 PrivateLink仅支持部分地域私网连接,详情请参见支持私网连接的地域和可用区。如果您的集群可用区不满足此条件,则不支持reindex功能。
- 配置协议&监听。选择负载均衡协议为TCP,并配置端口号为9200。详情请参见配置协议&监听。
- 配置后端服务器,添加自建ES所在的ECS服务器,并配置端口号为9200。详情请参见配置后端服务器。
- 单击下一步,按需配置健康检查,本文以默认值为例。
- 配置完成后,单击提交,根据页面提示返回实例管理页面,查看后端ECS实例的健康检查状态。
当后端ECS实例的健康检查状态为正常时,表示后端ECS实例可以正常处理负载均衡转发的请求了。
- 在负载均衡业务配置向导弹框中,单击知道了,返回实例管理页面。
当后端ECS实例的健康检查状态为正常时,表示后端ECS实例可以正常处理负载均衡转发的请求了。
步骤二:创建终端节点服务
- 登录终端节点服务控制台。
- 在顶部菜单栏处,选择要创建终端节点服务的地域。本文以华东1(杭州)为例。
- 单击创建终端节点服务,在服务创建页面,按需选择创建终端节点服务配置。具体操作和详细说明请参见创建和管理终端节点服务。本文使用的配置说明如下。
参数 说明 选择服务资源 选择要承载流量的可用区,然后选择与终端节点服务关联的负载均衡实例。负载均衡实例作为服务资源与终端节点服务关联,关联的负载均衡实例将接受来自您服务的用户的网络访问,终端节点服务的可用区与服务资源所在的主可用区一致。 可以作为服务资源的负载均衡实例必须满足以下两个条件:- 网络类型为专有网络。
- 功能特性为支持PrivateLink。
自动接受终端节点连接 选择是否自动接受终端节点的连接请求,建议选择是,取值含义如下: - 是:终端节点服务将自动接受终端节点的连接请求,通过终端节点能够访问服务。
- 否:终端节点连接将处于已断开状态,等待服务管理员进行处理:
- 如果服务管理员接受该终端节点对应的终端节点服务连接,通过终端节点将能够访问服务。
- 如果服务管理员拒绝该终端节点对应的终端节点服务连接,通过终端节点无法访问服务。
说明- 如果您的终端节点服务开启了自动接受连接,创建成功后,终端节点连接状态显示已连接。当状态为已连接时,支持拒绝连接。
- 如果您的终端节点服务未开启自动接受连接,则终端节点状态显示未连接,支持允许连接。
是否支持同可用区优先 选择是否支持同可用区优先,建议选择是。 描述 输入终端节点服务的描述信息,描述长度为2~256个字符,但是不能以http://和https://开头。 - 单击确定创建。
步骤三:配置阿里云Elasticsearch私网互通
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
- 在左侧导航栏,选择 。
- 在集群网络设置区域,单击配置实例私网连接右侧的修改。
- 在配置实例私网连接面板,单击+添加私网连接,选择步骤二中创建的终端节点服务和目标访问可用区,并选中系统提示信息。
- 单击确认,终端节点服务主动连接终端节点,连接成功后会显示已连接。
步骤四:获取终端节点域名
执行完以上步骤后,需要获取终端节点域名用于配置reindex白名单。
- 在配置实例私网连接面板中,单击目标终端节点ID。
- 在终端节点连接页签,单击目标终端节点ID前的图标,即可查看终端节点对应的域名。
步骤五:配置reindex白名单
重要 该操作会触发集群重启,建议在业务低峰期进行。
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
- 在左侧导航栏,选择 。
- 在YML文件配置区域,单击右侧的修改配置。
- 在YML文件配置面板,修改其他Configure配置,将从步骤四中获取的域名配置至此处。代码示例:
reindex.remote.whitelist: 'ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200'
- 单击确定。
步骤六:数据迁移
- 在Kibana控制台的Dev Tools中执行如下命令,进行数据迁移。说明 登录Kibana控制台的具体步骤请参见登录Kibana控制台。
POST /_reindex?pretty { "source": { "remote": { "host": "http://ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200", "username": "elastic", "password": "Elastic@123***" }, "index": "source", "size": 5000 }, "dest": { "index": "dest" } }
更多信息说明请参见reindex api。
- 可选:在数据迁移过程中,如果您需要获取所有正在运行的reindex请求状态,请执行以下命令。
GET _tasks?detailed=true&actions=*reindex
- 查看数据迁移结果。待数据迁移完成后,您可以通过执行以下命令查看数据迁移结果。
GET _cat/indices?
如果目标端索引test中显示健康状态正常并且数据大小正常,则证明数据迁移成功。
常见问题
问题:单索引数据量比较大,数据同步速度比较慢时,如何处理?
解决方法:
- 由于reindex功能的底层实现原理是通过scroll方式实现的,所以您可以适当调大scroll size的大小或配置scroll slice,借助scroll并行化机制提升效率。详情请参见reindex api。
- 如果源端数据量较大,建议采用OSS快照方式。详情请参见通过OSS将自建Elasticsearch数据迁移至阿里云。
- 如果单索引数据量比较大,可以在迁移前将目标索引的副本数设置为0,刷新时间设置为-1,以加快数据同步速度。待数据迁移完成后,再修改回来。
// 迁移索引数据前可以先将索引副本数设为0,不刷新,用于加快数据迁移速度。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 0, "refresh_interval" : "-1" }' // 索引数据迁移完成后,可以重置索引副本数为1,刷新时间1s(1s是默认值)。 curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' { "number_of_replicas" : 1, "refresh_interval" : "1s" }'