我有一個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被禁用,但動態映射啓用
- 合併線程的數量則留在默認情況下,應沒問題,因爲我正在使用固態硬盤
什麼是最好的方式去呢?
謝謝!
多久你索引文件?輸出的ESRejectedExecutionExceptions與批量隊列相關的值通常意味着您正在使用批量請求重載羣集。 – ryanlutgen
你有多少副本?在任何時候可以寫入多少片碎片?你的散貨尺寸是多少?你知道你的平均批量請求有多大?平均每個批量插入需要多長時間?當您查看/ _cat/threadpool?h = bulk *&v時,羣集請求是散佈在羣集周圍還是它們擊敗了幾個選擇節點?你增加了你的索引緩衝區大小嗎?你有沒有看過將異動日誌設置爲異步?你禁用_all?你是否允許動態映射? – evanv
你還使用ssds或紡錘?你有多少個合併線程? – evanv