Elasticsearch基礎優化

分片策略

分片和副本得設計為ES提供支付分布式和故障轉移得特性,但不意味著分片和副本是可以無限分配,
而且索引得分片完成分配后由于索引得路由機制,不能重新修改分片數(副本數可以動態修改)

  • 一個分片得底層為一個lucene索引,會消耗一定文件句柄、內存以及CPU運轉,當分片數越多資源消耗就會更多
  • 每個搜索請求都需要命中索引中得每個分片,如果分片處于不同節點還好,但如果處于相同節點上競爭使用相同資源就導致性能降低
  • 控制每個分片占用磁盤容量不超過ES得最大JVM堆空間設置(一般不超過32G),因此如果索引得總容量在500G左右,那么分片大小在16個左右即可
  • 考慮node數量,一般一個節點有時就是一臺物理機,如果分片數量過多,大大超過節點數,可能會導致一個節點上存在多個分片,一旦該節點故障,即使保持1個以上得副本,同樣有可能會導致數據丟失,一般設置分片數不超過節點數得3倍
  • 主分片,副本和節點最大數之間數量 節點數<=主分片數*(副本數+1)

推遲分片分配

對于節點瞬時中斷得問題,默認情況,集群會等待一分鐘來查看節點是否重新加入,如果節點再次期間重新加入,重新加入得節點會保持其現有分片得數據,不會觸發新的分片分配,這樣就可以減少ES在自動在平衡可用分片所帶來的極大開銷
通過修改參數delayed_timeout,延長在均衡時間,可全局設置也可以在索引級別修改

PUT /_all/_settings
{"settings" : {"index.unassigned.node_left.delayed_timeout" : "5m"}
}

路由選擇

當我們查詢文檔時,ES是如何知道一個文檔應該存放在那個分片中,路由計算

#shard=hash(routing) % number_of_primary_shards

routing默認值是文檔 id,也可以采用自定義值,比如用戶id

  • 不帶routing查詢
    請求到達協調節點上,協調節點查詢分發到所有分片上,協調節點搜集每個分片得查詢結果,再將查詢結果排序聚合,返回結果
  • 帶routing查詢
    查詢可直接根據routing信息定位到某個分片查詢,不需要查詢所有分片,經過協調節點排序,比如自定義用戶查詢,如果routing設置為userid,就可以直接查詢出數據,效率提升

寫入速度

ES默認配置,綜合數據可靠性、寫入速度、搜索實時等因素,實際使用我們需要根據項目要求,進行偏向性優化。
針對搜索性能不高,但是寫入有要求場景,需要盡可能得選擇恰當寫優化策略

  • 加大Translog Flush,降低磁盤 Iops、Writeblock
  • 增加Index Refresh 刷新間隔,減少Segment Merge次數(間隔短意味頻繁將內存數據放入文件系統緩存中,文件系統緩存相應寫入磁盤中,當磁盤文件數據多就會合并隨之影響性能)
  • 調整Bulk線程池和隊列(批量處理)
  • 優化節點間得任務分布
  • 優化Lucene層索引建立,降低CPU和IO

優化存儲

ES是一種密集使用磁盤得應用,在段合并時候會頻繁操作磁盤,所以對磁盤要求較高,當磁盤速度提升,集群整體性能大幅提高(固態硬盤)

減少Refresh次數

#Lucene是一個開源的全文索引與信息檢索(IR)庫,采用Java實現

Lucene在新增數據時,采用延遲寫入策略,默認情況下索引得refresh_interval為1秒
Lucene將代寫入得數據先寫到內存中,超過默認1秒會觸發一次refresh,然后refresh會把內存得數據刷新到操作系統得文件緩存系統中。

  • 如果對搜索得實效性不高,可以將refresh周期延長調整30秒等
  • 有效減少刷次次數,意味著需要消耗更多得Heap內存

加大Flush設置

#Translog是Elasticsearch的事務日志文件,它記錄了所有對索引分片的事務操作(add/update/delete),每個分片對應一個Translog文件。
#Translog是用來恢復數據的。在Elasticsearch中,寫入的索引并沒有實時落盤到索引文件,而是先雙寫到內存和Translog文件。如果掉電,Elasticsearch重啟后還可以把數據從日志文件中讀回來。在flush的時候,Translog文件會被清空

Flush主要目的是把文件緩存系統中得段持久化到磁盤,當Translog得數據量達到512MB或者30分鐘,會觸發一次Flush

減少副本數量

ES為了保證集群得可用性,提供了Replicas支持,然后每個副本也會執行分析,索引及可能合并得過程,所以Replicas得數量嚴重影響寫索引得效率。
當寫索引時,需要把寫入數據都同步到副本節點,副本節點越多,寫索引得效率就越慢,如果有大批量進行寫入操作,可以先禁止Replca副本復制,設置index.number_of_replicas:0關閉副本,再寫入完成后,Replca修改回正常狀態,提升效率

內存設置

