elasticsearch 集群节点重启
date:modify by lyc at 2017-12-21
1.elasticsearch 节点重启经历的过程
节点离开
在elasticsearch集群中,假设NodeA因为种种原因退出集群,在NodeA上的Shard分片情况(ShardA是主分片,ShardB是某一分片副本):
- 在存活节点上找到ShardA的副本,将该副本升格为主分片
- 由于ShardB这一分片副本丢失,所以会重新创建相应的分片副本
- 在存活的节点中对于分片进行再平衡,这样做的目的是保证每个分片都有足够的副本,可以避免数据丢失。需要注意的是,步骤二和步骤三牵涉到大量的网络I/O操作
节点返回
如果离开的节点重新加入集群,elasticsearch为了对数据分片(shard)进行再平衡,会为重新加入的NodeA再次分配数据分片(Shard), 这会再次导致大量的网络I/O操作。
2.ElasticSearch 集群节点重启
集群节点重启步骤
- 重启集群的一个集群节点重启前要先临时禁用自动分配,防止集群认为节点宕机开始分片转移产生大量IO
- 注释 elasticSearch 入口nginx反向代理上该节点,防止写操作轮询到该节点
- 操作重启的机器,(加减配置或其他),重启ElasticSearch 加入到集群
- 重新打开自动分配分配,等待所有分片恢复正常(all green)
- elasticSearch 入口nginx反向代理恢复该节点的轮询。
方式一:api 禁用自动分配分片
禁用自动分配分片
1 | $ curl -XPUT http://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{ |
开启自动分配分片
1 | $ curl -XPUT http://localhost:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{ |
方式二: Cerebro 禁用自动分片分配
Cerebro 可视化上操作,更简单。