当前位置: 首页 > 面试题库 >

如何加快Elasticsearch恢复?

劳韬
2023-03-14
问题内容

我正在研究6B小文档的ES群集,这些文档以6.5K索引进行组织,总共6TB。索引在7台服务器之间复制和分片。索引占用量从几KB到几百GB不等。

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

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

现在, 使用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_thread_count: 1请参阅此处)
  • 在恢复索引设置之前进行更新::"refresh_interval" : "-1",之后将其恢复为默认值(请参阅doc)

如果您还不在乎搜索,则ES5群集上的以下内容也可能会有所帮助:

PUT /_cluster/settings
{
    "transient" : {
        "indices.store.throttle.type" : "none" 
    }
}

以下几篇文章可能会有所帮助:

  • https://www.elastic.co/guide/zh-CN/elasticsearch/reference/5.x/tune-for-indexing-speed.html
  • https://www.elastic.co/guide/zh-CN/elasticsearch/reference/5.x/tune-for-disk-usage.html

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



 类似资料:
  • 我正在为一个Cassandra数据库构建一个备份和恢复过程,以便在我需要的时候做好准备,这样我就可以理解细节,以便构建适合生产的东西。我在这里遵循Datastax的说明: http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_backup_restore_c.html。 首先,我将数据库放置在一个d

  • 我在AWS EC2上运行3个节点集群,我的一个节点崩溃了,重新启动后,我看到2900个未分配的碎片和集群状态为红色。 我将索引配置为有5个碎片和1个副本--我不明白为什么重新启动后碎片不能从副本中恢复。 我尝试使用elasticsearch重新路由API https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-

  • 问题内容: 我正在开发游戏,我想创建一个暂停菜单。这是我的代码: 但 仍在运行… 我想在玩家单击暂停菜单时暂停计时器,并在玩家返回游戏时继续运行计时器,但是我如何暂停?请帮帮我。 问题答案: 您需要使其无效并重新创建。然后,如果您使用相同的按钮暂停和恢复计时器,则可以使用bool来跟踪状态:

  • 我试着用docker compose在Centos 8上运行ELK: 这是我的 但我面临着这个错误: {“类型”:“日志”,“时间戳”:“2020-03-03T22:53:19Z”,“标签”:[“警告”,“弹性搜索”,“管理],“pid”:1,“消息”:“无法恢复连接:http://elasticsearch:9200/"} 当我检查时: > elasticsearch运行良好。 工作正常。 ki

  • 问题内容: 有没有一种方法可以将条件附加到值数组中? 例如,如果我的文档如下所示: 我想在其后面附加“ item4”和“ item5”。 我必须在2个查询中这样做吗?一个加载当前值列表,然后更新该列表?还是有一种更优雅的方式让我在一个查询中附加这些项目? 我正在尝试使用Elastic4s做到这一点: 为了使用上面的代码片段,我需要启用groovy脚本,而且我不确定如何对多个项目执行此操作。 任何想

  • 问题内容: 我有一个大约2亿个文档的ElasticSearch索引,总索引大小为90Gb。 我更改了映射,所以我希望ElasticSearch重新索引所有文档。 我编写了一个脚本,该脚本创建一个新索引(具有新映射),然后遍历旧索引中的所有文档,然后将其放入新索引中。 它似乎可以工作,但是问题是它的运行速度非常慢。它从两天前以300个文档/分钟开始,现在的速度是150个文档/分钟。 该脚本在elas