2016-11-23 411 views
1

我有一個ES 2.4.1集羣,有3個主節點和18個數據節點,每天收集一個新索引的日誌數據。在一天的指數規模增長到約2TB。超過7天的索引被刪除。對集羣進行的搜索很少,因此主要目標是增加索引吞吐量。Elasticsearch:Lucene合併線程的CPU使用率高

我看到很多下面的例外這正是我接下來要說的另一個症狀:

EsRejectedExecutionException[rejected execution of [email protected] on EsThreadPoolExecutor[bulk, queue capacity = 50, [email protected]9ef44f[Running, pool size = 8, active threads = 8, queued tasks = 50, completed tasks = 68888704]]];]]; 

集羣中的節點總是掛CPU。我將索引刷新間隔增加到了30秒,但這沒有什麼影響。當我檢查熱線程時,我看到每個節點使用100%CPU的多個「Lucene合併線程」。我也注意到,分段數量一直在1000左右,這看起來好像很多。下面是段統計的例子:

"_2zo5": { 
    "generation": 139541, 
    "num_docs": 5206661, 
    "deleted_docs": 123023, 
    "size_in_bytes": 5423948035, 
    "memory_in_bytes": 7393758, 
    "committed": true, 
    "search": true, 
    "version": "5.5.2", 
    "compound": false 
} 

極高的「代」數讓我擔心,我想優化段創建和合並,以減少節點上的CPU負載。關於索引和羣集配置

詳細說明:

  • 每個節點是一個i2.2xl AWS實例與8個CPU內核和1.6T SSD驅動
  • 文檔不斷地被6個客戶線程與散裝大小1000索引
  • 每個索引與1個複製品30個碎片
  • 它需要每批約25秒的1000個文檔
  • /_cat/thread_poolΔH=散裝* & v顯示第在bulk.completed跨節點同樣攤開
  • 索引緩衝區的大小和事務的持久性,在默認情況下是左
  • _all被禁用,但動態映射啓用
  • 合併線程的數量則留在默認情況下,應沒問題,因爲我正在使用固態硬盤

什麼是最好的方式去呢?

謝謝!

+0

多久你索引文件?輸出的ESRejectedExecutionExceptions與批量隊列相關的值通常意味着您正在使用批量請求重載羣集。 – ryanlutgen

+0

你有多少副本?在任何時候可以寫入多少片碎片?你的散貨尺寸是多少?你知道你的平均批量請求有多大?平均每個批量插入需要多長時間?當您查看/ _cat/threadpool?h = bulk *&v時,羣集請求是散佈在羣集周圍還是它們擊敗了幾個選擇節點?你增加了你的索引緩衝區大小嗎?你有沒有看過將異動日誌設置爲異步?你禁用_all?你是否允許動態映射? – evanv

+0

你還使用ssds或紡錘?你有多少個合併線程? – evanv

回答

1

下面是我對集羣進行的優化,以提高索引吞吐量:

  • 增加threadpool.bulk.queue_size 500指數,因爲被要求經常超載的隊列
  • 增加磁盤水印,因爲默認設置對於我們使用的大型固態盤來說過於激進。我設置了「cluster.routing.allocation.disk.watermark.low」:「100gb」和「cluster.routing.allocation.disk.watermark。高「:‘10GB’
  • 刪除未使用的索引,以騰出資源ES用來
  • 增加初級碎片的數量管理他們的碎片,以175保持碎片大小的50GB下的目標,並有每處理器
  • 大約碎片
  • 設置客戶機索引批量大小爲10MB,這似乎很好地工作對我們來說,因爲文件的大小進行索引急劇變化(從知識庫系統到MBS)

希望這有助於他人

0

我已經運行了類似的工作負載,最好的辦法是運行小時指數並對舊指數運行優化以保持細分。