Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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