欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET应用程序服务器集群方案

程序员文章站 2022-05-14 10:09:07
本文采用Nginx来实现ASP.NET程序集群化。 准备环境 首先准备Nginx环境,Windows版本下载链接:http://nginx.org/en/download.html 解压后文件格式如下: 修改配置文件 打开 conf 文件夹中的 nginx.conf 配置文件 配置说明: 1.lis ......

  本文采用nginx来实现asp.net程序集群化。

  准备环境

  首先准备nginx环境,windows版本下载链接:http://nginx.org/en/download.html

  解压后文件格式如下:

  ASP.NET应用程序服务器集群方案

 

  修改配置文件

  打开 conf 文件夹中的 nginx.conf 配置文件

  ASP.NET应用程序服务器集群方案

 

  配置说明:

  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>这个节点内容

ASP.NET应用程序服务器集群方案
<?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>
config

 

  二、数据库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

ASP.NET应用程序服务器集群方案

然后执行 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保存到哪个数据库下。

点击回车键后,直到执行完毕

  ASP.NET应用程序服务器集群方案

  web.config配置: 

ASP.NET应用程序服务器集群方案
<?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>
config

  登陆数据库验证:

ASP.NET应用程序服务器集群方案

上面两张表就是根据配置自动生成保存session的数据表。

至此session共享问题已解决。