Elasticsearch 节点重启操作
in Note with 0 comment
Elasticsearch 节点重启操作
in Note with 0 comment

ElasticSearch 集群的高可用和自平衡方案会在节点挂掉(重启)后自动在别的结点上复制该结点的分片,这将导致了大量的 IO 开销。

如果离开的节点重新加入集群,es 为了对数据分片(shard)进行再平衡,会为重新加入的节点再次分配数据分片, 当一台 es 因为压力过大而挂掉以后,其他的es服务会备份本应那台 es 保存的数据,造成更大压力,于是整个集群会发生雪崩。

生产环境下建议关闭自动平衡。

数据分片与自平衡

一:关闭自动分片,即使新建index也无法分配数据分片

curl -XPUT http://192.168.1.1:9200/_cluster/settings -d '{
  "transient" : {
    "cluster.routing.allocation.enable" : "none"
  }
}'

二:关闭自动平衡,只在增减ES节点时不自动平衡数据分片

curl -XPUT http://192.168.1.1:9200/_cluster/settings?pretty -d '{
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}'

设置完以后查看设置是否添加成功:

curl http://192.168.1.1:9200/_cluster/settings?pretty

设置成功的返回如下:

{
  "transient": {
    "cluster": {
      "routing": {
        "rebalance": {
          "enable": "none"
        },
        "allocation": {
          "enable": "none"
        }
      }
    }
  }
}

关于设置的有效性

分片分配均衡恢复

一:重新启用自动分片

curl -XPUT http://192.168.1.1:9200/_cluster/settings -d '{
  "transient" : {
    "cluster.routing.allocation.enable" : "all"
  }
}

二:副本重新分配均衡

curl -XPUT http://192.168.1.1:9200/_cluster/settings?pretty -d '{
  "transient" : {
    "cluster.routing.rebalance.enable" : "all"
  }
}'

或,延迟副本重新分配均衡,未分配节点重新分配延迟到5分钟之后

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

参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html

Responses