集群級分片分配和路由設置
-
集群級分片分配設置
通過以下設置來控制分片分配和恢復。分片通過網絡進行,恢復包括:傳出恢復
和傳入恢復
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 秒。