背景:

        1)中间件应用集群CLUSTER A,部署有服务svr_a和svr_b。

        2)GateWay

        3)集群CLUSTER B

        GateWay与CLUSTER B之间通过域进行连接,CLUSTER B将svr_c服务export到GateWay。        

        svr_b为一个WSL客户端,svr_a调用svr_b,通过svr_b调用GateWay上import的服务。

 

问题:

        理论上svr_a被调用后,应该能正常调用到CLUSTER B的svr_c服务,但实际并不成功。

 

排查:

         1)首先查看错误日志和TRACE日志,发现错误日志中报svr_a服务错误,tperrno=11,tperrtext=TPESVCFAIL。

         2)因为这套环境是新搭建的一套环境,所以重点排查系统与系统之间交互的情况。

         3)集群机器比较多,为了便于排查,停掉集群中其他节点的server,只留最少的节点数和server数。

         4)采用从svr_a发起检查,因为之前GateWay比较容易出问题,所以重点检查GateWay,采用检查调用次数的方法。理论上每调一次svr_a服务,svr_b和svr_c都应该加1才对。但是svr_a服务被调用后,发现GateWay上服务的调用次数并没有加1。所以可以排除CLUSTER B的问题,也可以排除GateWay与CLUSTER B之间链路的问题。继续排查CLUSTER A和GateWay和两者之间链路。

        5)怀疑有没有可能是配置文件的问题,但是与生产系统配置逐一比对后发现没有问题。

        6)因为注意到svr_b的调用次数一直是0,突然来了个想法,就是如果把svr_b也停掉会是什么情况呢?停掉之后,发现svr_a还是报TPESVCFAIL错误,如果想要调用的服务不存在,应该报TPENOENTRY错误才对,既然没报这个错,那么可以说明跟svr_b没有关系,跟svr_a和svr_b之间也没有关系,只可能是svr_a的问题。

        7)检查svr_a,发现跟生产服务器的文件大小都不一样。。。基本找到问题所在了,将svr_a与生产系统同步后,问题解决。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