自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Elasticsearch 使用誤區(qū)—分片設(shè)置不合理

開(kāi)發(fā) 前端
在 Elasticsearch 中,有效地管理分片對(duì)于維護(hù)最佳性能至關(guān)重要。通過(guò)仔細(xì)規(guī)劃我們的分片策略并定期監(jiān)控分片性能和資源使用情況,可以確保 Elasticsearch 集群保持穩(wěn)定、可擴(kuò)展和快速。

Elasticsearch 是一個(gè)強(qiáng)大的搜索和分析引擎,它通過(guò)將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn)的分片中來(lái)進(jìn)行分布式處理。

本文將探討分片大小和策略的概念,以優(yōu)化 Elasticsearch 的性能并防止過(guò)度分片或分片過(guò)大等問(wèn)題。

先看個(gè)分片設(shè)置不合理的真實(shí)企業(yè)案例:

圖片圖片

10TB 左右集群數(shù)據(jù),只有兩個(gè)節(jié)點(diǎn)集群。單個(gè)最大索引 600GB,7.17.4 版本,200分片(全部)。

集群重啟無(wú)法啟動(dòng),未咨詢之前是:最長(zhǎng)時(shí)間8小時(shí)啟動(dòng)集群,過(guò)年期間,直接無(wú)法啟動(dòng)(已啟動(dòng)了20個(gè)小時(shí)+)。

——https://t.zsxq.com/SzcaQ

1、什么是分片?

在 Elasticsearch 中,每個(gè)索引都被劃分為多個(gè)分片,每個(gè)分片可以在多個(gè)節(jié)點(diǎn)上復(fù)制,以確保數(shù)據(jù)的可用性和冗余。

圖片圖片

上圖是我本地單節(jié)點(diǎn)8.X 集群的 Head 插件截圖,綠色代表已分配分片,灰色代表未分配副本分片(單節(jié)點(diǎn)所以無(wú)法分配副本分片)。

然而,盡管分片允許通過(guò)分散數(shù)據(jù)來(lái)擴(kuò)展,不當(dāng)?shù)姆制赡軐?dǎo)致性能瓶頸或穩(wěn)定性問(wèn)題。

2、為什么分片策略很重要?

有效的分片關(guān)鍵在于找到正確的平衡。

過(guò)多的分片會(huì)導(dǎo)致“過(guò)度分片”,在這種情況下,管理眾多分片的開(kāi)銷超過(guò)了其帶來(lái)的好處,導(dǎo)致查詢處理效率降低,可能還會(huì)引發(fā)集群不穩(wěn)定。

3、創(chuàng)建分片策略

為了防止這些問(wèn)題,至關(guān)重要的是要根據(jù)我們的特定需求開(kāi)發(fā)一個(gè)分片策略,這包括:

  • 了解集群的數(shù)據(jù)和查詢:分析咱們所在集群的數(shù)據(jù)性質(zhì)和將執(zhí)行的查詢。
  • 基準(zhǔn)測(cè)試:在類似生產(chǎn)環(huán)境中測(cè)試不同的分片配置,看看更改如何影響性能。

舉例,如下基準(zhǔn)測(cè)試僅供參考。

分片配置

查詢響應(yīng)時(shí)間 (ms)

CPU 使用率 (%)

內(nèi)存使用率 (%)

搜索吞吐量 (查詢/秒)

穩(wěn)定性評(píng)價(jià)

5 分片

120

70

65

200

10 分片

95

60

70

230

20 分片

85

75

80

250

50 分片

78

85

90

260

非常低

在實(shí)際應(yīng)用中,應(yīng)根據(jù)具體需求和資源條件,選擇最適合的分片配置。

  • 監(jiān)控:使用 Kibana 等工具監(jiān)控不同分片大小和配置對(duì)集群性能和穩(wěn)定性的影響。

不幸的是,沒(méi)有一種萬(wàn)能的分片策略。一種在某個(gè)環(huán)境中有效的策略可能不適用于其他環(huán)境。一個(gè)好的分片策略必須考慮到我們的硬件基礎(chǔ)設(shè)施、業(yè)務(wù)場(chǎng)景和性能預(yù)期。

