elasticsearch - 如何加快节点之间的数据传输到我的 Elasticsearch 集群
问题描述
通常我的 ES 集群有三个节点,一个主节点和两个副本。对于每次新部署,我们通过更改 Elasticsearch 配置并添加新的三个节点来将 ES 数据移动到新的 ES 集群:
discovery.zen.ping.unicast.hosts: ["HOSTNAME1", "HOSTNAME2", "HOSTNAME3","NEW_HOSTNAME4", "NEW_HOSTNAME5", "NEW_HOSTNAME6"]
数据在节点之间复制和拆分,然后通过 API 调用排除旧节点:
"cluster.routing.allocation.exclude._ip" : "IP_HOSTNAME1,IP_HOSTNAME2,IP_HOSTNAME3"
最后,所有数据都移动到新节点上,旧的 ES 集群被销毁,部署完成。问题是数据正在快速增长,并且在 ES 节点之间复制和移动数据的过程需要更长的时间。我们等待大约 1 小时 30 分钟才能移动约 200GB 的数据。ES 是否有一些微调来加快节点之间的数据传输?
我们有这个流程是因为 ES 节点的 AMI/OS 需要每个月都使用新的安全实施进行更新。
解决方案
如果集群中的每个分片都被复制,我建议只根据集群中的新 AMI 添加新节点,然后删除旧节点。
请注意,在删除任何节点之前,您应该等待分配所有分片(即集群状态为“绿色”)。一个一个地移除节点,等待集群状态变为绿色。
这个过程应该很容易自动化。
如果不是所有分片都有副本,您可以:
- 为这些索引设置 replicas=1,并在完成“刷新”节点后,再次设置 replicas=0。
- 告诉集群停止将分片路由到被删除的节点:
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.include._ip " : "<ip of the node>"
}
}
我认为最后一种方法是最好的,不管你有没有副本分片。
推荐阅读
- powershell - 获取某个日期范围内与 Active Directory 的连接数并按用户分组
- .net - 运行 VS 2019 Web 应用程序的问题:“/”应用程序中的服务器错误
- c++ - 如何在我的 cmake 项目中包含另一个 cmake 项目的头文件?
- webrtc - 通过我们的服务器代理请求时,如何获取用户所在地区最近的 Xirsys STUN/TURN 服务器
- javascript - rabbitmq Publish函数中的多个错误处理程序,同时使用基于Promise的api
- r - R中的嵌套循环
- javascript - 更新行而不是添加新行
- mysql - 与函数 Wait() 相关的问题
- java - 从 Azure 密钥保管库获取机密
- common-lisp - 如何在我的 Mac 上安装 aserve 并将其加载到 lispbox-0.7 中?