.net framework 4.5下测试成功,使用RedisSessionStateProvider 2.2.1保持session数据,通过Haproxy保持会话数据。
首先在PM下安装RedisSessionStateProvider
Install-Package Microsoft.Web.RedisSessionStateProvider,修改web站点 web.config,使两个web站点的Redis配置相同。

<configuration>
    <appSettings>
        <add key="val" value="100"/>
    </appSettings>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="localhost" accessKey="" ssl="false" />
      </providers>
    </sessionState>

    </system.web>

</configuration>

测试站点index.aspx页面源码

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebApp.Index" %>

 <!DOCTYPE html>

 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     <title></title>
 </head>
 <body>
     <form id="form1" runat="server">
     <div>
        <asp:Button ID="btnSet" runat="server" OnClick="btnSet_Click" Text="Set Session" />
     </div>
     </form>
 </body>
 </html>

后台代码

  public partial class Index : System.Web.UI.Page
     {
         protected void Page_Load(object sender, EventArgs e)
         {
             Response.Write(System.Configuration.ConfigurationManager.AppSettings["val"] + "<br/>");

             if (Session["a"] != null)
             {
                 Response.Write(Session["a"]);
             }
             else
             {
                 Response.Write("session empty");
             }
             Response.Write("<br/>" + Request.Url.ToString());
             Response.Write("<br/> sessionid=" + Session.SessionID);
         }

         protected void btnSet_Click(object sender, EventArgs e)
         {
             Session["a"] = "Wilson.fu";
         }
     }

将测试站点发布到一台独立服务器,iis中分拨设置(testweb1)81、(testweb2)82两个端口模拟两台web服务器。

CentOS下安装Haproxy,配置如下

 global
     log    127.0.0.1 local0
 #    log    127.0.0.1 local1
     maxconn    4000
     ulimit-n 8000
     uid    0
     gid    0
 #    chroot    /tmp
 #    nbproc    2
 #    daemon
 #    debug
 #    quiet

 listen proxy1 192.168.207.128:8000
     mode    http
 #    source    127.0.0.2:0
 #    log    127.0.0.1 local0
 #    log    127.0.0.1 local1
     log global
     #mode    tcp
 #        cookie SERVERID insert indirect
 appsession ASP.NET_SessionId len 30 timeout 5h request-learn
     balance roundrobin
     #dispatch 127.0.0.1:3130
     #dispatch 127.0.0.1:31300
     #dispatch 127.0.0.1:80
     #dispatch 127.0.0.1:22
     option httpchk
 #    server test 127.0.0.1:80 cookie cookie1 check inter 300
 #        server web02 192.168.0.104:80 cookie cookie2 check inter 300
 #server  web01 127.0.0.1:80 cookie cookie1  check inter 2000 fall 3 weight 30              #定义的多个后端
 #server  web02 192.168.0.104:80 cookie cookie2 check inter 2000 fall 3 weight 30              #定义的多个后端
 server  web01 192.168.207.130:81 cookie cookie1  check inter 2000 fall 3 weight 30              #定义的多个后端
 server  web02 192.168.207.130:82 cookie cookie2 check inter 2000 fall 3 weight 30              #定义的多个后端

 #    server nc 127.0.0.1:8080 cookie cookie1 check inter 300
 #    server tuxlocal0 10.101.23.9:80 cookie cookie1 check
 #    server tuxlocal1 127.0.0.1:80 cookie cookie1 check
 #    server tuxlocal2 127.0.0.1:80 cookie cookie2 check
 #    server tuxlocal3 127.0.0.1:80 cookie cookie3 check
 #    server tuxlocal4 127.0.0.1:80 cookie cookie4 check
 #    server vax 10.101.14.1:80 cookie cookie1 check
     #server tuxceleron 10.101.0.1:80 cookie cookie2 check
     #server telnet 127.0.0.1:23
     #server ssh 127.0.0.1:22
     #server local 127.0.0.1:3130 cookie cookie3 check
     #server ko 127.0.0.1:0 cookie cookie3 check
     #server local 127.0.0.1:8001 cookie cookie3 check
     #server local 127.0.0.1:3130
     #server celeron 10.101.0.1:80 cookie srv1
     #server celeron 10.101.0.1:31300
     #server local 10.101.23.9:31300
     contimeout    3000
     clitimeout    150000
     srvtimeout    150000
     maxconn 60000
     option redispatch
     retries    3
     grace 3000
     #rsprep    ^Server.* Server:\ IIS
     #rspdel    ^Server.*
     #rspadd Set-Cookie:\ mycookie=0;\ path=/
     #rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \4\ (\2)
     # force connection:close
     #reqidel ^Connection:
     #rspidel ^Connection:
     #reqadd    Connection:\ close
     #rspadd    Connection:\ close
     # processing options
     #option    keepalive
     option    forwardfor
     option httplog
     option dontlognull
 #    reqirep ^(Test:\ ) \0_toto_\1_toto
 #    reqidel ^X-Forwarded-for:
 #    reqirep ^(GET|POST)\ .* \0
 #    reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0
 #    reqideny ^

