ASP.NET应用程序服务器集群方案
本文采用nginx来实现asp.net程序集群化。
准备环境
首先准备nginx环境,windows版本下载链接:http://nginx.org/en/download.html
解压后文件格式如下:
修改配置文件
打开 conf 文件夹中的 nginx.conf 配置文件
配置说明:
1.listen #表示需要监听的端口(默认为80)
2.server_name #服务器地址
3.location #代理配置
4.upstream #配置负载均衡服务器列表(处理监听到请求的服务器)
需要注意的是 upstream 中的 ip_hash; 节点,该节点表示启用nginx的ip哈希分配算法,意味着同一ip地址的不同请求将会被分配至同一服务器。好处就是不用借助第三方工具管理session,坏处就是并非正真的负载均衡(会出现有的服务器请求处理不过来,有的服务器只接收到少量的请求)。若使用第三方session管理工具请删除此配置节点。
测试
启动nginx.exe程序
浏览器访问我们配置的负载均衡服务器节点,即 127.0.0.1:2018 (端口根据自己部署的程序配置)。
提示
在整个配置中需要注意的是80端口被占用的问题。或者像我一样改nginx的监听端口(如果更改监听端口则可以忽略下面的问题)
1.将iis中默认的default web site端口改掉
2.如果电脑装有sql server 则还需关闭sql server reporting services服务(此服务会占用80端口)
3.其它问题敬请百度...
不同服务器同步session
如果启用nginx的ip_hash配置请忽略本条,此项针对不同服务器之间session共享提供建议方案。
一、状态服务器session(启动独立的进程保存session)
首先开启一个asp.net 状态设置的服务
即:在 “我的电脑” 鼠标右键--->管理--->服务和应用程序----> 服务--->asp.net状态服务(或者asp.net state service)--->点击右键选择“启动”
启动asp.net状态服务后,然后再web.config配置文件中添加<sessionstate>这个节点内容
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 asp.net 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?linkid=169433 --> <configuration> <system.web> <compilation debug="true" targetframework="4.5" /> <httpruntime targetframework="4.5" /> <!--状态服务器session的配置 :添加这一段代码--> <sessionstate stateconnectionstring="tcpip=127.0.0.1:2018" mode="stateserver"></sessionstate> </system.web> </configuration>
二、数据库session
怎么将session记录到数据库中呢? 其实微软已经为我们设置好了。只要我们简单的配置一下就行了。
首先。我们进入c盘下的 windows文件夹 下的microsoft.net文件夹下的framework/framework64文件夹下的v4.0.30319文件夹下:找到aspnet_regsql 文件。
具体的路径是: c:\windows\microsoft.net\framework64\v4.0.30319
然后:快捷键win+r调出cmd 命令窗口
在cmd中进入c:\windows\microsoft.net\framework64\v4.0.30319文件夹下
即:在cmd 命令中输入:cd c:\windows\microsoft.net\framework64\v4.0.30319
然后执行 aspnet_regsql.exe -s . -u sa -p 123456 -ssadd -sstype c -d demo
解释一下 aspnet_regsql.exe表示执行这个文件 ,-s 后接的参数为数据库服务器的名称或者ip地址;-u 表示sqlserver的登陆用户名是sa ,-p 表示登陆密码是123456 最后面的demo是数据库名,即:你要将session保存到哪个数据库下。
点击回车键后,直到执行完毕
web.config配置:
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 asp.net 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?linkid=169433 --> <configuration> <system.web> <compilation debug="true" targetframework="4.5" /> <httpruntime targetframework="4.5" /> <!--进程外session添加这一段代码--> <!--<sessionstate stateconnectionstring="tcpip=127.0.0.1:2018" mode="stateserver"></sessionstate>--> <!--数据库session配置文件--> <!--timeout是设置session过期时间,这里设为60分钟。如果不设置,则默认为20分钟--> <sessionstate sqlconnectionstring="server=.;database=demo;uid=sa;pwd=123456" allowcustomsqldatabase="true" mode="sqlserver" timeout="60"></sessionstate> </system.web> </configuration>
登陆数据库验证:
上面两张表就是根据配置自动生成保存session的数据表。
至此session共享问题已解决。
下一篇: 他是春秋五霸之一,为何只有他惹人争议?