elasticsearch Elasticsearch 1.5.2部署问题
我有以下规格的ES 1.5.2群集:elasticsearch Elasticsearch 1.5.2部署问题,elasticsearch,kibana,elasticsearch,Kibana,我有以下规格的ES 1.5.2群集: 3个节点,RAM:32GB,每个CPU核8个 282总指数 2564总碎片数 799505935总文档数 767.84GB总数据量 ES_堆大小=16g 问题是,当我使用Kibana查询某些东西(非常简单的查询)时,如果它只是一个查询,那么它工作得很好,但是如果我继续查询一些更灵活的东西,那么弹性会变得非常慢,最终会被卡住,因为JVM堆使用率(来自Marvel)将达到87-95%。当我尝试加载一些Kibana仪表板时也会发生这种情况,这种情况的唯一解决方
- 3个节点,RAM:32GB,每个CPU核8个
- 282总指数
- 2564总碎片数
- 799505935总文档数
- 767.84GB总数据量
- ES_堆大小=16g
- 3个节点,RAM:32GB,每个CPU核8个
- 282总指数=227空+31惊奇漫画+1基巴纳+23数据
- 2564个碎片总数=(1135个空碎片+31个惊奇漫画+1个kibana+115个数据)*1个副本
- 799505935总文档数
- 767.84GB总数据量
- ES_堆大小=16g
total os.cpu.usage primaries.indexing.index_total total.fielddata.memory_size_in_bytes jvm.mem.heap_used_percent jvm.gc.collectors.young.collection_time_in_millis primaries.docs.count device.imei fs.total.available_in_bytes os.load_average.1m index.raw @timestamp node.ip_port.raw fs.total.disk_io_op node.name jvm.mem.heap_used_in_bytes jvm.gc.collectors.old.collection_time_in_millis total.merges.total_size_in_bytes jvm.gc.collectors.young.collection_count jvm.gc.collectors.old.collection_count total.search.query_total
2.1gb 1.2mb 3.5mb 3.4mb 1.1mb 0b 3.5mb 2.1gb 1.9mb 1.8mb 3.6mb 3.6mb 1.7mb 1.9mb 1.7mb 1.6mb 1.5mb 3.5mb 1.5mb 1.5mb 3.2mb
1.9gb 1.2mb 3.4mb 3.3mb 1.1mb 1.5mb 3.5mb 1.9gb 1.9mb 1.8mb 3.5mb 3.6mb 1.7mb 1.9mb 1.7mb 1.5mb 1.5mb 3.4mb 0b 1.5mb 3.2mb
2gb 0b 0b 0b 0b 0b 0b 2gb 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b
2.2.0:
total index_stats.index node.id node_stats.node_id buildNum endTime location.timestamp userActivity.time startTime time shard.state shard.node indoorOutdoor.time shard.index dataThroughput.downloadSpeed
176.2mb 0b 0b 0b 232b 213.5kb 518.8kb 479.7kb 45.5mb 80.1mb 1.4kb 920b 348.7kb 2.5kb 49.1mb
如果您的堆在查询时很快受到影响,这意味着您在查询中做了一些非常繁重的事情,例如聚合。正如val和Andrei所建议的,问题可能在于字段数据没有边界。我建议在适当的地方检查您的映射、使用和属性,以降低查询成本。
- 删除空索引
- 对于1.5集群,堆的主要用途是用于fielddata—每个节点约9.5GB,过滤器缓存约1.2GB,段文件元数据约1.7GB
- 即使您的模板中有该代码片段,使
字符串成为
未分析的
,在1.5中,这并不自动意味着ES将使用
,您也需要这样做文档值
- 如果现在在1.5.x集群中启用
,则更改将在新索引中生效。对于旧索引,您需要重新索引数据。或者,如果你有基于时间的索引(每天、每周等),你只需要等待新的索引被创建,旧的索引被删除doc\u值
- 在
将在1.5集群的索引中占据主导地位之前,@Val在评论中建议的是唯一的选项:或向集群添加更多节点(隐含更多内存),或增加节点上的RAM。或;-)不时地doc_值
- 即使您的模板中有该代码片段,使
- 与内存问题无关,但尽量避免使用ttl。如果您不再需要一些数据,只需删除索引,不要依赖于
,这比简单地删除索引要昂贵得多。使用ttl
creates可能会在搜索时引起问题,并影响集群的整体性能,因为它会从索引中删除文档,这意味着需要大量更新和合并这些索引。由于您可能有基于时间的索引(这意味着昨天的数据实际上没有变化),因此使用ttl会对本来应该是静态的(并且可能是静态的)数据进行不必要的操作ttl
GET/_nodes/stats
,并在gist中的某个地方提供输出。提供指向该输出的链接。在ES 2.x.@Rada中也要这样做,如果fielddata的使用确实是问题所在(而且可能是问题所在),一个解决方案是在elasticsearch.yml
配置文件中添加以下设置:index.fielddata.cache:node
和index.fielddata.cache.size:30%
。30%对我来说是一个负载相似的1.5 ES群集,但您的里程数可能会有所不同。将会发生的是,堆不会被fielddata耗尽,fielddata永远不会超过堆的30%。当然,您将得到大量的逐出(因此查询速度较慢),但至少您不需要如此频繁地重新启动。您还可以添加更多节点以共享负载。请删除空索引。堆的主要用途是用于fielddata—每个节点约9.5GB,过滤器缓存约1.2GB,段文件元数据约1.7GB。奇怪的是,对于2.x来说,仍然有那么多的字段数据。ES 2.x在可能的情况下默认使用doc\u值。唯一不可能的字段类型是分析字符串。另外,我几乎可以肯定你提供的要点不是来自2.2.0集群,它一定是1.5集群。不,主要问题是1.5.2集群中的fielddata使用情况。我看到了您提供的模板中的代码片段,但是该模板是否正确地应用于索引,这意味着您是否真的将string
字段设置为not_analysis
?此外,仅使字符串不在1.5.2中进行分析是不够的,您还需要启用doc\u值
:直到doc\u值
在1.5集群的索引中占主导地位,@Val建议的是唯一选项:限制fielddata缓存大小或向集群添加更多节点。或手动清除fielddata缓存;-)我在默认映射中不时使用not_analyze:“default”:{“dynamic_templates”:[{“template_1”:{“mapping”:{“index”:“not_analyze”,“type”:“string”},