当前位置:   article > 正文

ElasticSearch节点重启_es master shard挂了

es master shard挂了

注: 部分概念介绍来源于网络

一、elasticsearch 节点重启问题
ElasticSearch集群的高可用和自平衡方案会在节点挂掉(重启)后自动在别的结点上复制该结点的分片,这将导致了大量的IO和网络开销。
如果离开的节点重新加入集群,elasticsearch为了对数据分片(shard)进行再平衡,会为重新加入的节点再次分配数据分片(Shard), 当一台es因为压力过大而挂掉以后,其他的es服务会备份本应那台es保存的数据,造成更大压力,于是整个集群会发生雪崩。
生产环境下建议关闭自动平衡。

1、数据分片与自平衡
(1)关闭自动分片,即使新建index也无法分配数据分片
PUT /_cluster/settings {
  "transient" : {
    "cluster.routing.allocation.enable" : "none"
  }
}
(2)关闭自动平衡,只在增减ES节点时不自动平衡数据分片
PUT /_cluster/settings?pretty {
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}
(3)禁止集群写入,启动时候,禁写
PUT /_cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": true
  },
  "transient": {
    "cluster.blocks.read_only": true
  }
(4)设置完以后查看设置是否添加成功:
GET /_cluster/settings?pretty

2、shutdown你要升级的节点
POST /_cluster/nodes/_local/_shutdown

3、先打开写入,再打开自动均衡
PUT /_cluster/settings
{
  "persistent": {
    "cluster.blocks.read_only": false
  }
}
PUT /_cluster/settings
{
  "transient": {
    "cluster.blocks.read_only": false
  }
}

4、重新启用自动分片
PUT /_cluster/settings {
  "transient" : {
    "cluster.routing.allocation.enable" : "all"
  }
}

5、延迟副本的重新分配,未分配节点重新分配延迟到5分钟之后
PUT /_all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}

6、打开集群自动均衡
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.rebalance.enable": "ALL"
  },
  "transient": {
    "cluster.routing.rebalance.enable": "ALL"
  }
}

7、下面是修改 elasticsearch.yml 文件
gateway.recover_after_nodes: 8
这将防止Elasticsearch立即开始数据恢复,直到集群中至少有八个(数据节点或主节点)节点存在。
gateway.expected_nodes: 10 
gateway.recover_after_time: 5m
集群开始数据恢复等到5分钟后或者10个节点加入,以先到者为准。

二、脑裂问题
对某一个实例进行重启后,很有可能会导致该实例无法找到master而将自己推举为master的情况出现,为防止这种情况,需要调整 elasticsearch.yml 中的内容
discovery.zen.minimum_master_nodes: 2
这个配置就是告诉Elasticsearch除非有足够可用的master候选节点,否则就不选举master,只有有足够可用的master候选节点才进行选举。
该设置应该始终被配置为有主节点资格的点数/2 + 1,例如:
有10个符合规则的节点数,则配置为6.
有3个则配置为2.

三、关于设置的有效性
persistent 重启后设置也会存在
transient 整个集群重启后会消失的设置
PUT /_cluster/settings
{
    "persistent" : {
        "discovery.zen.minimum_master_nodes" : 2
    }
}
一般设置下面两个就可以了
# 通过配置大多数节点(节点总数/ 2 + 1)来防止脑裂
discovery.zen.minimum_master_nodes: 2

# 在一个完整的集群重新启动到N个节点开始之前,阻止初始恢复
gateway.recover_after_nodes: 3

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/508030
推荐阅读
相关标签
  

闽ICP备14008679号