集群级分片分配和路由设置
-
集群级分片分配设置
通过以下设置来控制分片分配和恢复。分片通过网络进行,恢复包括:传出恢复
和传入恢复
cluster.routing.allocation.enable(动态)
为特定类型的分片启用或禁用分配。all(默认)所有
,primaries 仅主分片
,new_primaries 仅新索引的主分片
,none 不允许分片分配
cluster.routing.allocation.node_concurrent_incoming_recoveries(动态)
允许节点上最大并发的传入分片恢复数。 默认为 2。
cluster.routing.allocation.node_concurrent_outgoing_recoveries(动态)
允许节点上最大并发的传出分片恢复数。 默认为 2。
cluster.routing.allocation.node_concurrent_recoveries(动态)
同时设置cluster.routing.allocation.node_concurrent_incoming_recoveries
和cluster.routing.allocation.node_concurrent_recoveries
的快捷方式, 建议使用这个。
cluster.routing.allocation.node_initial_primaries_recoveries(动态)
允许未分配的主节点初始恢复时最大的并发数, 默认为 4;
cluster.routing.allocation.same_shard.host(动态)
Iftrue
,禁止将一个分片的多个副本分配给同一主机上的不同节点,即具有相同网络地址的节点。默认为false
,这意味着有时可能会将分片的副本分配给同一主机上的节点。 -
分片再平衡设置
当集群在每个节点上具有相同数量的分片时,集群是平衡的,而没有来自任何节点上的任何索引的分片集中。Elasticsearch 运行一个称为重新平衡的自动过程,该过程在集群中的节点之间移动分片以改善其平衡。 可以使用以下设置来控制整个集群的分片重新平衡:cluster.routing.rebalance.enable(动态)
为特定类型的分片启用或禁用重新平衡。all(默认) 所有
,primaries 仅主分片
,replicas 仅副本
,none 都不允许
cluster.routing.allocation.allow_rebalance(动态)
指定何时允许分片重新平衡:always 任何时候
,indices_primaries_active 当主分片都分配完成时
,indices_all_active 当所有分片(主分片和副本)都分配完成时
cluster.routing.allocation.cluster_concurrent_rebalance(动态)
允许控制集群范围内允许多少并发分片重新平衡。默认为2.
基于磁盘的分片分配
基于磁盘的分片分配器确保所有节点都有足够的磁盘空间,而不会执行不必要的分片移动。它根据称为 低水位线
和 高水位线
的一对阈值分配分片。其主要目标是确保没有节点超过高水位线,或者至少任何此类超额只是暂时的。如果一个节点超过了高水位线,那么 Elasticsearch 将通过将它的一些分片移动到集群中的其他节点来解决这个问题。
分配器还尝试通过禁止将更多分片分配给超过低水位线的节点来使节点远离高水位线。重要的是,如果您的所有节点都超过了低水位线,则无法分配新的分片,并且 Elasticsearch 将无法在节点之间移动任何分片以将磁盘使用率保持在高水位线以下。您必须确保您的集群总共有足够的磁盘空间,并且始终有一些节点低于低水位线。
cluster.routing.allocation.disk.threshold_enabled(动态)
默认为true。设置为false禁用磁盘分配决定器。
cluster.routing.allocation.disk.watermark.low(动态)
控制磁盘使用的低水位线。默认为85%,这意味着 Elasticsearch 不会将分片分配给磁盘使用率超过 85% 的节点。此设置对新创建索引的主分片没有影响,但会阻止分配它们的副本。
cluster.routing.allocation.disk.watermark.high(动态)
控制高水印。它默认为90%,这意味着 Elasticsearch 将尝试将分片从磁盘使用率高于 90% 的节点重新定位。此设置影响所有分片的分配,无论之前是否分配。
cluster.routing.allocation.disk.watermark.enable_for_single_data_node(静态)
控制洪水阶段水印,默认为 95%。当磁盘超过阈值时, Elasticsearch会释放掉有index.blocks.read_only_allow_delete
标记的只读索引(副本分片)。PUT /my-index-000001/_settings { "index.blocks.read_only_allow_delete": null }
cluster.routing.allocation.disk.watermark.flood_stage.frozen(动态)
控制专用冻结节点的洪水阶段水印,默认为 95%。
cluster.routing.allocation.disk.watermark.flood_stage.frozen.max_headroom(动态)
控制专用冻结节点的洪水阶段水印的最大净空。cluster.routing.allocation.disk.watermark.flood_stage.frozen
未明确设置时默认为 20GB 。这限制了专用冻结节点上所需的可用空间量。
cluster.info.update.interval(动态)
Elasticsearch 应该多久检查一次集群中每个节点的磁盘使用情况。默认为30s.
集群分片限制
基于集群中节点的数量,集群中的分片数量存在软限制。这是为了防止可能无意中破坏集群稳定性的操作。
如果创建新索引、恢复索引快照或打开关闭的索引等操作会导致集群中的分片数量超过此限制,则该操作将失败并显示指示分片限制的错误。
对于普通(非冻结)索引,集群分片限制默认为每个非冻结数据节点 1,000 个分片,对于冻结索引,每个冻结数据节点 3000 个分片。所有开放索引的主分片和副本分片都计入限制,包括未分配的分片。例如,具有 5 个主分片和 2 个副本的开放索引计为 15 个分片。封闭索引不影响分片计数。
可以使用以下设置动态调整集群分片限制:
-
cluster.max_shards_per_node(动态)
限制集群的主分片和副本分片的总数。Elasticsearch 计算限制如下:cluster.max_shards_per_node * number of non-frozen data nodes
-
cluster.max_shards_per_node.frozen(动态)
限制集群的主和副本冻结分片的总数。Elasticsearch 计算限制如下:cluster.max_shards_per_node * number of frozen data nodes
集群远程复制设置
-
远程恢复设置
以下设置可用于对 远程恢复 期间的数据进行速率限制:ccr.indices.recovery.max_bytes_per_sec(动态)
限制每个节点上的总入站和出站远程恢复流量。默认为40mb. 如果您将此限制设置得太高,那么正在进行的远程恢复可能会消耗过多的带宽(或其他资源),这可能会破坏集群的稳定性。ccr.indices.recovery.max_concurrent_file_chunks(动态)
控制每次恢复可以并行发送的文件块请求的数量。默认为5. 最大允许值为10。 由于会存在多个远程恢复并行运行的可能,因此增加此设置可能仅在单个分片的远程恢复未达到由ccr.indices.recovery.max_bytes_per_sec
配置的总入站和出站远程恢复流量的情况下有所帮助。ccr.indices.recovery.chunk_size(动态)
控制文件传输过程中追随者请求的块大小。默认为 1mb.ccr.indices.recovery.recovery_activity_timeout(动态)
控制恢复活动的超时。此超时主要适用于领导者集群。领导者集群必须在内存中打开资源,以便在恢复过程中向跟随者提供数据。如果leader在这段时间内没有收到follower的recovery请求,就会关闭资源。默认为 60 秒。ccr.indices.recovery.internal_action_timeout(动态)
控制远程恢复过程中单个网络请求的超时。单个操作超时可能会导致恢复失败。默认为 60 秒。