9

考虑 elasticsearch.yml 中的以下设置

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

当前设置:比如说,我有 3 个数据节点。现在,如果我决定重新启动数据节点(由于设置的微小变化),恢复将在节点重新启动后立即开始,按照预期的_data_nodes 设置。将有许多未分配的分片,它们将根据其包含的数据缓慢分配。

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

主要是我想避免集群状态从黄色到绿色的严重时间延迟。(在我的情况下,它在几个小时的范围内)

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

或者是否有任何其他 api 可以一次性将所有未分配的分片转移到特定节点?

4

1 回答 1

29

对于 Elasticsearch 版本 >= 1.0.0:

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

于 2013-05-03T10:01:57.237 回答