最近系统按要求迁移到了云平台上,这两天发现一个比较奇怪的现象。当用ELK分析应用日志时,发现集群的负载情况不符合预期,在此记录一下排查过程。
发现异常
系统用ELK做日志收集分析,首先拿一个特定的交易日志做访问次数统计,分析如下:
通过上图可以发现,每个IP几乎各领风骚一两天,同时间其他实例能接收到的请求则寥寥无几,相当于整个集群,只有一个实例在工作,严重影响了整体性能。
逐步排查
权重
因为负载均衡能力是云平台提供的,太多的细节我们之前并不太了解,所以先排查各个端口的权重,发现权重都一样,那么权重并不是导致负载失效的原因。
会话保持
云平台提供的负载均衡 默认 开启了“会话保持”选项,例如 腾讯云的描述,
会话保持可使得来自同一 IP 的请求被转发到同一台后端服务器上。默认情况下,负载均衡会将每个请求分别路由到不同后端服务器实例负载。但是,您可以使用会话保持功能使特定用户的请求被路由到同一台后端服务器实例上,这样可以使某些需要保持会话的应用程序(如购物车)合理地工作。
而我们的场景是tcp短链接请求,所有请求来自固定的几个IP,因此导致我们负载均衡策略失效。
修复
修改一个应用的配置,取消“会话保持”选项,观察请求,负载逐步恢复正常。
收获
- 一定要加强应用的监控和分析;
- 正如摩菲定律所言“凡是可能出错的事就一定会出错”,要时刻保持怀疑的态度和清醒的意识;
- 注意“默认”的功能,白给的不一定是合适的。