我正在研究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:停电后的情况可能是复苏。
谢谢!
答案 0 :(得分:6)
编辑要确定某些索引的恢复优先级,您可以通过以下方式使用索引的优先级设置:
PUT some_index
{
"settings": {
"index.priority": 10
}
}
首先恢复具有最高优先级的索引,否则按索引的创建时间排序恢复,请参阅this
第二次修改要更改副本数量,您只需要一个HTTP请求:
PUT index_name/_settings
{
"index":{
"number_of_replicas" : "0"
}
}
关于快照恢复,我建议以下几点(有些可能不适用于您的情况):
index.merge.scheduler.max_thread_count: 1
(请参阅here)"refresh_interval" : "-1"
恢复索引设置之前进行更新,然后将其恢复为默认值(请参阅the doc)如果您还不关心搜索,ES5群集上的以下内容也可以提供帮助:
PUT /_cluster/settings
{
"transient" : {
"indices.store.throttle.type" : "none"
}
}
以下几篇文章可以提供帮助:
一些一般提示:确保您已交换禁用。为ES群集中的节点分配了多少内存? (您应该使用节点总可用内存的一半,由于jvms的某些内存寻址限制问题,上限为32 GB。)
答案 1 :(得分:0)
在我的情况下,也需要max_concurrent_file_chunks
,因此我将其设置为最大值5
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/recovery.html