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

两台server

server1:115.29.186.215 windows2008 64位操作系统

server2:114.215.193.64 windows2008 32位操作系统

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

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

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

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

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

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

可是这个时候会照成session不共享:我使用了sqlserver和stateserverd的方式保存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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

64位memcached

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Memcached Session共享组件+Sql

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

server一:

1:安装nginx

因为要使用域名直接訪问nginx如ww.kth.hk;

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

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

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

然后cmd->iisreset(2)mssql的

我将这个服务关掉 或者

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

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

解压后 使用cmd命令

进入到nginx文件夹

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

Nginx -s stop停止nginx

Nginx.exe 运行ngxin

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

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

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

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

那么我们先来看配置文件

进入

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

我的配置内容是 都有凝视

#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;

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

所以我就分开分布配置

我选择当中一个进行解说

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

同理进入cmd :输入

1:E:

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配置好了,那么我们将要使用memcache的session模块。下载上面的资源文件Memcached Session共享组件+Sql

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

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

然后仅仅需sql建表语句

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

好接下来使用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结束-->

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWVmaWdodGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在<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>

以上就能够使用memcache的session模块了

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

Session[“XXX”]

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

server二:

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

因为是32位的

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

至此  配置完毕

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

windows使用nginx+memcached实现负载均衡和session或者缓存共享的更多相关文章

  1. Nginx+Tomcat8+Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

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

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

  3. windows使用nginx实现网站负载均衡测试实例

    如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不 ...

  4. Windows服务器nginx+tomcat服务负载均衡

    一.安装两个tomcat服务自启动 1. 解压两个tomcat,名称为分别1,2 2. 配置环境变量 3. 修改文件server.xml中的三个端口号,使得两个tomcat不冲突 (1)<Ser ...

  5. Nginx和Tomcat负载均衡实现session共享(转)

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  6. Nginx和Tomcat负载均衡实现session共享

    以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...

  7. nginx之 nginx + tomcat + redis 负载均衡且session一致性

    说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...

  8. nginx + tomcat + memcached 做负载均衡及session同步

    1.nginx配置 # For more information on configuration, see: # * Official English Documentation: http://n ...

  9. nginx+tomcat实现负载均衡以及session共享(linux centos7环境)

    一.nginx的安装 1.准备三份tomcat tomcat1 设置端口 8080 tomcat2 设置端口 8081 tomcat3 设置端口 8082 2. 下载nginx 3. 解压到/home ...

随机推荐

  1. 14.9 InnoDB Row Storage and Row Formats InnoDB 行存储和行格式:

    14.9 InnoDB Row Storage and Row Formats InnoDB 行存储和行格式: 14.9.1 Overview of InnoDB Row Storage 14.9.2 ...

  2. linux安装Tesseract-OCR

    安装Tesseract-OCR 1. leptonica 需要源码编译安装http://www.leptonica.org/ leptonica 包: leptonica-1.73.tar.gz  解 ...

  3. boost::thread之while(true)型线程终结方法

    我们的程序中经常会用到线程来执行某些异步操作,而有些时候我们的线程执行的函数是这个样子的: void ThreadBody() { while( true ) { std::cout << ...

  4. ABP启动配置

    ABP启动配置   返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行 ...

  5. mybatis 的简单使用

    须要用到的包:(这里仅仅是当中一个版本号.其它的百度) mysql-connector-java-5.1.6-bin mybatis-3.2.2 先看项目文件夹: 配置文件mybatisconfig. ...

  6. SQL--存储过程+触发器 对比!

    一.存储过程 一:存储过程:存储过程是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中. 可以用存储过程名字和参数来调用存储过程,这样可以避免代码重复出现,用起来也方便. 例:    下面 ...

  7. Python之常用模块(待更新)

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  8. iOS 如何创建单例对象

    一.什么是单例? 说到单例我就想起了我的java啊 ,不禁感叹起我的大学时光,学了4年的java开发,到现在还是放弃了我的java,踏入了iOS的行列. 算了,入正轨,我现在正是铁树银花的青春美少女, ...

  9. js技术要点---JS 获取网页源代码

    JS 获取网页源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html& ...

  10. Git中的merge命令实现和工作方式

    想象一下有例如以下情形:代码库中存在两个分支,而且每一个分支都进行了改动.最后你想要将当中的一个分支合并到其它的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并 ...