首页 > 解决方案 > 如何加快节点之间的数据传输到我的 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 需要每个月都使用新的安全实施进行更新。

标签: elasticsearch

解决方案


如果集群中的每个分片都被复制,我建议只根据集群中的新 AMI 添加新节点,然后删除旧节点。

请注意,在删除任何节点之前,您应该等待分配所有分片(即集群状态为“绿色”)。一个一个地移除节点,等待集群状态变为绿色。

这个过程应该很容易自动化。

如果不是所有分片都有副本,您可以:

  • 为这些索引设置 replicas=1,并在完成“刷新”节点后,再次设置 replicas=0。
  • 告诉集群停止将分片路由到被删除的节点:
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.include._ip " : "<ip of the node>"
}
}

有关更多信息,请参阅:https ://www.elastic.co/guide/en/elasticsearch/reference/7.14/modules-cluster.html#cluster-shard-allocation-filtering

我认为最后一种方法是最好的,不管你有没有副本分片。


推荐阅读