windows使用nginx+memcached实现负载均衡和session或者缓存共享
2020-12-13 04:02
标签:负载均衡 memcached windows session nginx windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台服务器 服务器1:115.29.186.215 windows2008 64位操作系统 服务器2:114.215.193.64 windows2008 32位操作系统 其中服务器1同时做nginx负载均衡服务器 使用概要:由于两台服务器;所以数据库连接可以使用一台服务器; 由于本人使用的ibatis框架;所以在数据库层使用ibatis Cache 这样就可以使用一台sql服务器;两台服务器访问都是缓存数据; 只是要解决一台缓存清空 另外一台服务器缓存也需要及时更新的问题,目前我们是使用webservice进行相关远程服务器进行缓存清空; 或者是使用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 64位memcached http://pan.baidu.com/s/1kTJrRa3 Memcached Session共享组件+Sql http://pan.baidu.com/s/1ntBMo5r 服务器一: 1:安装nginx 由于要使用域名直接访问nginx如ww.kth.hk; 所以nginx需要使用80端口;请将80端口添加到防火墙过滤;所以系统里面使用80端口的都需要换 否则nginx.exe执行会报错下面操作; 一般系统用到了80端口的有:(1)iis里面的网站的端口 然后cmd->iisreset(2)mssql的 我将这个服务关掉 或者 如果还是不行 则使用cmd命令看下那些东西有用80端口 这个可以百度下 本次将下载文件解压到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跟后端服务器连接超时时间(代理连接超时) proxy_read_timeout 60;#连接成功后,后端服务器响应时间(代理接收超时) proxy_send_timeout 5; #后端服务器数据回传时间(代理发送超时) proxy_buffer_size 16k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 64k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 128k;#高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 128k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传 ##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压缩结束 #分发服务器配置开始 upstream myCluster { #将要跳转的两台服务器的域名端口或者是ip和端口 #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; } #分发服务器配置结束 # 包含所有的虚拟主机的配置文件 include E:/nginx/vhosts/*.conf; } 以上是我的配置内容 其中最后的 # 包含所有的虚拟主机的配置文件 include E:/nginx/vhosts/*.conf; 是由于我有很多网站 所以每个网站的配置内容都不一样 所以我就分开分布配置 我选择其中一个进行讲解 server { #监听80端口 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 / { #请求动态文件设置 不进行缓存,直接转到后端服务器 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给分发服务器 获取真实访问用户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给分发服务器
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; } } 由于图片没有单独做图片服务器;所以我就重定向后台只能跳转到 http://115.29.186.215:811这台服务器上面及配置文件 #请求包含Admin带头的所有文件 location /Admin 同理;前台获取页面的时候 也强制跳转到http://115.29.186.215:811这台服务器上面 及配置文件 #请求包含Resource带头的所有文件 location /Resource {proxy_pass http://115.29.186.215:811; 以上是nginx配置 更加详细的可以百度 下面配置memcached 同上 也是将64位解压到E盘 更名为memcached 同理进入cmd :输入 1:E: 2:Cd: memcached 3:memcached.exe -d install 安装好服务后 开启服务 4:memcached.exe -d start 如果需要关闭则执行 memcached.exe -d stop|shutdown 进行关闭 设置memcached,启动该服务后,memcached服务默认占用的端口是11211, 请将11211添加到防火墙过滤;占用的最大内存默认是64M。 如果需要修改这两个参数,比如修改端口为10000,内存为512,则输入: memcached.exe -p 10000 -m 512 -d start , -p 表示要修改的端口, -m表示占用的最大内存(单位为M)。 好 memcache配置好了,那么我们将要使用memcache的session模块;下载上面的资源文件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 在 下面添加
在
下面添加
在
writeExceptionsToEventLog="false" socketConnectTimeout="1000" socketTimeout="1000" /> 以上就可以使用memcache的session模块了 使用的方式还是像以前一样 Session[“XXX”] 这样就实现了多台服务器共享session 服务器二: 不需要安装nginx;只需要nginx服务器需要安装;其他的负载均衡服务器不需要 由于是32位的 安装1中的 流程一样安装 至此 配置完成 使用到现在暂时没有发现什么问题 windows使用nginx+memcached实现负载均衡和session或者缓存共享,搜素材,soscw.com windows使用nginx+memcached实现负载均衡和session或者缓存共享 标签:负载均衡 memcached windows session nginx 原文地址:http://blog.csdn.net/yefighter/article/details/37512645
文章标题:windows使用nginx+memcached实现负载均衡和session或者缓存共享
文章链接:http://soscw.com/essay/28773.html