在负载均衡器上启用粘性会话

时间:2013-04-24 14:14:04

标签: asp.net session iis load-balancing sticky

对此的任何建议都会非常感激,我整个上午一直在研究,我仍然在摸不着头脑。几个星期前我在一家新公司开始,我是唯一的.NET开发人员,因为开发最初是由一家外包公司完成的,我被要求进行研究。 我对现有系统的了解非常有限,但从我能收集的情况来看,情况如下。

我们希望在asp.net网站上启用粘性会话。从我收集的研究中,我需要做以下步骤。我们正在使用ASP.NET状态服务

该设置是一个负载平衡服务器,为两个Web服务器提供服务。

  1. 确保两台Web服务器具有相同的计算机密钥。
  2. 确保在部署之前预先编译了网站。对于ASP.NET State Service对象的序列化。
  3. 确保iis元数据库上的应用程序路径在两个Web服务器上都相同。
  4. 我缺乏的知识是会话存储在哪里。会话是否存储在负载均衡器上,是否可以存储在负载均衡器上?从我所看到的,它们由ASP.NET状态服务存储,如果服务在负载均衡器上运行,那么会话就存储在负载均衡器中。

    根据我的理解,ASP.NET状态服务在每个Web服务器上运行,它们只是相互通信,以便会话存储在两个服务器上。我假设他们这样做的方式是基于所使用的算法类型。任何信息将不胜感激。

2 个答案:

答案 0 :(得分:6)

zeencat,在状态服务器模式部分查看http://msdn.microsoft.com/en-us/library/ms178586.aspx

  

StateServer模式将进程中的会话状态(称为ASP.NET状态服务)存储在ASP.NET辅助进程或IIS应用程序池中单独。   使用此模式可确保在重新启动Web应用程序时保留会话状态,并使会话状态可供Web场中的多个Web服务器使用。   要使用StateServer模式,必须首先确保ASP.NET状态服务在用于会话存储的服务器上运行。安装ASP.NET和.NET Framework时,ASP.NET状态服务作为服务安装。

根据我的理解,ASP.Net状态服务在一台服务器上运行,作为一种名为 ASP.NET状态服务的服务,两台服务器将具有相同的web.config文件:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>

这样,会话就存储在托管服务的服务器上。

希望它有所帮助, []

答案 1 :(得分:1)

如果您在AWS或Redis中,如果您在本地作为ASP.NET会话存储而不是使用粘性会话,请查看使用ElastiCache。它在自动缩放,负载平衡方面具有更多优势,我会说性能。有关详情,请访问http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-asp-net-session-state-provider-for-redis-preview-release.aspx