【elasticsearch】elasticsearch 集群滚动重启

588 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、前言:

为了保障ES 集群的可用性,我们在重启ES 服务时,都会选用滚动重启的方式,这样服务可以不间断,这里介绍下ES 集群滚动重启的步骤。

二、具体实施:

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

es 在2.x后面的版本,就没有通过api 停止服务的接口了,停止服务只能用kill 了。

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.

参考:

  • https://lvjianzhao.gitee.io/lvjianzhao/2020/05/27/es%E5%85%A8%E9%9B%86%E7%BE%A4%E9%87%8D%E5%90%AF%E5%92%8C%E6%BB%9A%E5%8A%A8%E9%87%8D%E5%90%AF/