Elasticsearch节点未参与索引

时间:2015-08-25 13:45:18

标签: elasticsearch

背景

使用我们的Elasticsearch节点,我注意到索引文档时每个I / O吞吐量的CPU使用率非常高(查询似乎没问题)。我能够通过垂直扩展(向服务器添加更多CPU)来增加吞吐量,但我想看看通过水平扩展(将节点数从2增加到4)可以获得什么样的增加。

问题

我预计扩展的群集大小会增加吞吐量,但性能实际上有点差。我还注意到有一半节点报告的I / O和CPU使用率非常低。

研究

我看到主要的分片分配很糟糕,所以我使用重新路由API对其中的一些进行了混乱。除了改变使用哪两个节点之外,这并没有任何影响。

_search_shards API表示所有节点和分片都应该参与。

问题

我不确定为什么只有两个节点参与索引。文档编入索引后,有没有办法查看它所在的碎片?我有什么明显的遗失吗?

设置

  • 服务器:2个CPU,10个JVM,18G RAM,500G SSD
  • 索引:8个分片,1个副本
  • 路由键:_id
  • 文件总数:4.1M
  • 索引文件数:50k
  • 平均文件大小:14.6K
  • 最大凭证尺寸:32.4M

统计

OS Metrics

JVM Metrics

I/O Metrics

碎片

files-v2           4 r STARTED  664644   8.4gb 10.240.219.136 es-qa-03
files-v2           4 p STARTED  664644   8.4gb 10.240.211.15  es-qa-01
files-v2           7 r STARTED  854807  10.5gb 10.240.53.190  es-qa-04
files-v2           7 p STARTED  854807  10.2gb 10.240.147.89  es-qa-02
files-v2           0 r STARTED  147515 711.4mb 10.240.53.190  es-qa-04
files-v2           0 p STARTED  147515 711.4mb 10.240.211.15  es-qa-01
files-v2           3 r STARTED  347552   1.2gb 10.240.53.190  es-qa-04
files-v2           3 p STARTED  347552   1.2gb 10.240.147.89  es-qa-02
files-v2           1 p STARTED  649461   3.5gb 10.240.219.136 es-qa-03
files-v2           1 r STARTED  649461   3.5gb 10.240.147.89  es-qa-02
files-v2           5 r STARTED  488581   3.6gb 10.240.219.136 es-qa-03
files-v2           5 p STARTED  488581   3.6gb 10.240.211.15  es-qa-01
files-v2           6 r STARTED  186067 916.8mb 10.240.147.89  es-qa-02
files-v2           6 p STARTED  186067 916.8mb 10.240.211.15  es-qa-01
files-v2           2 r STARTED  765970   7.8gb 10.240.53.190  es-qa-04
files-v2           2 p STARTED  765970   7.8gb 10.240.219.136 es-qa-03

2 个答案:

答案 0 :(得分:0)

  1. 确保所有节点上的JVM + Elastic配置相同。
  2. 出于测试目的 - 尝试使所有节点保存所有数据(在您的情况下将副本数设置为3)。
  3. 关于文档分片关系: https://www.elastic.co/guide/en/elasticsearch/guide/current/routing-value.html

答案 1 :(得分:0)

好的,所以我想我找到了。我正在使用Spring Data的Elasticsearch存储库。在他们的save(doc)方法中,有一个刷新的调用:

public <S extends T> S save(S entity) {
    Assert.notNull(entity, "Cannot save 'null' entity.");
    elasticsearchOperations.index(createIndexQuery(entity));
    elasticsearchOperations.refresh(entityInformation.getIndexName(), true);
    return entity;
}

我通过在没有Spring抽象的情况下调用API来绕过这一点,并且所有节点的CPU使用率都要好得多。我还不太清楚为什么刷新会对2个节点(而不是1个或所有节点)产生影响,但问题似乎已得到解决。