如果您需要将一个阿里云Elasticsearch(简称ES)集群中的数据迁移到另一个ES集群中时,可以通过reindex API重建索引来实现。本文介绍两个均处于旧网络架构的集群通过reindex方式进行集群间数据迁移。
场景说明
以下为阿里云ES间跨集群reindex的应用场景说明,请结合业务数据情况及所处网络架构进行选择。
ES集群间迁移数据。
索引分片分配不合理,例如数据量太大分片数太少,可通过reindex重建索引。
索引中存在大量数据的情况下,需要修改索引mapping,可通过reindex复制索引数据。
2020年10月阿里云ES进行了网络架构调整,新网络架构下的集群跨集群reindex需依赖Privatelink打通阿里云ES集群私网。您可以参见下表,依据您的业务场景选择解决方案进行处理。
2020年10月之前创建的ES集群属于旧网络架构,2020年10月及之后创建的ES集群属于新网络架构。
使用场景 | ES集群所处网络架构 | 解决方案 |
阿里云ES集群间的数据迁移 | 两个ES集群均创建于旧网络架构下。 | reindex方式:阿里云ES间跨集群reindex。 |
其中一个ES集群创建于新网络架构下。 说明 另一个ES集群可以创建于新网络架构,也可以创建于旧网络架构。 |
| |
将ECS上自建的ES集群中的数据迁移至阿里云ES集群中 | 阿里云ES集群创建于旧网络架构下。 | reindex方式:通过reindex将自建ES数据迁移至阿里云。 |
阿里云ES集群创建于新网络架构下。 | reindex方式:通过实例私网打通将自建Elasticsearch数据迁移至阿里云。 |
前提条件
准备两个处于旧网络架构的阿里云ES集群,两个集群需要在同一专有网络和虚拟交换机下。本文使用6.7.0版本的实例作为本地集群,6.3.2版本的实例作为远程集群。
准备测试数据。
本地集群
在本地集群中创建目标索引。
PUT dest { "settings": { "number_of_shards": 5, "number_of_replicas": 1 } }
远程集群
在远程集群中准备待迁移的数据。本文使用快速入门章节中的数据测试,详细信息请参见快速入门。
重要如果您使用的是7.0及以上版本的集群,需要将索引类型修改为_doc。
操作步骤
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
在本地集群中,配置reindex白名单。
在左侧导航栏,选择 。
在YML文件配置右侧,单击修改配置。
在其他Configure配置文本框中,输入reindex白名单。
reindex白名单的配置格式与实例的可用区数量有关,具体如下:
单可用区实例:白名单的格式为<阿里云Elasticsearch实例的域名>:9200。例如:
reindex.remote.whitelist: ["es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200"]
多可用区实例:白名单需要配置为实例中所有数据节点的IP地址与端口的组合。例如:
reindex.remote.whitelist: ["10.0.xx.xx:9200","10.0.xx.xx:9200","10.0.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200","10.15.xx.xx:9200"]
说明您可以在实例基本信息页面的节点可视化页签中,获取实例中所有数据节点的IP地址。详细信息,请参见查看节点的基本信息。
更多关于reindex白名单的配置说明,请参见配置reindex白名单。
选中该操作会重启实例,请确认后操作,单击确定。
确定后,Elasticsearch实例会重启。重启过程中,可在任务列表查看进度。重启成功后,即可完成配置。
在本地集群中,调用reindex API重建索引。
登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。
登录Kibana控制台的具体操作,请参见登录Kibana控制台。说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。在左侧导航栏,单击Dev Tools。
在Console中,执行如下命令,重建索引。
POST _reindex { "source": { "remote": { "host": "http://es-cn-09k1rgid9000g****.elasticsearch.aliyuncs.com:9200", "username": "elastic", "password": "your_password" }, "index": "product_info", "query": { "match": { "productName": "理财" } } }, "dest": { "index": "dest" } }
类别
参数
说明
source
host
远程集群的访问地址,必须包含支持协议、域名和端口信息,例如https://otherhost:9200。host配置格式与实例的可用区数量有关,具体如下:
单可用区实例:http://<实例的域名>:9200。
说明实例的域名可在基本信息页面获取。详细信息,请参见查看实例的基本信息。
多可用区实例:http://<实例中任意数据节点的IP地址>:9200。
username
可选参数,如果您所请求的远程Elasticsearch服务需要使用Basic Authentication,请在请求中一并提供此参数信息。阿里云Elasticsearch实例的默认用户名为elastic。
重要为确保安全性,通过Basic Authentication鉴权时建议使用HTTPS协议,否则密码信息将以文本形式进行传输。
对于阿里云Elasticsearch实例,需要开启HTTPS协议后,才可在host中使用HTTPS协议。开启HTTPS协议的具体操作请参见使用HTTPS协议。
password
用户对应的密码。阿里云Elasticsearch实例的elastic用户的密码在创建实例时设定,如果忘记可进行重置。重置密码的注意事项及具体操作,请参见重置实例访问密码。
index
远程集群中的源索引。
query
通过查询语法,指定待迁移的数据。详细信息,请参见Reindex API。
dest
index
本地集群中的目标索引。
执行成功后,预期结果如下。
{ "took" : 51, "timed_out" : false, "total" : 2, "updated" : 2, "created" : 0, "deleted" : 0, "batches" : 1, "version_conflicts" : 0, "noops" : 0, "retries" : { "bulk" : 0, "search" : 0 }, "throttled_millis" : 0, "requests_per_second" : -1.0, "throttled_until_millis" : 0, "failures" : [ ] }
查看迁移成功的数据。
GET dest/_search
预期结果如下:
单可用区实例
多可用区实例
总结
通过reindex API迁移数据时,单可用区的阿里云Elasticsearch实例和多可用区实例的配置方法大致相同,不同之处在于以下两点。
可用区类型 | reindex白名单配置 | host参数配置 |
单可用区 | 阿里云Elasticsearch的域名和端口 |
|
多可用区 | 实例中所有数据节点的IP地址和端口 |
|
更多信息
在调用reindex API重建索引时,您还可以进行批量设置和超时时间设置:
批量设置
远程Elasticsearch集群使用堆缓存索引数据,默认最大值为100 MB。如果远程索引中包含大文档,请将批量数值设置为较小值。
以下示例中,通过size设置批量数值为10。
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200" }, "index": "source", "size": 10, "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }
超时时间设置
您可以使用socket_timeout设置socket读取超时时间,默认为30s;使用connect_timeout设置连接超时时间,默认为1s。
以下示例中,设置socket读取超时时间为1分钟,连接超时时间为10秒。
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200", "socket_timeout": "1m", "connect_timeout": "10s" }, "index": "source", "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }