ES 节点重启问题

October 17, 2018

ES 节点离线并重启之后,发现本级上的分片已经再开始在平衡了,就会把本级上的所有分片删除,从新从其他集群上拉取,这样就会出现大量的数据迁移。占用超级多的网络资源。

之前已经讲过破解和安装x-pack的教程。本文涉及到的是安装成功之后重启服务的问题。ES集群在其中任何一个节点离线之后都会进行数据再平衡,就是把现有的数据进行重新分片,以达到高可用的目的。但是这样也会有很多问题,比如是因为网络抖动引起节点之间通信阻断,本来马上就能好的,可是就出现大量的数据迁移。

生产环境下建议关闭自动平衡。因为集群中集群的节点数是定的,所以分片也是固定的,如果是添加了新节点,就需要打开自动平衡功能,先把分片平衡了再关闭这个功能。

停机维护时操作步骤

1、关闭分片分配

# 此操作会停止所有的分片动作,以及分片的数据移动。
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

2、执行同步刷新

POST _flush/synced

3、关闭自动平衡(重要)

# 这一项很重要,如果配置了关闭分片分配,没有关闭自平衡,也会在打开分片分配之后出现集群自平衡
PUT /_cluster/settings?pretty
{
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}
# 设置以后需要手动验证一下
curl http://{host}:9200/_cluster/settings?pretty

4、延迟副本分片的分配

PUT /_all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

上面的步骤都做完了,集群自平衡关闭了,分片功能关闭了,就可以停机维护服务

5、重启之后

# 打开分片分配,就会把分片上数据不一致的进行同步,不会出现再平衡
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}

参考文档


LRF 记录学习、生活的点滴