Delayed allocation (延迟分配)

Delaying allocation when a node leaves (延迟分配当节点离开时)

当一个节点出于某种原因离开集群时,不管是有意的还是其他原因,主节点作出反应。

  • 推进复制的备份 去替换掉主分片 在节点上面
  • 分配副本碎片以替换丢失的副本(假设有足够的节点)。
  • 在剩余节点上均匀地平衡碎片

想象一下这个场景:

节点5丢失网络连接。 master 提升复制碎片 主要为每个primary分片 要是节点5。 master 分配新副本到集群中的其他节点。

更多的碎片被移动到不同的节点以重新平衡集群。 节点5在几分钟后返回。 掌握平衡的集群配置碎片节点5。

如果 master 等待了几分钟,那么丢失的碎片可能被重新分配到节点5,网络流量最小。 对于空闲的碎片(不接收索引请求的碎片),这个过程会更快,已自动同步刷新。

副本的碎片成为分配未分配,因为一个节点已经离开,所以可以用 index.unassigned.node_left.delayed_timeout 动态设定 默认为1分钟

可以在 存活 索引(或所有索引)上更新此设置:

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

搬迁消除的碎片 搬迁消除的碎片

如果延迟分配超时,主机将丢失的碎片分配给另一个节点,该节点将开始恢复。如果丢失的节点重新加入群集,其碎片仍然有相同的同步ID为首要,碎片搬迁将取消,同步碎片将用于恢复相反

监控延迟分配的碎片

由于此超时设置而导致分配延迟的碎片数目。设置可以查看 cluster health API:

GET _cluster/health

一个永久的删除节点

如果节点不返回 你会像Elasticsearch配置丢失的碎片立即 只需将超时更新为零:

PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "0"
  }
}

results matching ""

    No results matching ""