Elasticsearch 占用了太多磁盘空间

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压缩首次出现的时候),但我仍然无法判断它是否产生了影响,而且无论如何,现在压缩应该默认处于开启状态……

答案1

Elasticsearch 不会自动缩小数据。对于任何数据库来说都是如此。除了存储原始数据外,每个数据库还必须存储元数据。普通数据库只存储数据库管理员预先选择的列的索引(以便更快地搜索)。ElasticSearch 不同,因为它会索引每一个默认情况下,索引是 1000 列。这使得索引非常大,但另一方面在检索数据时却提供了完美的性能。

在正常配置下,索引后原始数据会增加 4 到 6 倍。尽管这在很大程度上取决于实际数据。但这实际上是预期的行为。

因此,为了减小数据库大小,您必须像在 RDBM 中所做的那样反过来做:排除不需要索引的列或存储这些列。

此外,您可以打开压缩功能,但这仅当您的“文档”很大时才会改善,而对于日志文件条目来说可能并非如此。

这里有一些比较和有用的提示:https://github.com/jordansissel/experiments/tree/master/elasticsearch/disk

但请记住:搜索是有成本的。需要付出的成本是磁盘空间。但您可以获得灵活性。如果您的存储大小超出,则可以水平扩展!这就是 ElasticSearch 的优势所在。

相关内容