我有一个由两个节点组成的Elasticsearch集群。 (实时)网站直接使用此群集,在我的ES群集上持续运行搜索和索引查询。
我的问题是,在常规(且不可预测)的基础上,当其中一个节点清空垃圾收集器时,整个群集将变得不可用。我从节点日志获得的消息看起来像
[2015-07-01 06:43:19,525][INFO ][monitor.jvm] [my_node] [gc][old][205450][116]
duration [5.7s], collections [1]/[6.3s], total [5.7s]/[1m],
memory [22.3gb]->[4.9gb]/[30.9gb],
all_pools {[young] [392.9mb]->[17.2mb]/[665.6mb]}
{[survivor] [29.1mb]->[0b]/[83.1mb]}
{[old] [21.9gb]->[4.9gb]/[30.1gb]}
根据我的理解(我不是一个java人),这一行表明ES正在清空它的垃圾收集器。所以,在5.7秒内,节点没有响应,我的群集也没有响应,我的网站也不是。这种停机时间每天发生5到10次。
我在这里做错了还是这个停机时间不可避免?我应该将Elasticsearch负载均衡器(即data = false,master = false的节点)添加到群集并让我的网站指向此负载均衡器吗?或者我应该在节点前添加另一种负载均衡器(HAProxy?)?或者这是否意味着服务器,数据有问题?
提前多多感谢
有关群集配置的一些信息
答案 0 :(得分:-1)
由于当GC运行堆从21.9gb变为4.9gb时,我怀疑堆使用率在50%到75%之间,很可能GC在75%时触发,然后下降到~15%。 如果您没有安装Marvel - 安装它并监视段数,例如段数和堆使用情况。要降低段数,请对写入很少或没有写入的索引运行Optimize(https://www.elastic.co/guide/en/elasticsearch/reference/2.1/indices-optimize.html)。 如果GC运行时继续减速,请尝试降低堆大小。我知道这听起来适得其反,但在这种情况下它是有道理的。 Elastic网站上的主题有一个很好的写作 - https://www.elastic.co/blog/a-heap-of-trouble