所以,大廠的意見(jiàn)、建議、經(jīng)驗(yàn)貼不見(jiàn)得適用我們下廠。這很關(guān)鍵!

4、分片大小的關(guān)鍵考慮因素

4.1 搜索線程

每個(gè)分片在單獨(dú)的線程中處理搜索查詢。如果存在太多分片,可能會(huì)超負(fù)荷節(jié)點(diǎn)的搜索線程池,從而減慢查詢處理速度。

GET /_cat/thread_pool?v&h=id,name,active,rejected,completed

圖片圖片

上述命令會(huì)顯示集群中所有節(jié)點(diǎn)的所有線程池的信息,幫助我們識(shí)別哪些線程池可能過(guò)載。

4.2 分片開(kāi)銷

每個(gè)分片無(wú)論大小都會(huì)增加 CPU 和內(nèi)存使用的開(kāi)銷。少量大分片通常比許多小分片使用資源更高效。

注意:在 Elasticsearch 中,可以使用一些命令行操作來(lái)查看分片的資源使用情況,尤其是關(guān)于 CPU 和內(nèi)存的開(kāi)銷。

雖然沒(méi)有直接的命令行工具可以顯示每個(gè)分片的 CPU 使用情況(因?yàn)?CPU 使用通常被監(jiān)控在節(jié)點(diǎn)級(jí)別而非分片級(jí)別),但咱們可以獲取關(guān)于每個(gè)分片內(nèi)存和存儲(chǔ)使用的信息。

圖片圖片

API 名稱

描述

示例請(qǐng)求

_cat/shards

顯示集群中所有分片的信息,包括健康狀況、存儲(chǔ)使用等。

GET /_cat/shards?v

_cat/allocation

顯示集群中每個(gè)節(jié)點(diǎn)的磁盤分配情況,包括已用和可用空間。

GET /_cat/allocation?v

_nodes/stats

提供節(jié)點(diǎn)級(jí)的統(tǒng)計(jì)信息,包括內(nèi)存使用情況、CPU使用情況等。

GET /_nodes/stats/jvm?pretty

_cat/segments

提供索引的段信息,幫助了解分片的內(nèi)部結(jié)構(gòu),包括段在內(nèi)存中的大小等。

GET /_cat/segments/my_index?v

4.3 數(shù)據(jù)段

隨著分片內(nèi)數(shù)據(jù)的增長(zhǎng),數(shù)據(jù)會(huì)被劃分為多個(gè)段。

Elasticsearch 在 JVM 堆內(nèi)存中保留段元數(shù)據(jù),以便可以快速檢索用于搜索。隨著分片的增長(zhǎng),其段被合并成更少的更大的段。這減少了段的數(shù)量,意味著在堆內(nèi)存中保留的元數(shù)據(jù)更少。

這些段會(huì)定期合并,以優(yōu)化查詢性能和資源使用。

5、分片大小的最佳實(shí)踐

5.1 理想的分片大小

官方建議:分片大小在 10GB 到 50GB 之間通常是有效的,這有助于平衡資源使用和恢復(fù)時(shí)間。

5.2 節(jié)點(diǎn)上的分片數(shù)

參考依據(jù)之一:根據(jù)節(jié)點(diǎn)的內(nèi)存容量保持分片數(shù)。例如,具有 30GB 堆內(nèi)存的節(jié)點(diǎn)最多應(yīng)承載 600 個(gè)分片。

參考依據(jù)之二:數(shù)據(jù)節(jié)點(diǎn)個(gè)數(shù),設(shè)置索引分片數(shù)據(jù)建議數(shù)據(jù)節(jié)點(diǎn)的1(或者1.5)-3倍。

5.3 最佳實(shí)踐和工具的使用

節(jié)點(diǎn)的堆內(nèi)存:通過(guò)以下命令檢查每個(gè)節(jié)點(diǎn)的當(dāng)前堆內(nèi)存大小。

GET _cat/nodes?v=true&h=heap.current

圖片圖片

檢查節(jié)點(diǎn)上的分片數(shù):使用以下命令來(lái)查看每個(gè)節(jié)點(diǎn)上的分片數(shù)量。

GET _cat/shards?v=true

圖片圖片

