Elasticsearch использует слишком много дискового пространства

У меня есть сервер CentOS 6.5, на котором я установил Elasticsearch 1.3.2.

мой elasticsearch.yml Конфигурационный файл является минимальной модификацией файла поставки, в котором по умолчанию устанавливается asticsearch. После удаления всех закомментированных строк это выглядит так:

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 в мой файл конфигурации, как я обнаружил, что в elasticsearch 0.19.5 заметки о выпуске (вот когда store сначала вышло сжатие), но я пока не могу определить, имеет ли это значение, и в любом случае сжатие должно быть включено по умолчанию, в настоящее время...

1 ответ

Решение

Elasticsearch не сжимает ваши данные автоматически. Это верно для любой базы данных. Помимо хранения необработанных данных, каждая база данных должна хранить метаданные вместе с ней. Обычные базы данных хранят только индекс (для более быстрого поиска) для столбцов, которые db-admin выбрал заранее. ElasticSearch отличается тем, что индексирует каждый столбец по умолчанию. Таким образом, индекс становится чрезвычайно большим, но, с другой стороны, обеспечивает отличную производительность при получении данных.

В обычных конфигурациях вы видите увеличение в 4-6 раз необработанных данных после индексации. Хотя это сильно зависит от реальных данных. Но это на самом деле намеренное поведение.

Таким образом, чтобы уменьшить размер базы данных, вы должны пойти другим путем, как в RDBM: исключить столбцы из индексации или хранения, которые вам не нужно индексировать.

Кроме того, вы можете включить сжатие, но это улучшится только тогда, когда ваши "документы" будут большими, что, вероятно, неверно для записей в файле журнала.

Здесь есть несколько сравнений и полезных советов: https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

Но помните: поиск обходится дорого. Стоимость, которую нужно заплатить, это место на диске. Но вы получаете гибкость. Если ваш объем хранилища превышает, то растите горизонтально! Вот где ElasticSearch побеждает.

Другие вопросы по тегам