失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > windows使用nginx+memcached实现负载均衡和session或者缓存共享

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

时间:2019-10-06 11:28:48

相关推荐

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

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

两台server

server1:115.29.186.215windows64位操作系统

server2:114.215.193.64windows32位操作系统

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

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

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

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

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

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

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

须要下载的资源有:

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

我下载的是稳定版本号Stableversionnginx/Windows-1.6.0pgp

2:memcached

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

32位memcached

/s/1nMej8

64位memcached

/s/1kTJrRa3

MemcachedSession共享组件+Sql

/s/1i3gkiNV

server一:

1:安装nginx

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

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

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

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

然后cmd->iisreset(2)mssql的

我将这个服务关掉或者

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

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

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

解压后使用cmd命令

进入到nginx文件夹

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

Nginx-sstop停止nginx

Nginx.exe运行ngxin

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

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

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

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

那么我们先来看配置文件

进入

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

我的配置内容是都有凝视

#usernobody;

worker_processes2;

#error_loglogs/error.log;

#error_loglogs/error.lognotice;

#error_loglogs/error.loginfo;

#pidlogs/nginx.pid;

events{

worker_connections1024;

}

http{

includemime.types;

default_typeapplication/octet-stream;

#设定请求缓冲设置開始

#server_names_hash_bucket_size128;

#client_header_buffer_size32k;

#large_client_header_buffers432k;

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

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

#设定请求缓冲设置结束

#log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'

#'$status$body_bytes_sent"$http_referer"'

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

#access_loglogs/access.logmain;

sendfileon;

tcp_nopushon;

#keepalive_timeout0;

keepalive_timeout65;

tcp_nodelayon;

fastcgi_connect_timeout300;

fastcgi_send_timeout300;

fastcgi_read_timeout300;

fastcgi_buffer_size64k;

fastcgi_buffers464k;

fastcgi_busy_buffers_size128k;

fastcgi_temp_file_write_size128k;

##cache配置##

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

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

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

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

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

proxy_busy_buffers_size128k;#高负荷下缓冲大小(proxy_buffers*2)

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

##cache结束##

#gzip压缩開始

gzipon;

gzip_min_length1k;

gzip_buffers48k;

gzip_http_version1.1;

gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;

gzip_disable"MSIE[1-6]\.";

#gzip压缩结束

#分发server配置開始

upstreammyCluster{

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

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

#详细能够百度

server115.29.186.215:811max_fails=2fail_timeout=5sweight=2;

server114.215.193.64:801max_fails=2fail_timeout=5sweight=1;

}

#分发server配置结束

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

includeE:/nginx/vhosts/*.conf;

}

以上是我的配置内容

当中最后的

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

includeE:/nginx/vhosts/*.conf;

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

所以我就分开分布配置

我选择当中一个进行解说

server{

#监听80port

listen80;

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

server_name*.ktf.hkktf.hk*.;

#charsetkoi8-r;

#access_loglogs/host.access.logmain;

#redirectservererrorpagestothestaticpage/50x.html

#错误页面配置

error_page404403500502503504/Page/Wrong.htm;

#denyaccessto.htaccessfiles,ifApache'sdocumentroot

#concurswithnginx'sone

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

location/Maps{

denyall;

}

#请求全部文件

location/{

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

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

proxy_redirectoff;

proxy_set_headerHost$host;

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

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

#proxy_cache_valid3011d;#设置失期时间,为30天

#proxy_cache_validany1m;

#expires30d;

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

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

proxy_set_headerX-Real-IP$remote_addr;

}

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

location/Admin{

proxy_passhttp://115.29.186.215:811;

proxy_redirectoff;

proxy_set_headerHost$host;

#请求静态文件设置

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

#proxy_cache_valid3011d;#设置失期时间。为30天

#proxy_cache_validany1m;

#expires30d;

#传递真实ip给分发server

proxy_set_headerX-Real-IP$remote_addr;

}

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

location/Resource{

proxy_passhttp://115.29.186.215:811;

proxy_redirectoff;

proxy_set_headerHost$host;

#请求静态文件设置

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

proxy_cache_valid3011d;#设置失期时间。为30天

proxy_cache_validany1m;

expires30d;

}

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

location/Scripts/kindeditor-4.1.7/attached{

proxy_passhttp://115.29.186.215:811;

proxy_redirectoff;

proxy_set_headerHost$host;

#请求静态文件设置

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

proxy_cache_valid3011d;#设置失期时间,为30天

proxy_cache_validany1m;

expires30d;

}

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

location~*\.ashx${

proxy_passhttp://115.29.186.215:811;

proxy_redirectoff;

proxy_set_headerHost$host;

#请求静态文件设置

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

proxy_cache_valid3011d;#设置失期时间,为30天

proxy_cache_validany1m;

expires30d;

}

}

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

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

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

location/Admin

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

及配置文件

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

location/Resource{proxy_passhttp://115.29.186.215:811;

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

以下配置memcached

同上也是将64位解压到E盘

更名为memcached

同理进入cmd:输入

1:E:

2:Cd:memcached

3:memcached.exe-dinstall

安装好服务后开启服务

4:memcached.exe-dstart

假设须要关闭则运行

memcached.exe-dstop|shutdown进行关闭

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

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

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

memcached.exe-p10000-m512-dstart,-p表示要改动的port,-m表示占用的最大内存(单位为M)。

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

仅仅须要用到1:SqlServer2:Enyim.Caching3:MemcachedProviders

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

然后仅仅需sql建表语句

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

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

好接下来使用Memched

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

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

我们看session机制的配置

打开站点的web.config

<configSections>

以下加入

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

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

<sectionGroupname="">

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

</sectionGroup>

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

在<configuration>

以下加入

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

<>

<memcached>

<servers>

<!--putyourownserver(s)here-->

<addaddress="115.29.186.215"port="11211"/>

<addaddress="114.215.193.64"port="11211"/>

</servers>

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

</memcached>

</>

<cacheProviderdefaultProvider="MemcachedCacheProvider">

<providers>

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

</providers>

</cacheProvider>

<connectionStrings>

<addname="SqlSessionServices"connectionString="DataSource=115.29.186.215,1128;InitialCatalog=JDF_Memcached;UserId=**;Password=**;"/>

</connectionStrings>

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

在<system.web>以下加入sessionState

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

<providers>

<addname="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或者缓存共享》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。