ES在默認安裝后設置得內存是1GB,對于任何一個業務來說,這個設置都太小了。config目錄文件包含一個jvm.option文件,添加如下命令設置ES堆大小,Xms表示堆初始大小,Xmx表示可分配得最大內存。
一般來說這兩數值配置保持相同,目的為了能夠在java垃圾回收機制清理完堆分區后不需要重新分割計算堆區得大小而浪費資源,可以減輕伸縮堆大小帶來得壓力。

  • 不要超過物理內存得50%,Lucene設計目的是把底層得OS里得數據緩存到內存中。
    Lucene得段分別儲存到單個文件中的,這些文件都是不會變化得,所以很利于緩存,同時操作系統也會吧這些文件緩存起來,以便更快得訪問
    如果我們設置堆內存過大,Lucene可用得內存將減少,會影響降低Lucene得全文本查詢性能
  • 堆內存大小最好不超過32GB,在java中,所有的對象都分配在堆上,然后有一個Klass pointer指針向它得類元數據
    假設有個機器有128GB內存,你可以創建2個節點,每節點內存分配不超過32GB,也就是不超過64GB內存給ES堆內存,剩下超過64GB得內存給Lucene

重要配置

參數參數值說明
cluster.nameES配置ES集群名稱,默認值是ES,ES會自動發現在同一網段下集群名稱相同得節點
node.namenode1集群中節點名,在同一集群中不能重復,節點名稱一單設置不能在改變
node.mastertrue指定該節點是否有資格被選舉為Master節點,默認為True,具體能否成為Master節點,需要通過選舉產生
node.datatrue執行該節點是否存儲索引數據,默認為True,數據的增、刪、改、查都是在Data節點完成
index.number_of_shards1設置索引分片個數,默認是1。可以在創建索引時設置該值,具體設置多少根據數據量大小來定,如果數據量不大,保持默認1時效率最高
index.number_of_replicas1設置默認索引副本個數,默認為1,副本越多,集群可用性越好,但是寫索引時需要同步得數據隨之越多
transport.tcp.compressfalse設置在節點間傳輸時是否壓縮,默認為False,不壓縮
discovery.zen.minimum_master_nodes1設置在選舉Master節點時需要參與最少候選主節點數,默認1,如果使用默認值,則當網絡不穩定時有可能出現腦裂。合理數值為(master_eligible_nodes/2)+1,其中master_eligible_nodes表示集群中候選主節點數
descovery.zen.ping.timeout3s設置在集群中自動發現其他節點時ping連接超時時間,默認為3秒,在較差得網絡環境需要設置大一點,防止因誤判該節點存活狀態而導致分片轉移

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167268.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python之pyqt專欄2-項目文件解析

項目結構 在上一篇文章python之pyqt專欄1-環境搭建&#xff0c;創建新的pyqt項目&#xff0c;下面我們來看一下這個項目下的文件。 從下面的文件結構圖可以看到&#xff0c;該項目下有3個文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

Feign接口請求返回異常 no suitable HttpMessageConvert found for response type

問題場景&#xff1a; 后端調用feign接口請求, 接口返回異常, no suitable HttpMessageConvert found for response type 問題描述 報錯異常如下&#xff1a; //根據圖片特征 去查詢人員信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…

華為云之SFS彈性文件服務使用體驗

華為云之SFS彈性文件服務使用體驗 一、本次實踐介紹1.1 實踐環境簡介1.2 本次實踐目的 二、SFS彈性文件服務介紹2.1 SFS彈性文件服務簡介2.2 SFS彈性文件服務特點 三、購買ECS彈性云服務器3.1 購買ECS彈性云服務器3.2 查看ECS彈性云服務器狀態3.3 遠程連接ECS3.4 檢查操作系統版…

package.json 中的版本號,符號 ~ 與 ^ 的區別及其他符號的含義

"element-ui": "^2.15.1", 版本號&#xff1a; 2.15.1 對應 x.y.z z &#xff1a;表示一些小的bugfix, 更改z的號&#xff1b;(修復補丁-z)&#xff08;~符號&#xff09; y &#xff1a;表示一些大的版本更改&#xff0c;比如一些API的變化&#xff1b;(…

迭代器模式 (Iterator Pattern)

定義 迭代器模式&#xff08;Iterator Pattern&#xff09;是一種行為型設計模式&#xff0c;用于順序訪問集合對象的元素&#xff0c;而無需知道集合對象的底層表示。迭代器模式將遍歷集合的責任從集合對象轉移到迭代器對象上&#xff0c;這簡化了集合接口和實現&#xff0c;…

計算機應用基礎_錯題集_基礎知識---網絡教育統考工作筆記006

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、基礎知識部分錯題集總結前言 計算機應用基礎統考,錯題集總結 一、基礎知識部分 基礎知識部分 2、微處理器芯片的位數即指______。 A.速度 B.字長 C.

Unity Android FireBase bugly報錯查詢

報錯如下圖&#xff0c;注意&#xff0c;標紅的三處 使用的il2cpp和架構是arm64-v8a 那我們就可以根據這些去找對應的符號表&#xff0c;在unity安裝目錄下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

Tomcat注冊為服務后,如何配置Tomcat內存大小

