# 群集级别分片分配

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.4/shards-allocation.html#shards-allocation](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/shards-allocation.html#shards-allocation)

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

贡献者 : [小瑶](/display/~chenyao)，[geekidentity](/display/~houfachao)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

碎片分配是指将分片分配给节点的过程。这可能在初始恢复，副本分配，重新平衡或添加删除节点时发生。

## Shard Allocation Settings ( 碎片分配设置 )

以下动态设置可用于控制分片分配和恢复：

**cluster.routing.allocation.enable**

为特定类型的分片启用或禁用分配：

*   **`all`** - 默认值，允许为各种分片分配分片。
*   **`primaries`**- 仅允许分片分配给主分片。
*   **`new_primaries`**- 允许分片仅用于新索引的主分片。
*   **`none`**- 任何索引都不允许任何类型的分片分配。

重新启动节点时，此设置不会影响本地主分片的恢复。具有未分配主分片副本的重新启动的节点将立即恢复该主节点，假设其分配标识符与集群状态中的一个活动分配标识匹配。

**cluster.routing.allocation.node_concurrent_incoming_recoveries**

允许在节点上发生多少并发 **incoming shard recoveries** （传入的碎片恢复）。收到的恢复是在节点上分配目标碎片的恢复（很可能是副本，除非分片正在重新定位）。默认是 **2** 。

**cluster.routing.allocation.node_concurrent_outgoing_recoveries**

 允许在节点上发生多少并发 **outgoing shard recoveries **（出站分片恢复）。发送恢复是源节点分配的恢复（很可能是主要的，除非分片正在重新定位）在节点上分配。默认是 **2** 。

**cluster.routing.allocation.node_concurrent_recoveries**

 设置 **cluster.routing.allocation.node_concurrent_incoming_recoveries** 和 **cluster.routing.allocation.node_concurrent_outgoing_recoveries** 的快捷方式。

**cluster.routing.allocation.node_initial_primaries_recoveries**

 虽然在网络上发生副本的恢复，但重新启动节点后未分配的主节点的恢复使用本地磁盘中的数据。这些应该是快速的，所以更多的初始初步恢复可以在同一个节点上并行发生。默认是 **4** 。

**cluster.routing.allocation.same_shard.host**

 允许执行检查以防止在单个主机上根据主机名和主机地址分配同一分片的多个实例。默认为 false ，这意味着默认情况下不执行检查。此设置仅适用于在同一台机器上启动多个节点的情况。

## Shard Rebalancing Setting ( 碎片重新平衡设置 )

可以使用以下动态设置来控制整个集群中碎片的重新平衡：

**cluster.routing.rebalance.enable**

启用或禁用特定类型分片的重新平衡：

*   **all** - ( 默认 ) 允许对全部类型的分片进行分片平衡。
*   **primaries** - 只允许分片平衡用于 **primary shards** ( 主分片 )。
*   **replicas** - 只允许分片平衡用于 **replica shards** ( 副本分片 )。
*   **none** - 任何索引都不允许任何类型的分片平衡。

**cluster.routing.allocation.allow_rebalance**

 指定何时允许分片重新平衡：

*   **always** - 一直允许重新平衡。
*   **indices_primaries_active** - 只有当集群中的所有的 **primaries** 被分配。
*   **indices_all_active** - ( 默认 )只有当集群中的所有分片 ( **primaries and replicas** ) 被分配。

**cluster.routing.allocation.cluster_concurrent_rebalance**

 允许控制多个并发分片重新平衡所允许的集群范围。默认为 **2** 。请注意，此设置仅控制由于集群中的不平衡而导致的并发碎片重新定位的数量。此设置不会因 **allocation filtering **( 分配过滤 ) 或 **forced awareness** ( 强制识别 ) 而限制碎片重定位。

## Shard Balancing Heuristics ( 碎片平衡启发式 )

以下设置一起用于确定放置每个分片的位置。当没有允许的动作可以使每个节点的权重更靠近在一起的平衡阈值时，集群是 **balance.threshold**。

**cluster.routing.allocation.balance.shard**

定义分配在节点 ( **float** ) 上的分片的权重因子。默认为 **0.45f** 。提高这种趋势使得集群中所有节点之间的分片数量相等。

**cluster.routing.allocation.balance.index**

将分配给特定节点 ( **float** )  的每个索引的分片数量定义为一个因子。默认为 **0.55f** 。提高这种趋势使得集群中所有节点上每个索引的碎片数量相等。

**cluster.routing.allocation.balance.threshold**

应执行的操作的最小优化值 ( 非负浮点 ) 。默认为 **1.0f** 。提高这一点将导致集群对优化分片余额的积极性较低。

注意

无论平衡算法的结果如何，由于强制的意识或分配过滤，可能不允许重新平衡。