Elasticsearch 集群配置
全新的 Elasticsearch。我一直在做大量的閱讀,但我希望 SO 專家能夠權衡我的集群配置,看看是否有我遺漏的東西。
目前我正在使用 ES (1.7.3) 為每個文件索引一些非常大的文本文件(約 7 億行),並為每個文件尋找一個索引。我使用 logstash (V2.1) 作為索引文件的首選方法。我的第一個索引的配置文件在這裡:
input { file { path => "L:/news/data/*.csv" start_position => "beginning" sincedb_path => "C:/logstash-2.1.0/since_db_news.txt" } } filter { csv { separator => "|" columns => ["NewsText", "Place", "Subject", "Time"] } mutate { strip => ["NewsText"] lowercase => ["NewsText"] } } output { elasticsearch { action => "index" hosts => ["xxx.xxx.x.xxx", "xxx.xxx.x.xxx"] index => "news" workers => 2 flush_size => 5000 } stdout {} }
我的集群包含 3 個在 Windows 10 上執行的盒子,每個盒子都執行一個節點。ES 沒有作為服務安裝,我只支持一個主節點:
主節點:8GB RAM,ES_HEAP_SIZE = 3500m,單核 i7
數據節點 #1:8GB RAM,ES_HEAP_SIZE = 3500m,單核 i7
此節點目前正在執行 LS_HEAP_SIZE= 3000m 的 logstash 實例
數據節點 #2:16GB RAM,ES_HEAP_SIZE = 8000m,單核 i7
我目前將 ES 配置為預設 5 個分片 + 每個索引 1 個副本。
目前,每個節點都配置為將數據寫入外部 HD 並記錄到另一個。
在我的測試執行中,我使用 Logstash 平均每秒處理 10K 事件。我的主要目標是優化這些文件載入到 ES 中的速度。根據我所閱讀的內容,我認為我應該接近 80K。
我已經嘗試過改變工人的數量和沖洗大小,但似乎無法超越這個門檻值。我想我可能遺漏了一些基本的東西。
我的問題有兩個:
- 我的集群配置是否有任何可疑之處或一些可以改進流程的建議?
2)如果我在每個數據節點上執行一個logstash實例來索引單獨的文件,會有幫助嗎?
非常感謝您提前提供的所有幫助以及花時間閱讀。
-津加
是否有任何關於我的集群配置的可疑之處或一些可以改進該過程的建議?
我會說在主節點上執行 Logstash,以便它可以更好地利用它擁有的資源(RAM),並將數據節點留給它們在 ES 中索引的主要工作。
您可能首先會受到 CPU 的限制,但根據您在數據節點上的速度和磁碟類型,我可能會出錯。你提到你
write data to an external HD
。如果它通過 USB 連接,它可能無法處理索引所有文件所需的高 IO 速率。如果我在每個數據節點上執行一個 Logstash 實例並索引單獨的文件,會有幫助嗎?
我不會這麼認為。你沒有在 Logstash 中做很多工作(沒有摸索,只有基本的變異),所以你最終會受到數據節點速度的限制,並要求他們做的比他們已經做的更多不會幫忙的。
至於其他指針,也許嘗試將分片數量減少到 3 個並且沒有任何副本,因為這應該會加快速度。索引完成後,您始終可以重新配置索引以具有副本。
最後,您應該在索引時查看系統的資源監視器,以了解哪些資源被佔用最多(CPU、RAM、磁碟、網路?),努力解決瓶頸並重複直到您對索引感到滿意表現。