date:modify by lyc at 2017-12-21

1.elasticsearch 节点重启经历的过程

elasticsearch之节点重启

节点离开

在elasticsearch集群中,假设NodeA因为种种原因退出集群,在NodeA上的Shard分片情况(ShardA是主分片,ShardB是某一分片副本):

  1. 在存活节点上找到ShardA的副本,将该副本升格为主分片
  2. 由于ShardB这一分片副本丢失,所以会重新创建相应的分片副本
  3. 在存活的节点中对于分片进行再平衡,这样做的目的是保证每个分片都有足够的副本,可以避免数据丢失。需要注意的是,步骤二和步骤三牵涉到大量的网络I/O操作

节点返回

如果离开的节点重新加入集群,elasticsearch为了对数据分片(shard)进行再平衡,会为重新加入的NodeA再次分配数据分片(Shard), 这会再次导致大量的网络I/O操作。

2.ElasticSearch 集群节点重启

集群临时重启

集群节点重启步骤

  1. 重启集群的一个集群节点重启前要先临时禁用自动分配,防止集群认为节点宕机开始分片转移产生大量IO
  2. 注释 elasticSearch 入口nginx反向代理上该节点,防止写操作轮询到该节点
  3. 操作重启的机器,(加减配置或其他),重启ElasticSearch 加入到集群
  4. 重新打开自动分配分配,等待所有分片恢复正常(all green)
  5. elasticSearch 入口nginx反向代理恢复该节点的轮询。

方式一:api 禁用自动分配分片

禁用自动分配分片

1
2
3
4
5
$ curl -XPUT http://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}'

开启自动分配分片

1
2
3
4
5
$ curl -XPUT http://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}'

方式二: Cerebro 禁用自动分片分配

Cerebro 可视化上操作,更简单。