一尘不染

弹性重启节点后快速恢复

elasticsearch

考虑一下elasticsearch.yml中的以下设置

gateway.recover_after_data_nodes: 3
gateway.recover_after_time: 5m
gateway.expected_data_nodes: 3

当前设置:说,我有3个数据节点。现在,如果我决定重新启动数据节点(由于设置上的微小更改),则根据期望的data_nodes设置,恢复将在节点重新启动后立即开始。将有许多未分配的分片,这些分片将根据包含的数据缓慢分配。

为了避免这种情况,有没有办法将所有未分配的分片分配到特定节点?(在我的情况下是重新启动的节点),一旦完成,ES应该接管重新平衡。

我主要是想避免群集状态从黄色到绿色的沉重时间间隔(在我的情况下,它处于小时范围内)

我可以为此目的使用群集重新路由API吗?

还是有其他API一次将所有未分配的分片转移到特定节点?


阅读 213

收藏
2020-06-22

共1个答案

一尘不染

对于 > = 1.0.0的Elasticsearch版本:

curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "none"}}'
/etc/init.d/elasticsearch restart
curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "all"}}'

对于早期版本的ES:

curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.disable_allocation": true}}'
/etc/init.d/elasticsearch restart
curl -XPUT localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.disable_allocation": false}}'

分片保持未分配状态,直到“
cluster.routing.allocation.disable_allocation”:false,然后在刚刚重启的服务器上恢复分片(以关闭前的大小开始)。这非常快。

参考:http :
//elasticsearch-users.115913.n3.nabble.com/quick-recovery-after-node-restart-
in-elasticsearch-td4033876.html#a4034211

2020-06-22