zoukankan      html  css  js  c++  java
  • windows使用nginx+memcached实现负载均衡和session或者缓存共享

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

    两台server

     server1115.29.186.215 windows2008 64位操作系统

     server2114.215.193.64 windows2008 32位操作系统

    当中server1同一时候做nginx负载均衡server

    使用概要:因为两台server;所以数据库连接能够使用一台server;

    因为本人使用的ibatis框架;所以在数据库层使用ibatis Cache

    这样就能够使用一台sqlserver;两台server訪问都是缓存数据。

    仅仅是要解决一台缓存清空 另外一台server缓存也须要及时更新的问题,眼下我们是使用webservice进行相关远程server进行缓存清空;

    或者是使用sql订阅与公布的方式进行同步数据;详细能够看业务需求

    可是这个时候会照成session不共享:我使用了sqlserverstateserverd的方式保存session都不行。最后使用memcahed的方式进行session共享

    须要下载的资源有:

    1:Nginx:首先去nginx官方站点下载http://nginx.org/en/download.html

    我下载的是稳定版本号Stable version  nginx/Windows-1.6.0  pgp 

     

    2:memcached

    我放到了我的百度云盘;大家能够下载使用



    32位 memcached

    http://pan.baidu.com/s/1nMej8

     

    64位memcached

    http://pan.baidu.com/s/1kTJrRa3

     

    Memcached Session共享组件+Sql 

    http://pan.baidu.com/s/1i3gkiNV

    server一:

    1:安装nginx

    因为要使用域名直接訪问nginxww.kth.hk;

    所以nginx须要使用80port;请将80port加入到防火墙过滤;所以系统里面使用80port的都须要换

    否则nginx.exe运行会报错以下操作;

    一般系统用到了80port的有:(1)iis里面的站点的port

    然后cmd->iisreset2mssql

     

    我将这个服务关掉 或者

    假设还是不行 则使用cmd命令看下那些东西实用80port 这个能够百度下

     

    本次将下载文件解压到E盘 又一次命名为nginx

     

    当中vhosts是自己加入的文件 后面解说用途

    解压后 使用cmd命令

    进入到nginx文件夹

     

    然后就能够使用nginx的命令:我用的比較多的命令式

    Nginx -s stop停止nginx

    Nginx.exe 运行ngxin

     

    运行nginx.exe 命令后 光标没有不论什么反应即依照成功

    打开资源管理器 就会多出nginx的进程

    因为nginx服务所以不能开机自己主动启动(能够网上百度方法让开机自启动)

    所以每次关机开机后 都须要运行上面的开启nginx的命令

    那么我们先来看配置文件

    进入

     

    吧这个文件能够自行先备份一个以防还原

    我的配置内容是 都有凝视

    #user  nobody;

    worker_processes 2;

    #error_log  logs/error.log;

    #error_log  logs/error.log  notice;

    #error_log  logs/error.log  info;

    #pid        logs/nginx.pid;

    events {

        worker_connections  1024;

    }

    http {

        include       mime.types;

        default_type  application/octet-stream;

        #设定请求缓冲 设置開始 

        #server_names_hash_bucket_size 128;

        #client_header_buffer_size 32k;

        #large_client_header_buffers 4 32k;

        #client_max_body_size 8m; #同意客户端请求的最大单文件字节数

        #client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数

        #设定请求缓冲 设置结束

        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

        #                  '$status $body_bytes_sent "$http_referer" '

        #                  '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  logs/access.log  main;

        sendfile        on;

        tcp_nopush     on;

        #keepalive_timeout  0;

        keepalive_timeout  65;

        tcp_nodelay on;

        

        fastcgi_connect_timeout 300;

        fastcgi_send_timeout 300;

        fastcgi_read_timeout 300;

        fastcgi_buffer_size 64k;

        fastcgi_buffers 4 64k;

        fastcgi_busy_buffers_size 128k;

        fastcgi_temp_file_write_size 128k;

        ##cache配置##

        proxy_connect_timeout 5;#nginx跟后端server连接超时时间(代理连接超时)

        proxy_read_timeout 60;#连接成功后,后端server响应时间(代理接收超时)

        proxy_send_timeout 5; #后端server数据回传时间(代理发送超时)

        proxy_buffer_size 16k;  #设置代理server(nginx)保存用户头信息的缓冲区大小

        proxy_buffers 4 64k;  #proxy_buffers缓冲区。网页平均在32k下面的话,这样设置

        proxy_busy_buffers_size 128k;#高负荷下缓冲大小(proxy_buffers*2

        proxy_temp_file_write_size 128k;#设定缓存目录大小,大于这个值。将从upstreamserver传

       

        ##cache结束##

        #gzip压缩開始

        gzip  on;

        gzip_min_length   1k;

        gzip_buffers   4 8k;

        gzip_http_version  1.1;

        gzip_types   text/plain application/x-javascript text/css  application/xml;

        gzip_disable "MSIE [1-6].";

        #gzip压缩结束

        #分发server配置開始

    upstream myCluster {   

    #将要跳转的两台server的域名port或者是ip和port 

    #weight是权重 越大 訪问到的概率就越大 还有其它的配置

    #详细能够百度

    server 115.29.186.215:811  max_fails=2 fail_timeout=5s weight=2; 

    server 114.215.193.64:801  max_fails=2 fail_timeout=5s weight=1; 

        } 

        #分发server配置结束

        # 包括全部的虚拟主机的配置文件

        include E:/nginx/vhosts/*.conf;

    }

    以上是我的配置内容

    当中最后的

     # 包括全部的虚拟主机的配置文件

        include E:/nginx/vhosts/*.conf;

    是因为我有非常多站点 所以每一个站点的配置内容都不一样

    所以我就分开分布配置

    我选择当中一个进行解说

     

    server {

    #监听80port

            listen       80;

    #将要监听的域名 能够使用正在表达式

            server_name  *.ktf.hk ktf.hk *.kingtaifook.com kingtaifook.com;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

            # redirect server error pages to the static page /50x.html

            #错误页面配置

            error_page  404 403 500 502 503 504  /Page/Wrong.htm;

         

            # deny access to .htaccess files, if Apache's document root

            # concurs with nginx's one

            #不同意进入的页面 以Maps开头的eg:www.ktf.hk/Maps/.....

            location /Maps{

                deny  all;

            }

    #请求全部文件

            location / {

               #请求动态文件设置 不进行缓存,直接转到后端server

       proxy_pass http://myCluster/; #这里的名字和上面的cluster的名字同样 

               proxy_redirect  off;

               proxy_set_header Host $host;

               #缓存设置 假设以下设置了 那么页面訪问会有缓存 假设是动态页面最好不设置或者使用proxy_cache key给页面传递參数作为不同缓存页面 详细能够百度下

               #proxy_cache_valid 200 302 1h;#设置http状态码为200,302缓存时间为1小时

               #proxy_cache_valid 301 1d;#设置失期时间,为30

               #proxy_cache_valid any 1m;

               #expires 30d;

           #传递真实ip给分发server 获取真实訪问用户ip

               #在后台能够使用HttpContext.Current.Request.Headers["X-Real-IP"]

             proxy_set_header X-Real-IP $remote_addr;

            }

    #请求包括Admin带头的全部文件

            location /Admin {

       proxy_pass http://115.29.186.215:811; 

               proxy_redirect  off;

               proxy_set_header Host $host;

               #请求静态文件设置

               #proxy_cache_valid 200 302 1h;#设置http状态码为200,302缓存时间为1小时

               #proxy_cache_valid 301 1d;#设置失期时间。为30

               #proxy_cache_valid any 1m;

               #expires 30d;

       #传递真实ip给分发server

             proxy_set_header X-Real-IP $remote_addr;

            }

           #请求包括Resource带头的全部文件

           location /Resource {

       proxy_pass http://115.29.186.215:811;  

               proxy_redirect  off;

               proxy_set_header Host $host;

               #请求静态文件设置

               proxy_cache_valid 200 302 1h;#设置http状态码为200,302缓存时间为1小时

               proxy_cache_valid 301 1d;#设置失期时间。为30

               proxy_cache_valid any 1m;

               expires 30d;

            }

           #请求包括/Scripts/kindeditor-4.1.7/attached带头的全部文件

           location /Scripts/kindeditor-4.1.7/attached {

       proxy_pass http://115.29.186.215:811;  

               proxy_redirect  off;

               proxy_set_header Host $host;

               #请求静态文件设置

               proxy_cache_valid 200 302 1h;#设置http状态码为200,302缓存时间为1小时

               proxy_cache_valid 301 1d;#设置失期时间,为30

               proxy_cache_valid any 1m;

               expires 30d;

            }

           #请求后缀为ashx的全部文件

           location ~* .ashx$ {

       proxy_pass http://115.29.186.215:811;  

               proxy_redirect  off;

               proxy_set_header Host $host;

               #请求静态文件设置

               proxy_cache_valid 200 302 1h;#设置http状态码为200,302缓存时间为1小时

               proxy_cache_valid 301 1d;#设置失期时间,为30

               proxy_cache_valid any 1m;

               expires 30d;

            }

        }

        

    因为图片没有单独做图片server;所以我就重定向后台仅仅能跳转到

    http://115.29.186.215:811这台server上面及配置文件

    #请求包括Admin带头的全部文件

    location /Admin 

    同理;前台获取页面的时候 也强制跳转到http://115.29.186.215:811这台server上面

    及配置文件

    #请求包括Resource带头的全部文件

    location /Resource {proxy_pass http://115.29.186.215:811;

     以上是nginx配置 更加具体的能够百度

    以下配置memcached

    同上 也是将64位解压到E

    更名为memcached

     

    同理进入cmd :输入

    1E:

    2:Cd: memcached

    3:memcached.exe -d install 

    安装好服务后 开启服务

    4:memcached.exe -d start

    假设须要关闭则运行

    memcached.exe -d stop|shutdown 进行关闭

    设置memcached,启动该服务后,memcached服务默认占用的port是11211,

    请将11211加入到防火墙过滤占用的最大内存默认是64M。

    假设须要改动这两个參数,比方改动port为10000,内存为512,则输入: 

    memcached.exe -p 10000 -m 512 -d start  ,  -p 表示要改动的port, -m表示占用的最大内存(单位为M)。

    好 memcache配置好了,那么我们将要使用memcachesession模块。下载上面的资源文件Memcached Session共享组件+Sql 

     

    仅仅须要用到1:Sql Server 2005 2:Enyim.Caching 3: MemcachedProviders

    去数据库建立一张给缓存使用的数据库表:memcache会依据用户asp.net生成的cookie去获取缓存是否存在。否则还会去数据库中去查找是否过期而且存在;双重机制保证缓存的的稳定

    然后仅仅需sql建表语句

     

    因为每次缓存都会加入一条记录到数据库;所以须要定期清理数据库

    能够设置一个定时器定期运行Store Procs里面的

     

    好接下来使用Memched

    假设仅仅是使用session的话;仅仅须要配置webconfig即可。

    假设是想自己定义使用缓存。则须要自己新建一个操作缓存的类;调用2:Enyim.Caching dll里面封装的方法就可以

    我们看session机制的配置

    打开站点的web.config

    在 

      <configSections>

    以下加入

     <!--memcached配置1開始-->

        <section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection, MemcachedProviders" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>

        <sectionGroup name="enyim.com">

          <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching"/>

        </sectionGroup>

    <!--memcached配置1结束-->

     

    <configuration>

    以下加入

     <!--memcached配置2開始-->

      <enyim.com>

        <memcached>

          <servers>

            <!-- put your own server(s) here-->

            <add address="115.29.186.215" port="11211"/>

            <add address="114.215.193.64" port="11211"/>

          </servers>

          <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00"/>

        </memcached>

      </enyim.com>

      <cacheProvider defaultProvider="MemcachedCacheProvider">

        <providers>

          <add name="MemcachedCacheProvider" type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders" keySuffix="_MySuffix_" defaultExpireTime="1000"/>

        </providers>

      </cacheProvider>

      <connectionStrings>

        <add name="SqlSessionServices" connectionString="Data Source=115.29.186.215,1128;Initial Catalog = JDF_Memcached;User Id =**;Password =**;"/>

      </connectionStrings>

      <!--memcached配置2结束-->

     

    在 <system.web>以下加入sessionState

          <sessionState cookieless="false" timeout="10" regenerateExpiredSessionId="true" mode="Custom" customProvider="MemcachedSessionProvider">

          <providers>

            <add name="MemcachedSessionProvider" type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders" connectionStringName="SqlSessionServices" dbType="SQL"

            writeExceptionsToEventLog="false"  socketConnectTimeout="1000" socketTimeout="1000" />

          </providers>

        </sessionState>

     

    以上就能够使用memcachesession模块了

    使用的方式还是像曾经一样

    Session[“XXX”]

    这样就实现了多台server共享session

    server二:

        不须要安装nginx;仅仅须要memcached 32位的

     因为是32位的

      和安装1中memcached的 流程一样安装

    至此  配置完毕

    使用到如今临时没有发现什么问题

  • 相关阅读:
    Oracle 游标使用全解(转)
    Oracle临时表GLOBAL TEMPORARY TABLE
    jQuery 增加 删除 修改select option
    万恶的 “缺少标识符、字符串或数字”
    关于window的resize事件
    flex关于字符串转Boolean .
    UpdatePanel完成后调用js
    JS 弹出模态窗口解决方案
    Python:扫描目录下的所有文件
    Nginx笔记总结二十一:隐藏或者混淆nginx返回的Server信息
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5151759.html
Copyright © 2011-2022 走看看