今天遇到一个Eureka集群的一个坑。
问题现场类似是这样的:两台Eureka组成的服务注册中心集群,两台服务提供方server1、server2,两个服务调用方client1、client2。
正常的情况下:
client1和client2通过服务中心获取的服务提供方的注册的元数据信息,然后本地缓存调用server2、server1的服务API是没问题的。调用server的api服务时采用的FeignClient通过eureka注册中心获取服务信息调用。
以下简写成client服务、server服务、eureka服务:
但今天遇到的情况是client调用server时,返回结果不稳定,以下是排查过程。
1、习惯性的先查看client方日志,发现接口调用有一定的概率失败,但是并没有抛异常,而仅仅是response返回null。
2、查看server方日志,并没有发现异常,也没有发现response为null的情况,并且server方的本机上访问接口都是响应正常。
3、通过分析两方日志,猜想client端的请求可能没有打到server方。
4、分析整个调用流程,只差eureka服务这一个环节没有排查了,然后查看eureka服务上的server方注册信息是否正常。
5、发现两台eureka服务,有一台tomcat假死了,至此猜想是假死的eureka服务假死所致。
6、验证猜想,重启假死的eureka的tomcat服务,问题验证解决。
那么问题来了,
1、eureka服务跑了大半年,怎么突然一台实例假死了?
2、eureka集群的一台实例假死,为什么会导致服务间调用不稳定?
接下来,我们来探讨这两个问题。
待续。。。。。。。。。