顯式映射:與其讓 Elasticsearch 自動(dòng)創(chuàng)建映射,不如明確地定義它們,以避免不必要的資源使用。

6、使用數(shù)據(jù)流和 ILM

對(duì)于時(shí)間序列數(shù)據(jù),使用數(shù)據(jù)流(data stream)和索引生命周期管理 (ILM) 可以簡(jiǎn)化時(shí)間基礎(chǔ)索引的管理。

ILM 幫助根據(jù)特定標(biāo)準(zhǔn)自動(dòng)管理滾動(dòng)和刪除,確保有效的數(shù)據(jù)存儲(chǔ)和分片管理。

7、實(shí)踐中調(diào)整分片

  • 滾動(dòng)標(biāo)準(zhǔn)

設(shè)置基于分片大小或文檔數(shù)量的滾動(dòng)條件,防止任何單個(gè)分片變得過(guò)大。

圖片圖片

PUT my-index-000001/_settings
{
  "index" : {
    "routing.allocation.total_shards_per_node" : 5
  }
}

避免熱點(diǎn):均勻地在節(jié)點(diǎn)之間分配分片,以防止任何單個(gè)節(jié)點(diǎn)成為性能瓶頸。顯式映射:與其讓 Elasticsearch 自動(dòng)創(chuàng)建映射,不如明確地定義它們,以避免不必要的資源使用。

8、減少分片數(shù)量

如果我們的集群已經(jīng)存在過(guò)度分片問(wèn)題,可以考慮:

(1)合并索引:將小型、相似的索引合并成更大的索引。

圖片圖片

POST _reindex
{
  "source": {
    "index": "my-index-2099.10.*"
  },
  "dest": {
    "index": "my-index-2099.10"
  }
}

刪除不使用的索引:刪除不再需要的索引以釋放資源。

DELETE my-index-000001

沒(méi)到這個(gè)地方,咱們都多強(qiáng)調(diào)一句——?jiǎng)h除索引,而不是文檔!

刪除的文檔不會(huì)立即從 Elasticsearch 的文件系統(tǒng)中移除。相反,Elasticsearch 會(huì)在每個(gè)相關(guān)分片上標(biāo)記該文檔為已刪除。標(biāo)記的文檔將繼續(xù)使用資源,直到在定期的段合并期間被移除。

(2)壓縮索引:減少不再寫(xiě)入數(shù)據(jù)的舊索引中的分片數(shù)量。

9、處理分片相關(guān)錯(cuò)誤

注意節(jié)點(diǎn)最大分片數(shù)設(shè)置。如果某個(gè)操作超過(guò)了這個(gè)限制,可能需要臨時(shí)調(diào)整該設(shè)置或考慮更永久的解決方案,

如增加節(jié)點(diǎn)或合并分片。

必知必會(huì)兩個(gè)核心參數(shù):

- cluster.max_shards_per_node

- index.routing.allocation.total_shards_per_node

9.1 cluster.max_shards_per_node

這是一個(gè)集群級(jí)別的設(shè)置,用來(lái)限制每個(gè)節(jié)點(diǎn)可以持有的最大分片數(shù)。默認(rèn)值:1000。

其目的是防止單個(gè)節(jié)點(diǎn)由于持有過(guò)多分片而過(guò)載,這可能會(huì)導(dǎo)致性能下降和穩(wěn)定性問(wèn)題。

https://www.elastic.co/guide/en/elasticsearch/reference/8.14/misc-cluster-settings.html

  • 使用場(chǎng)景

防止節(jié)點(diǎn)過(guò)載——在大規(guī)模部署中,防止任何單個(gè)節(jié)點(diǎn)因分片數(shù)量過(guò)多而成為性能瓶頸。

集群擴(kuò)展——在節(jié)點(diǎn)添加到集群或從集群中移除時(shí),該設(shè)置幫助平衡分片分布,保持集群的健康和性能。

  • 注意事項(xiàng)

(1)如果 cluster.max_shards_per_node 設(shè)置得太低,可能會(huì)妨礙Elasticsearch正常的分片分配,特別是在集群擴(kuò)展或收縮時(shí)。

