漂泊雪狼的博客

思考,讨论,分享C#,JavaScript,.NET,Oracle,SQL Server……技术

导航

.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页面源码

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebApp.Index" %>
 2 
 3 <!DOCTYPE html>
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6 <head runat="server">
 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 8     <title></title>
 9 </head>
10 <body>
11     <form id="form1" runat="server">
12     <div>
13        <asp:Button ID="btnSet" runat="server" OnClick="btnSet_Click" Text="Set Session" />
14     </div>
15     </form>
16 </body>
17 </html>
View Code

后台代码

 1  public partial class Index : System.Web.UI.Page
 2     {
 3         protected void Page_Load(object sender, EventArgs e)
 4         {
 5             Response.Write(System.Configuration.ConfigurationManager.AppSettings["val"] + "<br/>");
 6 
 7             if (Session["a"] != null)
 8             {
 9                 Response.Write(Session["a"]);
10             }
11             else
12             {
13                 Response.Write("session empty");
14             }
15             Response.Write("<br/>" + Request.Url.ToString());
16             Response.Write("<br/> sessionid=" + Session.SessionID);
17         }
18 
19         protected void btnSet_Click(object sender, EventArgs e)
20         {
21             Session["a"] = "Wilson.fu";
22         }
23     }
View Code

 

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

 

CentOS下安装Haproxy,配置如下

 1 global
 2     log    127.0.0.1 local0
 3 #    log    127.0.0.1 local1
 4     maxconn    4000
 5     ulimit-n 8000
 6     uid    0
 7     gid    0
 8 #    chroot    /tmp
 9 #    nbproc    2
10 #    daemon
11 #    debug
12 #    quiet
13 
14 listen proxy1 192.168.207.128:8000
15     mode    http
16 #    source    127.0.0.2:0
17 #    log    127.0.0.1 local0
18 #    log    127.0.0.1 local1
19     log global
20     #mode    tcp
21 #        cookie SERVERID insert indirect
22 appsession ASP.NET_SessionId len 30 timeout 5h request-learn
23     balance roundrobin
24     #dispatch 127.0.0.1:3130
25     #dispatch 127.0.0.1:31300
26     #dispatch 127.0.0.1:80
27     #dispatch 127.0.0.1:22
28     option httpchk
29 #    server test 127.0.0.1:80 cookie cookie1 check inter 300
30 #        server web02 192.168.0.104:80 cookie cookie2 check inter 300
31 #server  web01 127.0.0.1:80 cookie cookie1  check inter 2000 fall 3 weight 30              #定义的多个后端
32 #server  web02 192.168.0.104:80 cookie cookie2 check inter 2000 fall 3 weight 30              #定义的多个后端
33 server  web01 192.168.207.130:81 cookie cookie1  check inter 2000 fall 3 weight 30              #定义的多个后端
34 server  web02 192.168.207.130:82 cookie cookie2 check inter 2000 fall 3 weight 30              #定义的多个后端
35 
36 #    server nc 127.0.0.1:8080 cookie cookie1 check inter 300
37 #    server tuxlocal0 10.101.23.9:80 cookie cookie1 check
38 #    server tuxlocal1 127.0.0.1:80 cookie cookie1 check
39 #    server tuxlocal2 127.0.0.1:80 cookie cookie2 check
40 #    server tuxlocal3 127.0.0.1:80 cookie cookie3 check
41 #    server tuxlocal4 127.0.0.1:80 cookie cookie4 check
42 #    server vax 10.101.14.1:80 cookie cookie1 check
43     #server tuxceleron 10.101.0.1:80 cookie cookie2 check
44     #server telnet 127.0.0.1:23
45     #server ssh 127.0.0.1:22
46     #server local 127.0.0.1:3130 cookie cookie3 check
47     #server ko 127.0.0.1:0 cookie cookie3 check
48     #server local 127.0.0.1:8001 cookie cookie3 check
49     #server local 127.0.0.1:3130
50     #server celeron 10.101.0.1:80 cookie srv1
51     #server celeron 10.101.0.1:31300
52     #server local 10.101.23.9:31300
53     contimeout    3000
54     clitimeout    150000
55     srvtimeout    150000
56     maxconn 60000
57     option redispatch
58     retries    3
59     grace 3000
60     #rsprep    ^Server.* Server:\ IIS
61     #rspdel    ^Server.*
62     #rspadd Set-Cookie:\ mycookie=0;\ path=/
63     #rsprep ^(Date:\ )([^,]*)(,\ )(.*) LaDate\ est:\ \4\ (\2)
64     # force connection:close
65     #reqidel ^Connection:
66     #rspidel ^Connection:
67     #reqadd    Connection:\ close
68     #rspadd    Connection:\ close
69     # processing options
70     #option    keepalive
71     option    forwardfor
72     option httplog
73     option dontlognull
74 #    reqirep ^(Test:\ ) \0_toto_\1_toto
75 #    reqidel ^X-Forwarded-for:
76 #    reqirep ^(GET|POST)\ .* \0
77 #    reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0
78 #    reqideny ^
Haproxy

启动Haproxy

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

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

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

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