zoukankan      html  css  js  c++  java
  • Haproxy+asp.net +RedisSessionStateProvider 完美实现负载均衡,并且session保持

    .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: ) _toto_1_toto
    75 #    reqidel ^X-Forwarded-for:
    76 #    reqirep ^(GET|POST) .* 
    77 #    reqirep ^(Host:|Connection:|User-agent:|Cookie:) .* 
    78 #    reqideny ^
    Haproxy

    启动Haproxy

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

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

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

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

  • 相关阅读:
    Netty优雅退出
    使用FFmpeg切片HLS流
    Golang协程和线程区别
    00 PyTorch 开发环境搭建
    SpringBoot + LibreOffice + Hutool 实现附件预览简单示例
    css 注意事项 BFC
    css 伪类 属性选择器 优先级
    html img 标签图片格区别
    redis集群
    Redis RDB与AOF
  • 原文地址:https://www.cnblogs.com/weiweictgu/p/5776124.html
Copyright © 2011-2022 走看看