(2)可以動(dòng)態(tài)更新這個(gè)設(shè)置,以適應(yīng)集群的變化,如節(jié)點(diǎn)增加或減少。

圖片圖片

PUT _cluster/settings
{
  "persistent" : {
    "cluster.max_shards_per_node": 1200
  }
}

9.2. index.routing.allocation.total_shards_per_node

這是一個(gè)索引級(jí)別的設(shè)置,用于限制特定索引的分片可以分配到每個(gè)節(jié)點(diǎn)的最大數(shù)目。這個(gè)設(shè)置允許對(duì)單個(gè)索引的分片分布進(jìn)行更細(xì)致的控制。

  • 使用場(chǎng)景

分片均衡——確保一個(gè)高流量的索引不會(huì)在少數(shù)節(jié)點(diǎn)上聚集過(guò)多分片,從而避免這些節(jié)點(diǎn)成為熱點(diǎn)。特定索引的性能優(yōu)化:針對(duì)訪問(wèn)模式和查詢負(fù)載對(duì)特定索引進(jìn)行優(yōu)化。

圖片圖片

  • 注意事項(xiàng)

在索引的生命周期中,我們可能需要根據(jù)使用模式和節(jié)點(diǎn)的變化調(diào)整這個(gè)設(shè)置。

使用這個(gè)設(shè)置可以增加配置的復(fù)雜性,需要詳細(xì)監(jiān)控和調(diào)整以確保最佳性能。

雖然這兩個(gè)設(shè)置都涉及分片分配,但 cluster.max_shards_per_node 提供了一個(gè)全局的安全網(wǎng),防止任何節(jié)點(diǎn)因分片過(guò)多而過(guò)載。

而 index.routing.allocation.total_shards_per_node 允許對(duì)單個(gè)索引進(jìn)行更細(xì)粒度的控制。在實(shí)踐中,這兩個(gè)設(shè)置可以同時(shí)使用,以確保節(jié)點(diǎn)不會(huì)因全局或局部的分片分布不均而影響整體的Elasticsearch集群性能。

總的來(lái)說(shuō),適當(dāng)配置這兩個(gè)參數(shù)能夠有效地管理和優(yōu)化 Elasticsearch 集群的分片分布,從而提高查詢性能和系統(tǒng)穩(wěn)定性。在實(shí)際操作中,應(yīng)根據(jù)集群的具體業(yè)務(wù)場(chǎng)景需求和表現(xiàn)來(lái)調(diào)整這些設(shè)置,以達(dá)到最佳的運(yùn)行效果。

10、結(jié)論

在 Elasticsearch 中,有效地管理分片對(duì)于維護(hù)最佳性能至關(guān)重要。通過(guò)仔細(xì)規(guī)劃我們的分片策略并定期監(jiān)控分片性能和資源使用情況,可以確保 Elasticsearch 集群保持穩(wěn)定、可擴(kuò)展和快速。

記住,最好的分片方法是能夠適應(yīng)我們的數(shù)據(jù)和查詢需求的不斷變化的方法。

開(kāi)篇問(wèn)題也得以解決,截圖如下。

圖片圖片

https://www.elastic.co/guide/en/elasticsearch/reference/8.14/size-your-shards.html

責(zé)任編輯:武曉燕 來(lái)源: 銘毅天下Elasticsearch
相關(guān)推薦

2013-01-14 09:29:04

2011-05-10 10:38:54

布線光纖

2011-04-06 12:29:42

2011-08-17 12:25:11

2010-04-28 09:50:14

Oracle數(shù)據(jù)庫(kù)

2011-04-06 16:40:27

C++構(gòu)造函數(shù)

2024-08-02 11:51:03

2012-12-10 09:57:00

路由器交換機(jī)

2020-09-15 09:55:30

類比Python開(kāi)發(fā)

2011-03-22 14:59:36

2024-02-27 18:49:08

人工智能ChatGPT

2017-01-12 14:26:30

2023-10-31 09:29:03

Java配置

2023-12-07 12:26:08

Java開(kāi)發(fā)

2024-06-26 19:14:53

2024-09-09 07:51:33

2019-08-01 11:31:32

2025-04-10 01:11:00

2024-09-26 14:33:15

2024-01-08 08:30:30

接口線程模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)