一、前言:
在某些情况下,可能需要执行全集群重新启动或滚动重新启动。在完全集群重新启动的情况下,是关闭并重新启动集群中的所有节点,而在滚动重新启动的情况下,一次只关闭一个节点,因此服务保持不中断。
二、具体实施:
1. 禁用分片
为了保证集群的可用性,开启只允许主分片进行重分配到别的节点,否则在重启节点期间索引时无法使用的,这样也不符合我们的初衷。
- 只允许主分片分配,目的是为了保证索引的可用性。
- 对于副本分片则不分配,目的是为了加快节点重启后集群的恢复速度。
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
2. 执行同步刷新
POST _flush/synced
注:在7.x版本以上的版本,建议使用POST _flush/即可。
3. 停止机器学习(可选)
POST _ml/set_upgrade_mode?enabled=true
如果执行滚动重新启动,可以在关闭机器学习节点时让机器学习作业继续运行,该节点的作业将自动移动到另一个节点并恢复模型状态。,但会增加集群的负载。
4. 关闭单个节点
此时,就可在终端上关闭单个节点了。
ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9
5. 修改配置并重启节点
配置修改后,即可启动节点了,并执行下面的指令来检查节点状态。
GET _cat/nodes
6. 再次开启分片分配
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
7. 重新启动机器学习(可选)
如果你之前停止了机器学习,那么此时可以启动它了。
POST _ml/set_upgrade_mode?enabled=false
8. 在重新启动滚动时重复上述操
当节点恢复并且集群稳定时,为需要更改的每个节点重复上面这些步骤。
三、注意:
当重启master 节点时:write(default) 写入操作将被拒绝。 根据最后一个已知的集群配置,读取操作将成功。 这可能会导致部分读取过时数据,因为此节点可能与集群的其余部分隔离。
write(default) Write operations will be rejected. Read operations will succeed, based on the last known cluster configuration. This may result in partial reads of stale data as this node may be isolated from the rest of the cluster.