首页 > 解决方案 > 无法为暖节点分配索引

问题描述

我有一个具有 11 个节点的弹性搜索集群版本 7.5.1:3 个主节点+ 2 个 htpp 节点+ 6 个数据节点+ 1 个暖节点。我设置了 node.attr.box_type: hot 和 node.attr.box_type: warm 节点。我现在正试图将旧索引移动到暖节点。但是,面临以下2个问题

  1. 一旦将暖节点添加到集群中,分片就开始在暖节点上分配,这本不应该发生。因此,我现在将“cluster.routing.allocation.exclude._ip”设置为暖节点 IP,以阻止分片分配给暖节点。

  2. 当我手动尝试将旧索引分配给暖节点时,会出现以下异常

{
        "type" : "resource_already_exists_exception",
        "reason" : "index [index_name/node_id] already exists",
        "index_uuid" : "KIu4GGyUTEyRuQVR8BmYZQ",
        "index" : "index_name"
      }

有人可以帮我实现热温架构吗

标签: elasticsearch

解决方案


这个想法是在启动暖节点之前使用分片分配过滤将所有索引分配给热节点,如下所示:

PUT _all/_settings
{
  "index.routing.allocation.require.box_type": "hot"
}

运行此命令时,ES 将确保所有索引分片都分配给热节点。

然后您可以启动您的暖节点,当它启动并运行时,您可以在要移动到暖节点的索引上运行以下命令:

PUT warm-index-name/_settings
{
  "index.routing.allocation.require.box_type": "warm",
  "index.number_of_replicas": 0
}

运行上述命令时,ES 会将所有主分片重新定位warm-index-name到暖节点并删除所有副本分片,因为您只有一个暖节点,因此它们将处于未分配状态。

如果您使用的是 ES 7.10 或更高版本,则设置热/温架构的新方法是利用数据层,该数据层只需将特定角色分配给数据节点,例如data_hot、等,data_warm然后使用数据层分配过滤为了将分片路由到正确的节点。


推荐阅读