《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.12.Reindex API(6) https://developer.aliyun.com/article/1230241
远程重新索引
重新索引支持从远程 Elasticsearch 复制数据:
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200", "username": "user", "password": "pass" }, "index": "my-index-000001", "query": { "match": { "test": "data" } } }, "dest": { "index": "my-new-index-000001" } }
Host 参数必须包含 scheme,host,port(如:https://otherhost:9200)或者代理路径
(https://otherhost:9200/proxy)。
_reindex 需要基本授权认证链接远程 Elasticsearch 集群,才需要用户名和密码参数;使用基本身份验证时请确保使用https协议,否则密码将以纯文本形式发送。
如果是 reindex 远程集群的数据,则必须在当前集群的某个节点(请求发送到的那个节点,即协调节点)配置白名单,在 elasticsearch.yml 文件中添加 reindex.remote.whitelist 属性,该属性的值为请求远程集群节点的 host:port,可以用逗号分隔配置多个,也可以使用通配符方式。
示例如下:
reindex.remote.whitelist: "otherhost:9200, another:9200, 127.0.10.*:9200, localhost:*"
此外在做远程reindex时,需要注意集群之前的版本兼容问题。Elasticsearch 不支持跨大版本的向前兼容,如不能从 7.x 群集重新索引到 6.x 群集
从远程服务器重新索引时使用堆内缓冲区,默认最大为 100mb;如果远程索引的文档非常大,那么批的 size 就应该设置的小一点。
如下代码块设置 batch size 为10:
POST _reindex { "source": { "remote": { "host": "http://otherhost:9200" }, "index": "source", "size": 10, "query": { "match": { "test": "data" } } }, "dest": { "index": "dest" } }
连接远程 Elasticsearch 集群,可以通过socket_timeout和connect_timeout,分别设置
socket读取超时时间和链接超时时间,在一定程度上保证 reindex 的稳定性(网络延迟问题),两者的默认值均为 30秒。
如下示例分别设置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" } }
配置 SSL 参数
从远程集群reindex支持配置 ssl。这些参数是无法在_reindex请求体配置。必须在elasticsearch.yml文件中指定,但在 Elasticsearch 密钥库中添加的安全设置除外,可支持的 ssl 参数。
配置如下:
创作人简介:
杨松柏,目前就职于好未来教育科技集团,任数据平台资深研发工程师。 长期关注ELK、TiDB、clickhouse 等分布式存储技术,对于 Elasticsearch 和 TiDB 都有深入的理解。
博客:https://blog.csdn.net/yang52017