windows使用nginx+memcached实现负载均衡和session或者缓存共享
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
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或者缓存共享的更多相关文章
- Nginx+Tomcat8+Memcached实现负载均衡及session共享
1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...
- nginx+tomcat+redis负载均衡及session共享
概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...
- windows使用nginx实现网站负载均衡测试实例
如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不 ...
- Windows服务器nginx+tomcat服务负载均衡
一.安装两个tomcat服务自启动 1. 解压两个tomcat,名称为分别1,2 2. 配置环境变量 3. 修改文件server.xml中的三个端口号,使得两个tomcat不冲突 (1)<Ser ...
- Nginx和Tomcat负载均衡实现session共享(转)
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...
- Nginx和Tomcat负载均衡实现session共享
以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架. 此框架的优 ...
- nginx之 nginx + tomcat + redis 负载均衡且session一致性
说明: 本文描述的是 nginx + tomcat + redis 实现应用负载均衡且满足session一致性,从安装到配置的全部过程,供大家学习!nginx 代理服务器ip: 10.219.24.2 ...
- nginx + tomcat + memcached 做负载均衡及session同步
1.nginx配置 # For more information on configuration, see: # * Official English Documentation: http://n ...
- nginx+tomcat实现负载均衡以及session共享(linux centos7环境)
一.nginx的安装 1.准备三份tomcat tomcat1 设置端口 8080 tomcat2 设置端口 8081 tomcat3 设置端口 8082 2. 下载nginx 3. 解压到/home ...
随机推荐
- 流式计算-Jstorm提交Topology过程(上)
Topology是Jstorm对有向无环图的抽象,内部封装了数据来源spout和数据处理单元bolt,以及spout和bolt.bolt和bolt之间的关系.它能够被提交到Jstorm集群. 本文以J ...
- hdu 1262 寻找素数对 数论 打表。
寻找素数对 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- setOnClickListener报空指针异常
1.异常提示: 2.错误原因: 先看代码: public class MainActivity extends ActionBarActivity { private Button btn_test; ...
- jfinal常见问题
2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分.今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal.下 ...
- Android应用开发学习笔记之播放音频
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...
- Android架构分析之使用自定义硬件抽象层(HAL)模块
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...
- HTML中Id和Name的区别
源地址:http://www.cnblogs.com/laodai/articles/2244215.html 在html中:name指的是用户名称,ID指的是用户注册是系统自动分配给用户的一个序列号 ...
- Android性能优化---布局优化
我们从事Android开发编写布局的时候大多数是使用XML来布局,这给我们带来了方便性,这样操作可以布局界面的代码和逻辑控制的Java代码分离出来,使程序的结构更加清晰.明了.特别的复杂的布局,但是这 ...
- ubuntu12 环境下编译freerdp
有时候需要从linux环境下远程连接到windows的环境,可以采用freerdp.freerdp是一个linux下开源的工具,在Ubuntu下可以直接用 apt-get install freerd ...
- Java中替代C# ref/out 关键字方案:
刚学习Java不久,今天遇到一个问题,需要在方法中修改传入的对象的值,确切的说是需要使用一个方法,创建一个对象,并把其引用返回,熟悉C#的我的第一反应就是C#中的ref/out关键字,结果发现Java ...