今天es集群服务连续挂了两次,皆因网络因素引起。目前共有三台机器,分别对应三个node角色。
- 9.12 master,data
- 9.11 data
- 9.15 client 作负载均衡用
当网络很差时,master和其他节点一旦断连,会引起master节点reshard(即分片重新分配),我们目前的shards太多,这导致master压力特别大,基本没响应。在分配的过程中,网络一旦变好,其他节点又会重新加入,这样又会重新分配。
网络一直到下午4点左右才完全恢复正常。但是master恢复的太慢。
为了快速恢复,把3台机器全部关闭服务,重新开启。 恢复顺序如下:
- 启动master节点,启动会立即重新分配。
- 在master节点,关闭分配功能。执行 curl -v -XPUT http://localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "none"}}'
- 由于我们的shard(分片)太多,关闭部分无用的index。 curl -XPOST 'http://localhost:9200/index_name/_close'
- 开启data节点
- 打开分配功能。 执行 curl -v -XPUT http://localhost:9200/_cluster/settings -d '{"transient":{"cluster.routing.allocation.enable": "all"}}'。这时,重新分配会很快,shard越少越快。
- 完成后,重新打开关闭的index,这时也会重新分配。 curl -XPOST 'http://localhost:9200/index_name/_open'。至此,恢复完成。
在集群中,网络质量还是很重要的。 一旦节点失联,会引起较大的性能影响。因此shard数量要少越好。当然,node节点越多,影响也就越小了。