文章目录
全集群重启和滚动重启
可能存在您想要执行全集群重启或滚动重启的情况。在全集群重启的情况下,您关闭并重启集群中的所有节点,而在滚动重启的情况下,您一次只关闭一个节点,因此服务不会中断。
全集群重启
-
关闭分片分配
当您关闭一个数据节点时,分配进程会等待
index.unassigned.node_left.delayed_timeout
(默认为1分钟),然后开始将该节点上的分片复制到集群中的其他节点,这可能涉及大量的I/O。由于节点将很快重启,所以这个I/O是不必要的。您可以通过在关闭数据节点之前禁用副本分配( disabling allocation):curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
-
停止索引并执行同步刷新
执行同步刷新可加速分片恢复。
-
关闭所有节点
-
如果您使用 systemd 运行 Elasticsearch:
sudo systemctl stop elasticsearch.service
-
如果您使用 SysV init 运行 Elasticsearch:
sudo -i service elasticsearch stop
-
如果您将 Elasticsearch 作为守护进程运行:
kill $(cat pid)
-
-
执行任何需要的更改
-
重启节点
如果您有专用的主节点,请先启动它们并等待它们形成集群并选择一个主节点,然后再继续处理您的数据节点。您可以通过查看日志来检查进度。
一旦有足够多的符合主节点条件的节点相互发现,它们就会形成一个集群并选举一个主节点。此时,您可以使用
cat health
和cat nodes API
来监视加入集群的节点:curl -X GET "localhost:9200/_cat/health?pretty" curl -X GET "localhost:9200/_cat/nodes?pretty"
_cat/health
返回的状态列显示集群中每个节点的健康状况:红色、黄色或绿色。 -
等待所有节点加入集群并报告黄色状态
当一个节点加入集群时,它开始恢复本地存储的任何主分片。
_cat/health API
最初报告的状态是红色,这表明并没有分配所有的主分片。一旦节点恢复其本地分片,集群状态将切换为黄色,表示已恢复所有主分片,但未分配所有副本分片。这是意料之中的,因为您尚未重新启用分配,知道所有节点都为黄色,才会执行延迟副本的分配,这允许主节点将副本分配给已经具有本地分片副本的节点。
-
重新启用分配
当所有节点都加入集群并恢复其主分片后,通过将
cluster.routing.allocation.enable
恢复为默认值来重新启用分配:curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": null } } '
重新启用分配后,集群开始将副本分片分配给数据节点。此时恢复索引和搜索是安全的,但如果您可以等到所有主分片和副本分片成功分配并且所有节点的状态为绿色,您的集群将恢复得更快。
您可以使用
_cat/health
和_cat/recovery API
监控进度:curl -X GET "localhost:9200/_cat/health?pretty" curl -X GET "localhost:9200/_cat/recovery?pretty"
滚动重启
-
关闭分片分配
当您关闭一个数据节点时,分配进程会等待
index.unassigned.node_left.delayed_timeout
(默认为1分钟),然后开始将该节点上的分片复制到集群中的其他节点,这可能涉及大量的I/O。由于节点将很快重启,所以这个I/O是不必要的。您可以通过在关闭数据节点之前禁用副本分配( disabling allocation):curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
-
停止索引并执行同步刷新
执行同步刷新可加速分片恢复。
-
关闭单个节点
-
如果您使用 systemd 运行 Elasticsearch:
sudo systemctl stop elasticsearch.service
-
如果您使用 SysV init 运行 Elasticsearch:
sudo -i service elasticsearch stop
-
如果您将 Elasticsearch 作为守护进程运行:
kill $(cat pid)
-
-
执行任何需要的更改
-
重启改变的节点
启动节点并通过检查日志文件或提交
_cat/nodes
请求来确认它加入集群:curl -X GET "localhost:9200/_cat/nodes?pretty"
-
重新启用分片分配
对于数据节点,一旦节点加入集群,删除
cluster.routing.allocation.enable
设置以启用分片分配并开始使用节点:curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'{ "persistent": { "cluster.routing.allocation.enable": null }}'
-
在滚动重启的情况下重复
当节点恢复并且集群稳定后,对每个需要更改的节点重复这些步骤。