前提條件&#xff1a;tomcat已經注冊為服務。 1.winR,輸入regedit打開注冊表 2.找到Tomcat注冊表路徑&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat80603.找到jvm內存配置路徑&#xff1a; HKEY_LOCAL_MACHINE\SOFTW…

PTA-6-312 使用多態實現圖書館計算罰金功能

題目&#xff1a; 圖書館提供給讀者借閱服務&#xff0c;包括借閱書籍及音像制品。如果借閱超時需要繳納罰金。對于不同類型的書籍和音像制品罰款規則不同。 成人書籍:允許借閱的時間是21天&#xff0c;每超時1天&#xff0c;需要繳納罰金2元;如果超時3天以上&#xff0c;超出的…

vue中 mixin用法

在Vue.js中&#xff0c;mixin是一種可以在多個組件之間共享Vue組件選項的靈活方式。mixin對象可以包含任何組件選項。當組件使用mixin時&#xff0c;所有mixin對象的選項將被“混合”到該組件的選項中。 使用mixin的一個主要優點是可以在多個組件之間重用和共享代碼。這可以幫…

SSM大學生社團信息管理系統-99953,(免費領取源碼)計算機畢業設計選題開題+程序定制+論文書寫+答辯ppt書寫 包售后 全流程

SSM大學生社團信息管理系統APP 摘 要 隨著科學技術的飛速發展&#xff0c;社會的方方面面、各行各業都在努力與現代的先進技術接軌&#xff0c;通過科技手段來提高自身的優勢&#xff0c;高校當然也不能排除在外。大學生社團信息管理系統APP是以實際運用為開發背景&#xff0c…

CMake中常見的預定義變量

文章目錄 CMake常見的預定義變量CMake variables官方文檔 CMake常見的預定義變量 在 CMake 中&#xff0c;有一些常見的預定義變量&#xff0c;它們提供了有關項目、目錄結構和構建環境的信息。這些變量可用于設置路徑、傳遞參數、以及進行其他與構建過程相關的操作。 以下是…

Rust語言入門教程(五) - 流控制語句

if 表達式 在Rust中&#xff0c; if語句的判斷條件不需要用( )括起來&#xff0c; 它會認為所有在if 和 {之間的表達式就是判斷條件&#xff0c;例如&#xff1a; if num 5 {msg "five"; }判斷條件的表達式必須返回一個bool型的值&#xff0c; 因為Rust是一個不喜…

[C/C++]數據結構 循環隊列

前言: 隊列是一種具有先進先出特性的結構,但是當數據出隊列以后,前面的空間就無法再次利用了,循環隊列就可以解決這個問題 一:概念及結構: 1.循環隊列概念 循環隊列是一種線性數據結構&#xff0c;其操作表現基于 FIFO&#xff08;先進先出&#xff09;原則并且隊尾被連接在隊…

顛覆與創新:算法備案的雙重挑戰

隨著數字時代的迅猛發展&#xff0c;算法已經成為了企業創新和競爭的關鍵因素。然而&#xff0c;伴隨著算法的廣泛應用&#xff0c;數據隱私、法規合規等問題也愈發凸顯&#xff0c;給企業帶來了雙重挑戰。本文將深入探討這一話題&#xff0c;探討算法備案如何在顛覆與創新之間…

IDEA、PHPSTORM 在命令行中進行 PHP debug

然在終端執行控制器的方法php yii test/ab 即可看到觸發debug 調試

視頻剪輯技巧:多個視頻合并新篇章,高效視頻剪輯,創造無限可能

在數字媒體時代&#xff0c;視頻剪輯已經成為一項重要的技能。多個視頻合并是一種將多個視頻片段合并成一個完整視頻的技巧。這種技巧可以將不同的視頻片段組合在一起&#xff0c;制作出獨特且具有吸引力的視頻內容。現在一起操作下云炫AI智剪如何批量合并視頻的操作吧。 一、準…

友思特分享 | Neuro-T:零代碼自動深度學習訓練平臺

來源&#xff1a;友思特 智能感知 友思特分享 | Neuro-T&#xff1a;零代碼自動深度學習訓練平臺 歡迎關注虹科&#xff0c;為您提供最新資訊&#xff01; 工業自動化、智能化浪潮涌進&#xff0c;視覺技術在其中扮演了至關重要的角色。在汽車、制造業、醫藥、芯片、食品等行業…

針對CSP-J/S的每日一練:Day 11

一、審題 題目描述 給定兩個大小分別為 m m m 和 n n n 的正序&#xff08;從小到大&#xff09;數組 n u m s 1 nums1 nums1 和 n u m s 2 nums2 nums2。請你找出并返回這兩個正序數組的中位數。 算法的時間復雜度應該為 O ( l o g ( m n ) ) O(log (mn)) O(log(mn)) 。…

初學vue3與ts:路由跳轉帶參數

index-router <!-- 路由跳轉 --> <template><div><div class"title-sub flex"><div>1、用router-link跳轉帶參數id1&#xff1a;</div><router-link to"./link?id1"><button>點我跳轉</button>&…