问题 使用状态服务器对 .Net Web 应用程序进行负载平衡

问题 使用状态服务器对 .Net Web 应用程序进行负载平衡

我们在 Netscaler 负载均衡器后面有多个 Web 服务器。每个 (Win2008) 服务器都托管一个 ASP.Net 应用程序(使用 iis 6.1),这些应用程序配置为使用运行 .Net StateServer 服务的中央服务器进行会话状态管理。

当我们将负载平衡器配置为使用“循环”或“最不忙”路由时,Web 应用程序会定期崩溃并出现错误,表明会话状态中预期的某些内容丢失。但是,它并不是一直都这样 - 只在某些步骤上,然后在大约 75% 的尝试中才会这样。

当我们将负载平衡器配置为服务器持久性(因此用户“坚持”在一台服务器上)时,问题不会发生。(但这不是我们想要的运行模式)

我们已经检查/完成的事情:

  • 重新开始所有的事情
  • 所有服务器上的机器密钥都是相同的
  • Web 服务器和状态服务器之间没有连接问题
  • IIS 的站点名称、路径和 ID 在所有 Web 服务器上都是相同的
  • 应用程序日志中未记录任何错误

是否有人对其他需要检查的事项/可能的原因有什么建议?

注意:我们在另一个环境中进行了完全相同的设置 - 相同类型的负载平衡器、相同的 Web 应用程序、相同的配置、相同的服务器设置... 并且运行良好。唯一的区别是 VMWare Tools 的版本不同,但看不出这是原因吗?

答案1

几个月后,我们发现了原因。部分(但不是全部)服务器已升级到较新版本的 .Net Framework。

微软不支持不同的服务器使用同一个StateServer使用不同版本的框架因此,当客户在 4.5.1 版服务器和早期版本服务器之间切换时,他们实际上会丢失会话并且应用程序崩溃。

如果你遇到这个问题我建议你检查安装了哪个框架在每个服务器上 - 它们必须都相同才能与同一个 StateServer 一起工作。

相关内容