Haproxy

启动Haproxy

[root@localhost sbin]# ./haproxy -f /usr/local/haproxy/haproxy2.cfg

输入代理服务器IP,被分流至82站点

下面在iis中停止端口为82的站点,刷新页面发现自动分流至端口为81的站点,并且session值被保留!

Haproxy马上侦测到82端口的站点被停止(down)

Haproxy+asp.net +RedisSessionStateProvider 完美实现负载均衡,并且session保持的更多相关文章

  1. ASP.NET中如何实现负载均衡

    ASP.NET站点中做负载均衡: 基于HTTP协议我们可能发现我们要解决两点问题: 第一,做到负载均衡,我们需要一个负载均衡器. 可以通过DNS轮询来做,在DNS服务器上配置为每次对我们做负载均衡的同 ...

  2. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  3. 负载均衡服务器session共享的解决方案

    在ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者Readonly,并且在web.config文件中正确的设置了S ...

  4. windows使用nginx+memcached实现负载均衡和session或者缓存共享

    windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台server server1:115.29.186.215 windows2008 64位操作系统 ser ...

  5. 通过Nginx+tomcat+redis实现反向代理 、负载均衡及session同步

    一直对于负载均衡比较陌生,今天尝试着去了解了一下,并做了一个小的实验,对于这个概念有一些认识,在此做一个简单的总结 什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称 ...

  6. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  7. Apache+Tomcat +mod_proxy集群负载均衡及session

      序言: 在玩Apache+Tomcat +mod_jk集群负载均衡及session的时候发现,还有一种方式可以实现,就是网上各位大牛们说的mod_proxy反向代理. 实在弄的我的知识细胞洋洋.实 ...

  8. linux+asp.net core+nginx四层负载均衡

    Linux Disibutaion:Ubuntu 16.04.1 LTS Web Server:Nginx.Kestrel 关于如何在linux中部署asp.net core我这里不再详细介绍,可以参 ...

  9. asp.net 负载均衡下session存储的解决方法

    转自:http://www.cnblogs.com/david100zhang/archive/2011/12/28/2304917.html 在WEB场中,动态网页往往会因为几台主机做了负载而产生S ...

随机推荐

  1. PHP 正则表达式 基本规则

    正则表达式基本知识: \ 将下一个字符标记为一个特殊字符.或一个原义字符.或一个 向后引用.或一个八进制转义符. 例如,'n' 匹配字符 "n".'\n' 匹配一个换行符.序列 ' ...

  2. 个人对sort()排序方法中比较函数一直很混乱,今日理清

    需求:使用随机数来打印出0-10,并排序. 代码: var a = new Array();var testArray = function() { while (1) { var b = parse ...

  3. Git学习笔记(3)——撤销修改和文件的删除

    本文主要记录了git中,错误的撤销和文件的删除. 撤销修改 这里有3中情况 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 不但改乱了工作区某个 ...

  4. 从拟物化到扁平,再到Material Design

    Google I/O 2014提出Material Design,这段时间听到不少关于Material Design的解读,至此Google已经定位了自己的设计语言,我个人看来就是Android和iO ...

  5. dr.wondr博士随笔之三星某古董智能机GTXXXX 的取证恢复一例

    大家好!欢迎来到我dr.wonde博士的微博! 这是dr.wonde的第一篇微博,不足之处,还请见谅. 今天dr.wonde给你们带来不可能的数据恢复任务之三星非智能机古董机GT-E1088C 的恢复 ...

  6. 关于sql server 2008过期导致 MSSQLSERVER服务就无法启动,手动启动就报告错误代码17051。

    1.基本现象:MSSQLSERVER服务就无法启动,手动启动就报告17051错误. 2.解决办法: 第一步:进入SQL2008配置工具中的安装中心, 第二步:再进入维护界面,选择版本升级, 第三步:进 ...

  7. 巴科斯范式和sql语言

    查询Mysql帮助文档,如何写SQL语句的时候,需要注意SQL语法,这里就需要知道BNF巴科斯范式. 巴科斯范式:BNF用于描述计算机语言.基本的规则如下: 尖括号<> 内包含的为必选项. ...

  8. hibernate一对多关系配置

    一.     表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...

  9. CentOS中查看系统资源占用情况的命令

    用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...

  10. HDU 4714 Tree2cycle DP 2013杭电热身赛 1009

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 Tree2cycle Time Limit: 15000/8000 MS (Java/Other ...