一次consul引发的故障

由于我司服务注册和发现都是基于consul来做的,因此也算是强依赖于这个。

这次碰到的一个环境是consul-server和其他应用服务混合部署的情况。

现象是一个consul-server所在的机器突然IO WAIT非常高,导致服务没有响应了,而通过consul接口发现注册在这个机器上的服务还都是存在的。

因为consul是本地注册通知然后通知到整个consul集群的。因此只要一分钟没有把这个consul-server remove掉,那整个集群就永远认为这个机器上的所有服务都是正常的。

然后其他服务来找这个服务就必定是不成功的了。

但是这种情况是只会发生在混合部署的情况下,一般情况下是不会发生的。 同时在consul 0.7以后的版本中已经加入了对应的应对机制来预防这种情况的发生。