Elasticsearch

Elasticsearch 使用了太多的磁碟空間

  • October 10, 2014

我有一個安裝了Elasticsearch 1.3.2的****CentOS 6.5伺服器。

我的elasticsearch.yml配置文件是對預設使用 elasticsearch 的配置文件的最小修改。刪除所有註釋行後,它看起來像:

cluster.name: xxx-kibana

node:
   name: "xxx"
   master: true
   data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path:
   logs: /log/elasticsearch/log
   data: /log/elasticsearch/data


transport.tcp.port: 9300

http.port: 9200

discovery.zen.ping.multicast.enabled: false

Elasticsearch 應該預設啟用壓縮,我閱讀了各種基準,將壓縮率從低至 50% 到高達 95%。不幸的是,在我的情況下壓縮率為-400%,或者換句話說:使用 ES 儲存的數據佔用的磁碟空間是相同內容的文本文件的 4 倍。看:

12K     logstash-2014.10.07/2/translog
16K     logstash-2014.10.07/2/_state
116M    logstash-2014.10.07/2/index
116M    logstash-2014.10.07/2
12K     logstash-2014.10.07/4/translog
16K     logstash-2014.10.07/4/_state
127M    logstash-2014.10.07/4/index
127M    logstash-2014.10.07/4
12K     logstash-2014.10.07/0/translog
16K     logstash-2014.10.07/0/_state
109M    logstash-2014.10.07/0/index
109M    logstash-2014.10.07/0
16K     logstash-2014.10.07/_state
12K     logstash-2014.10.07/1/translog
16K     logstash-2014.10.07/1/_state
153M    logstash-2014.10.07/1/index
153M    logstash-2014.10.07/1
12K     logstash-2014.10.07/3/translog
16K     logstash-2014.10.07/3/_state
119M    logstash-2014.10.07/3/index
119M    logstash-2014.10.07/3
622M    logstash-2014.10.07/  # <-- This is the total!

相對:

6,3M    /var/log/td-agent/legacy_api.20141007_0.log
8,0M    /var/log/td-agent/legacy_api.20141007_10.log
7,6M    /var/log/td-agent/legacy_api.20141007_11.log
6,7M    /var/log/td-agent/legacy_api.20141007_12.log
8,0M    /var/log/td-agent/legacy_api.20141007_13.log
7,6M    /var/log/td-agent/legacy_api.20141007_14.log
7,6M    /var/log/td-agent/legacy_api.20141007_15.log
7,7M    /var/log/td-agent/legacy_api.20141007_16.log
5,6M    /var/log/td-agent/legacy_api.20141007_17.log
7,9M    /var/log/td-agent/legacy_api.20141007_18.log
6,3M    /var/log/td-agent/legacy_api.20141007_19.log
7,8M    /var/log/td-agent/legacy_api.20141007_1.log
7,1M    /var/log/td-agent/legacy_api.20141007_20.log
8,0M    /var/log/td-agent/legacy_api.20141007_21.log
7,2M    /var/log/td-agent/legacy_api.20141007_22.log
3,8M    /var/log/td-agent/legacy_api.20141007_23.log
7,5M    /var/log/td-agent/legacy_api.20141007_2.log
7,3M    /var/log/td-agent/legacy_api.20141007_3.log
8,0M    /var/log/td-agent/legacy_api.20141007_4.log
7,5M    /var/log/td-agent/legacy_api.20141007_5.log
7,5M    /var/log/td-agent/legacy_api.20141007_6.log
7,8M    /var/log/td-agent/legacy_api.20141007_7.log
7,8M    /var/log/td-agent/legacy_api.20141007_8.log
7,2M    /var/log/td-agent/legacy_api.20141007_9.log
173M    total

我究竟做錯了什麼?為什麼數據沒有被壓縮?

我已經臨時添加到我的配置文件中,因為我在發行說明index.store.compress.stored: 1中發現了這一點(那是壓縮首先出現的時候),但我還不能判斷它是否有影響,無論如何壓縮應該是 ON預設,現在…elasticsearch 0.19.5store

Elasticsearch 不會自動收縮您的數據。這適用於任何數據庫。除了儲存原始數據外,每個數據庫還必須儲存元數據。普通數據庫只為 db-admin 預先選擇的列儲存索引(以便更快地搜尋)。ElasticSearch 是不同的,因為它預設索引每一列。從而使索引非常大,但另一方面在檢索數據時提供了完美的性能。

在正常配置中,您會看到索引後原始數據增加了 4 到 6 倍。儘管它在很大程度上取決於實際數據。但這實際上是預期的行為。

因此,要減小數據庫大小,您必須像在 RDBM 中那樣採用相反的方法:將不需要索引的列排除在索引或儲存之外。

此外,您可以打開壓縮,但這只會在您的“文件”很大時有所改善,這對於日誌文件條目可能並非如此。

這裡有一些比較和有用的提示:https ://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

但請記住:搜尋是有代價的。付出的代價是磁碟空間。但是你獲得了靈活性。如果您的儲存大小超過,則水平增長!這就是 ElasticSearch 獲勝的地方。

引用自:https://serverfault.com/questions/635014