Elasticsearch 集群配置

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

此节点当前正在运行 logstash 实例,LS_HEAP_SIZE= 3000m

数据节点 #2:16GB RAM,ES_HEAP_SIZE = 8000m,单核 i7

我目前将 ES 配置为每个索引默认 5 个分片 + 1 个重复。

目前,每个节点都配置为将数据写入外部硬盘并将日志写入另一个硬盘。

在我的测试运行中,我使用 Logstash 平均每秒处理 10K 个事件。我的主要目标是优化这些文件加载​​到 ES 的速度。根据我所读到的内容,我认为应该更接近 80K。

我尝试过改变工人数量和刷新大小,但似乎无法超越这个阈值。我想我可能忽略了一些基本的东西。

我的问题有两个:

1)我的集群配置中是否存在什么可疑之处,或者是否有一些可以改进该过程的建议?

2)如果我在每个数据节点上运行一个 logstash 实例来索引单独的文件,这会有帮助吗?

非常感谢您提前提供的所有帮助以及花时间阅读。

—津加

答案1

我的集群配置是否存在什么可疑之处,或者有什么建议可以改进这个过程?

我认为在主节点上运行 Logstash,这样它可以更好地利用其拥有的资源(RAM),而数据节点则主要负责在 ES 中进行索引。

您可能首先会受到 CPU 限制,但根据数据节点上磁盘的速度和类型,我可能错了。您提到您write data to an external HD。如果它是通过 USB 连接的,它可能无法处理索引所有文档所需的高 IO 速率。

如果我在每个数据节点上运行一个 Logstash 实例并索引单独的文件,这会有帮助吗?

我不这么认为。你没有在 Logstash 中做很多工作(没有摸索,只有基本的变异),所以你最终会受到数据节点速度的限制,要求它们做比它们已经做的更多的事情很可能不会有帮助。

至于其他指针,也许可以尝试将分片数量减少到 3 个,并且不设置任何副本,因为这样可以稍微加快速度。索引完成后,您可以随时重新配置索引以设置副本。

最后,您应该在索引时观察系统的资源监视器,以了解哪些资源的负担最重(CPU、RAM、磁盘、网络?),努力解决瓶颈并重复,直到您对索引性能满意为止。

相关内容