elasticsearch,lucene,Performance,elasticsearch,Lucene" /> elasticsearch,lucene,Performance,elasticsearch,Lucene" />

Performance 如何加快Elasticsearch恢复?

Performance 如何加快Elasticsearch恢复?,performance,elasticsearch,lucene,Performance,elasticsearch,Lucene,我正在开发一个由6B小文档组成的ES集群,以6.5K索引组织,总共6TB。索引在7台服务器之间进行复制和分片。 索引占用率从几KB到数百GB不等 在使用ES之前,我将Lucene与相同的文档组织一起使用 基于Lucene的应用程序的恢复非常迅速。事实上,当查询到达时,索引是延迟加载的,然后索引阅读器被缓存,以加快将来的回复速度 现在,使用Elasticsearch,恢复非常缓慢(几十分钟)。请注意,通常在崩溃之前,所有索引都会打开,并且大多数索引都会经常接收要编制索引的文档 有没有什么好的模式可

我正在开发一个由6B小文档组成的ES集群,以6.5K索引组织,总共6TB。索引在7台服务器之间进行复制和分片。 索引占用率从几KB到数百GB不等

在使用ES之前,我将Lucene与相同的文档组织一起使用

基于Lucene的应用程序的恢复非常迅速。事实上,当查询到达时,索引是延迟加载的,然后索引阅读器被缓存,以加快将来的回复速度

现在,使用Elasticsearch,恢复非常缓慢(几十分钟)。请注意,通常在崩溃之前,所有索引都会打开,并且大多数索引都会经常接收要编制索引的文档

有没有什么好的模式可以缩短ES恢复时间? 我还对任何与索引管理相关的内容感兴趣,而不仅仅是配置。 例如,我希望更快地恢复最重要的索引,然后加载所有其他索引;通过这样做,我可以减少大多数用户的停机时间

我正在使用以下配置:

#Max number of indices cuncurrently loaded at startup
indices.recovery.concurrent_streams: 80

#Max number of bytes cuncurrently readed at startup for loading the indices
indices.recovery.max_bytes_per_sec: 250mb

#Allow to control specifically the number of initial recoveries of primaries that are allowed per node
cluster.routing.allocation.node_initial_primaries_recoveries: 20

#Max number of indices cuncurrently loaded at startup
cluster.routing.allocation.node_concurrent_recoveries: 80

#the number of streams to open (on a node level) for small files (under 5mb) to recover a shard from a peer shard
indices.recovery.concurrent_small_file_streams: 30
PS:现在我正在使用ES 2.4.1,但几周后我会使用ES 5.2。 PPS:一个场景可能是停电后的恢复


谢谢大家!

编辑要对某些索引的恢复进行优先级排序,可以通过以下方式使用索引的优先级设置:

PUT some_index
{
  "settings": {
    "index.priority": 10
  }
}
优先级最高的索引将首先恢复,否则恢复将按索引的创建时间排序,请参阅

第二次编辑要更改副本的数量,您只需要一个HTTP请求:

PUT  index_name/_settings
{
  "index":{
    "number_of_replicas" : "0"
  }
}

关于快照恢复,我建议以下几点(有些可能不适用于您的情况):

  • 在恢复之前将副本数设置为0,然后将其交换回默认值(更少写入)
  • 如果使用旋转磁盘,可以添加到elasticsearch.yml以提高索引速度:
    index.merge.scheduler.max\u thread\u count:1
    (请参阅)
  • 在恢复之前,使用“
    ”刷新间隔“:“-1”
    更新索引设置,然后将其恢复为默认值(请参阅)
如果您还不关心搜索,ES5群集上的以下内容也会有所帮助:

PUT /_cluster/settings
{
    "transient" : {
        "indices.store.throttle.type" : "none" 
    }
}
以下几篇文章可能会有所帮助:


一些常规提示:确保您已禁用交换。在ES群集中为您的节点分配了多少内存?(您应该使用节点总可用内存的一半,由于JVM的一些内存寻址限制问题,上限为32 GB)。

在我的例子中,还需要
max\u concurrent\u file\u chunks
,因此我将其设置为最大值5


参考资料:

这取决于您所说的是快照恢复,还是更常见的恢复(由于复制设置的更改而导致的单个碎片移动,或者单个节点出现故障)?这可能是停电后的恢复。因此,所有节点一起失败,我无法在失败之前突然控制集群,因为这是一个罕见的随机事件。我编辑了我的帖子,因为Elasticsearch允许您为索引的恢复部分设置一些优先级。否则,与您已经做过的相比,我看不到您的集群上还有什么需要改进的地方(尽管在调整这些参数时我会非常小心,并始终检查您是否观察到更好的总体性能),谢谢!属性“index.priority”正是我想要的!您知道在打开整个集群之前,我是否可以通过编辑每台服务器上的elasticsearch.yml将副本数量设置为0?还是我必须采取不同的行动?PS:是的,交换已禁用,内存已按照您的建议分配。PPS:我正在使用SSD。@LucaMastrostefano我对我的帖子做了第二次编辑,你不需要编辑配置文件,一个简单的HTTP请求就足够了