AWS经典负载均衡下同一事务日志出现于两台Tomcat服务器的原因咨询
问题分析与原因排查
首先明确:AWS Classic Load Balancer的固有逻辑是单个请求只会转发到一台后端服务器,默认轮询或基于会话粘性的转发策略都不会把同一个请求同时发给两台Tomcat,所以这个现象和LB本身无关,问题出在应用或日志配置层面。
可能的原因如下:
- 应用存在跨节点调用逻辑:
比如请求到达A服务器后,应用内部通过HTTP调用、RPC调用等方式触发了对B服务器的请求,导致B服务器也记录了该事务的相关日志。出错时的堆栈跟踪可能就是B服务器抛出的异常,所以只出现在B的日志里;无错误时,A和B都完成了处理,所以两台都有事务详情。 - 日志配置存在同步或共享:
检查两台Tomcat的日志配置(比如logback.xml、log4j.properties),是否存在日志文件共享(比如挂载了同一个EBS卷或NFS目录)、远程日志同步(比如配置了将日志转发到同一集中系统但本地日志也重复写入),或者有其他进程往catalina.out写入相同内容。 - 事务标识不唯一:
你用来过滤日志的事务ID可能不是全局唯一的,比如多个请求复用了同一个标识,导致你误以为是同一个事务出现在两台服务器日志中,实际是不同请求分别打到了两台Tomcat。 - 应用代码存在重复日志输出逻辑:
比如某些分布式日志组件配置不当,导致节点间同步日志内容,或者应用本身在处理请求时,有重复的日志打印代码被触发多次。
排查建议
- 给每个请求生成唯一UUID作为事务标识,再去两台服务器日志中搜索该UUID,确认是否真的同一个请求的日志出现在两台机器。
- 检查应用代码的请求处理流程,看是否存在跨服务器的内部调用逻辑。
- 对比两台Tomcat的日志配置文件,排查是否有异常的共享、同步设置。
- 可以在后端服务器抓包,验证单个请求是否只被LB转发到一台服务器。
内容的提问来源于stack exchange,提问作者Amarichey
相关产品推荐
相关产品推荐

