分配编辑

允许的阶段:温热、冷。

更新索引设置以更改允许托管索引分片的节点并更改副本数。

在热阶段不允许进行分配操作。索引的初始分配必须手动完成或通过索引模板完成。

您可以配置此操作以修改分配规则和副本数,仅修改分配规则,或仅修改副本数。有关 Elasticsearch 如何使用副本进行扩展的更多信息,请参阅可扩展性和弹性。有关控制 Elasticsearch 在何处分配特定索引的分片的更多信息,请参阅索引级分片分配过滤

选项编辑

您必须指定副本数或至少一个includeexcluderequire选项。空的分配操作无效。

有关使用自定义属性进行分片分配的更多信息,请参阅索引级分片分配过滤

number_of_replicas
(可选,整数)要分配给索引的副本数。
total_shards_per_node
(可选,整数)单个 Elasticsearch 节点上索引的最大分片数。-1的值被解释为无限制。请参阅总分片数
include
(可选,对象)将索引分配给具有至少一个指定自定义属性的节点。
exclude
(可选,对象)将索引分配给没有指定自定义属性的节点。
require
(可选,对象)将索引分配给具有所有指定自定义属性的节点。

示例编辑

以下策略中的分配操作将索引的副本数更改为2。任何单个节点上放置的索引分片不超过 200 个。否则,不会更改索引分配规则。

response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            allocate: {
              number_of_replicas: 2,
              total_shards_per_node: 200
            }
          }
        }
      }
    }
  }
)
puts response
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "allocate" : {
            "number_of_replicas" : 2,
            "total_shards_per_node" : 200
          }
        }
      }
    }
  }
}

使用自定义属性将索引分配给节点编辑

以下策略中的分配操作将索引分配给box_type为_hot_或_warm_的节点。

要指定节点的box_type,请在节点配置中设置自定义属性。例如,在elasticsearch.yml中设置node.attr.box_type: hot。有关更多信息,请参阅启用索引级分片分配过滤

response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            allocate: {
              include: {
                box_type: 'hot,warm'
              }
            }
          }
        }
      }
    }
  }
)
puts response
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "allocate" : {
            "include" : {
              "box_type": "hot,warm"
            }
          }
        }
      }
    }
  }
}

根据多个属性将索引分配给节点编辑

分配操作还可以根据多个节点属性将索引分配给节点。以下操作根据box_typestorage节点属性分配索引。

response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        cold: {
          actions: {
            allocate: {
              require: {
                box_type: 'cold',
                storage: 'high'
              }
            }
          }
        }
      }
    }
  }
)
puts response
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "cold": {
        "actions": {
          "allocate" : {
            "require" : {
              "box_type": "cold",
              "storage": "high"
            }
          }
        }
      }
    }
  }
}

将索引分配给特定节点并更新副本设置编辑

以下策略中的分配操作将更新索引,使其每个分片具有一个副本,并分配给box_type为_cold_的节点。

要指定节点的box_type,请在节点配置中设置自定义属性。例如,在elasticsearch.yml中设置node.attr.box_type: cold。有关更多信息,请参阅启用索引级分片分配过滤

response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      phases: {
        warm: {
          actions: {
            allocate: {
              number_of_replicas: 1,
              require: {
                box_type: 'cold'
              }
            }
          }
        }
      }
    }
  }
)
puts response
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "allocate" : {
            "number_of_replicas": 1,
            "require" : {
              "box_type": "cold"
            }
        }
        }
      }
    }
  }
}