下文给大家带来负载均衡时会话共享的问题应该怎么样解决,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验来做一个解答。
每个客户端在访问网站时,都会创建相应的会话,用来保存客户的状态信息,网站如果做了负载均衡,会议共享是要做的,IIS对于会话的存储有五种模式
<强> 强>
1, InProc模式(进程内模式)。为默认设置。
会话状态存储在网络云服务器上的内存中。
2, StateServer模式(状态服务器模式)。
会话状态存储在一个名为ASP。净状态服务的单独进程中。这确保了在重新启动网络应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。
3, SQL Server模式。
会话状态存储到一个SQL Server数据库中。这确保了在重新启动网络应用程序时会保留会话状态,并让会话状态可用于网路场中的多个Web服务器。
4,自定义模式
此模式允许您指定自定义存储提供程序。
5,下模式
此模式禁止会话状态。
<强> 强>
,,,如果网站做了负载均衡,对于会话存储就只能选择2,3,4了,下面先来介绍一下StateServer模式,首先得开启状态服务
然后再对web站点的“会话状态”进行设置
启用本机的状态服务
会自动在网络。配置里生成配置文件(如果不能生成就手动添加)
& lt; sessionState 模式=癝tateServer”, stateConnectionString=皌cpip=回路:42424”,超时=?0”,/在
但是这里就存在一个问题,如果每台服务器都照上面配置,各服务器的会话都存储在本机的StateServer里面,还是没有启动共享的作用,这里就需要让一台StateServer共享出来让其他服务器访问,并将会话存储到上面,运行注册表编辑器→打开注册表→找到HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ aspnet_state \ \服务参数节点→将AllowRemoteConnection的键值设置成“1”(1为允许远程电脑的连接,0代表禁止)
也可以修改StateServer的端口
接下来将其它服务器中。配置的配置文件进行修改(sessionState指向开启了允许远程访问的StateServer)
& lt; sessionState 模式=癝tateServer”, stateConnectionString=皌cpip=10.16.5.30:22222”,超时=?0”,/在
用StateServer这种共享式的会话存储方式不仅有安全隐患,而且像上面那台共享的StateServer只要重启服务器,所有的会话都会丢失,所以这种会话存储方式不是很完美,用StateServer存储sesssion比较适合单机IIS开启多进程的。
<强> 强>
,,,要做保证安全并且不会因为重启服务器导致会话丢失,那就要用sql server来存储会话,ASP。NET 2.0版本后微软提供了aspnet_regsql.exe工具可以方便的配置会话数据库。该工具位于Web服务器上的系统根目录微软。NETFramework版本号文件夹中
cd Microsoft.NET C: \ Windows \ \ Framework64 \ v4.0.30319 aspnet_regsql.exe , -ssadd -sstype  c -d & lt; Database Name>, -S & lt; SQL Server IP>, -U & lt; User Name>, -P & lt; Password> aspnet_regsql.exe , -ssadd -sstype  c -d ASPState -S 10.16.5.36 -U sa -P HAha789
注:& lt;数据库Name>为数据库名为ASPState, & lt; SQL Server IP>为数据库实例名像ibm pc \ SQLEXPRESS (若数据库不是2005的不要写ip地址,否则会连接失败),& lt;用户Name>为sa(或与sa同等权限的),& lt; Password>为sa用户名的密码会话定义成功,但是会提示在网络应用中进行相应的配置,此时查看会状态"置疑"发现增加了数据库ASPState,但是没有表。