# 分配改变

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_allocation.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_allocation.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260787](http://www.apache.wiki/pages/viewpage.action?pageId=4260787)

贡献者 : [片刻](/display/~jiangzhonglian)

## 主分片分配

以前，只有在发现仲裁副本的法定数量时才分配主分片（可以使用index.recovery.initial_shards配置，现在已弃用）。在原版仅具有单个副本的情况下，将定额定义为单个分片。这意味着任何具有复制因子1的索引的分片副本都可以成为主要副本，即使它是磁盘上的数据的过期副本。由于shard分配ID，这现在是固定的。

分配ID为分片副本分配唯一标识符。这允许集群在相同数据的多个副本之间进行区分，并且跟踪哪些分片已经活动，使得在集群重新启动之后，只有包含最近数据的分片副本可以成为主要。

## 索引分片存储命令

通过使用分配ID而不是版本号来标识主分片分配的分片副本，以前的版本控制方案已过时。这反映在[索引分片存储命令API](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/indices-shards-stores.html)中。

新的allocation_id字段替换了Indices Shard Stores命令的结果中的前版本字段。此字段可用于使用当前版本的Elasticsearch创建的所有分片副本，或者在运行当前版本的Elasticsearch的集群中处于活动状态的所有分片副本。对于在当前版本的Elasticsearch中尚未激活的旧版分片副本，可使用legacy_version字段（等同于前一版本字段）。

## 重新路由命令

重新路由命令allocate已分为两个不同的命令allocate_replica和allocate_empty_primary。这是因为我们引入了一个新的allocate_stale_primary命令。新的allocate_replica命令对应于旧的allocate命令，并且allow_primary设置为false。新的allocate_empty_primary命令对应于allow_primary设置为true的旧的allocate命令。

## 自定义Reroute命令

Elasticsearch不再支持注册自定义分配命令的插件。它是未使用的，希望不需要。

## index.shared_filesystem.recover_on_any_node 改变

index.shared_filesystem.recover_on_any_node：true的行为已更改。以前，在没有找到分片副本的情况下，通过潜在地忽略分配决定器来选择任意节点。现在，我们考虑平衡，但是如果分配决策者不满意，则不分配碎片。

在可以找到分片副本的情况下，行为也已更改。以前，如果没有保存分片副本的节点都满足分配决策者，则选择不保持分片副本的节点。现在，分片将被分配给具有分片副本的节点，即使没有保存分片副本的节点满足分配决定符。