Nginx +Tomcat 集群+memcached 实现负载均衡和session共享[实践篇Windows]
2016-10-17 16:29
946 查看
实践环境
打包下载
nginx安装
Nginxtomcat集群 负载均衡配置
tomcatmemcached实现session共享
测试Nginx和Tomcat
Manager 节点详细属性补充
nginx 配置详细补充 可以实现动静态分离
jdk 1.7
tomcat 7.0
nginx 1.10
memcached 1.4.4
感谢:http://download.csdn.net/download/xu_xiao_ji/9550578
将安装包ngin解压到X:/目录
启动Nginx:进入X:/nginx目录,执行命令:start nginx.exe,弹出屏会一闪而逝。接着输入tasklist /fi “imagename eq nginx.exe”,出现如下内容,表示nginx已正常启动啦!在浏览器输入http://localhost,可以看到Nginx的欢迎页。
更多Nginx常用命令:
停止Nginx:nginx.exe -s stop|quit
重启Nginx:nginx.exe -s reload
查看Nginx版本:nginx.exe -v
修改文件$NGINX_HOME/conf/nginx.conf。
2 nginx /conf/nginx.conf配置修改
3 设置tomcat root 的index.jsp 添加tomcat1字样 tomcat2添加tomcat2字样
开启nginx tomcat1 tomcat2 如果访问localhost 刷新反复出现tomcat1 tomcat2 则配置成功
再次提醒不同序列化方式需要的jar包不一样 而且jar的版本也决定成败
2 配置tomcat/bin/context.xml 添加如下节点
我这里端口改了默认是11211
我这里使用的kryo序列化方案 不同序列化transcoderFactoryClass配置不同
Tomcat1
Tomcat2
通过浏览器访问Nginx服务器,如下图将访问地址改成Nginx所在服务器。
反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。
类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
2.memcachedNodes 必须
memcached节点:此属性应该包含所有运行的 memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为::, 多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes=”n1:app01:11211,n2:app02:11211”,如果只 有单个的memcached节点,则是可选项,只需配置:即可,形 如:memcachedNodes=”localhost:11211”。
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。
3.failoverNodes 可选项
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
4.username 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
5.password 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
6.memcachedProtocol 可选项
定义memcached协议,默认使用text文本,出属性指明memcached使用的存储协议。只支持text或者binary。
7.sticky 可选项
定义session方式为黏性或非黏性,默认为true,多个tomcat时需使用非黏性
8.lockingMode 可选项
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,知道请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
9.requestUriIgnorePattern 可选项
此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用 上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要 触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。 如:”.*.(png|gif|jpg|css|js)$”
10.sessionBackupAsync 可选项
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
11.backupThreadCount 可选项
用来异步保存Session的线程数,(如果sessionBackupAsync=”true”)。默认值为cup的内核数。
12.sessionBackupTimeout 可选项
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync=”false”是起作用。默认100毫秒
13.operationTimeout 可选项
从1.6.0版开始使用, 默认值为1000
14.sessionAttributeFilter 可选项
此属性是用来控制Session 中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如 sessionAttributeFilter=”^(userName|sessionHistory)$” 指定了只有”userName”和”sessionHistory”属性保存到Memcached中。依赖于选择的序列化策略。
15.transcoderFactoryClass 可选项
此属性值是创建序列化和反序列化 保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了 de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他 packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm- javolution-serializer.
默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory
16.copyCollectionsForSerialization 可选项
默认值为false。
17.customConverter 可选项
自己定义特殊的类注册到kryo自定义转换器中,实现序列化
18.enableStatistics 可选项
用来指定是否进行统计。 默认值为true。
19.enabled 可选项
指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。 默认值为true。
打包下载
nginx安装
Nginxtomcat集群 负载均衡配置
tomcatmemcached实现session共享
测试Nginx和Tomcat
Manager 节点详细属性补充
nginx 配置详细补充 可以实现动静态分离
实践环境
windows10 64位jdk 1.7
tomcat 7.0
nginx 1.10
memcached 1.4.4
打包下载
版本一致性很重要 不然会出现一系列莫名其妙的问题 这个我能用不代表你能使用感谢:http://download.csdn.net/download/xu_xiao_ji/9550578
nginx安装
http://www.oschina.net/question/1014681_107718?fromerr=8MXDvfOJ将安装包ngin解压到X:/目录
启动Nginx:进入X:/nginx目录,执行命令:start nginx.exe,弹出屏会一闪而逝。接着输入tasklist /fi “imagename eq nginx.exe”,出现如下内容,表示nginx已正常启动啦!在浏览器输入http://localhost,可以看到Nginx的欢迎页。
更多Nginx常用命令:
停止Nginx:nginx.exe -s stop|quit
重启Nginx:nginx.exe -s reload
查看Nginx版本:nginx.exe -v
修改文件$NGINX_HOME/conf/nginx.conf。
Nginx+tomcat集群 负载均衡配置
这里我就一台计算机搭建两个tomcat 所有tomcat2的几个端口不能和tomcat1重复 如果是两天计算机跳过这里2 nginx /conf/nginx.conf配置修改
3 设置tomcat root 的index.jsp 添加tomcat1字样 tomcat2添加tomcat2字样
开启nginx tomcat1 tomcat2 如果访问localhost 刷新反复出现tomcat1 tomcat2 则配置成功
tomcat+memcached实现session共享
1 将需要的jar放入tomcat/lib下再次提醒不同序列化方式需要的jar包不一样 而且jar的版本也决定成败
2 配置tomcat/bin/context.xml 添加如下节点
我这里端口改了默认是11211
我这里使用的kryo序列化方案 不同序列化transcoderFactoryClass配置不同
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11210" failoveNodes="n1" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
测试Nginx和Tomcat
测试Nginx是否实现负载均衡已经Tomcat能否共享session信息,分别在两个Tomcat服务器的\webapps\ROOT目录下新建两个test.jsp页面,内容如下:Tomcat1
<span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%> SessionID:<%=session.getId()%> <BR> SessionIP:<%=request.getServerName()%> <BR> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 1111111"); %> </span>
Tomcat2
<span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%> SessionID:<%=session.getId()%> <BR> SessionIP:<%=request.getServerName()%> <BR> SessionPort:<%=request.getServerPort()%> <% out.println("This is Tomcat Server 2222222"); %></span>
通过浏览器访问Nginx服务器,如下图将访问地址改成Nginx所在服务器。
反复刷新浏览器,如果SessionID一直不变,下面的SessionPort的内容在不断变化则说明配置成功。
Manager 节点详细属性补充
1.className 必须类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
2.memcachedNodes 必须
memcached节点:此属性应该包含所有运行的 memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为::, 多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes=”n1:app01:11211,n2:app02:11211”,如果只 有单个的memcached节点,则是可选项,只需配置:即可,形 如:memcachedNodes=”localhost:11211”。
如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase buckets连接需要遵循memcached协议,传输数据通过二进制流方式。
3.failoverNodes 可选项
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
4.username 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
5.password 可选项
从1.6.0版开始使用,并且是可选的。用来进行membase bucket或者SASL验证,密码可以为空。
6.memcachedProtocol 可选项
定义memcached协议,默认使用text文本,出属性指明memcached使用的存储协议。只支持text或者binary。
7.sticky 可选项
定义session方式为黏性或非黏性,默认为true,多个tomcat时需使用非黏性
8.lockingMode 可选项
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,知道请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
9.requestUriIgnorePattern 可选项
此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用 上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要 触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。 如:”.*.(png|gif|jpg|css|js)$”
10.sessionBackupAsync 可选项
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
11.backupThreadCount 可选项
用来异步保存Session的线程数,(如果sessionBackupAsync=”true”)。默认值为cup的内核数。
12.sessionBackupTimeout 可选项
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync=”false”是起作用。默认100毫秒
13.operationTimeout 可选项
从1.6.0版开始使用, 默认值为1000
14.sessionAttributeFilter 可选项
此属性是用来控制Session 中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如 sessionAttributeFilter=”^(userName|sessionHistory)$” 指定了只有”userName”和”sessionHistory”属性保存到Memcached中。依赖于选择的序列化策略。
15.transcoderFactoryClass 可选项
此属性值是创建序列化和反序列化 保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了 de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他 packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm- javolution-serializer.
默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory
16.copyCollectionsForSerialization 可选项
默认值为false。
17.customConverter 可选项
自己定义特殊的类注册到kryo自定义转换器中,实现序列化
18.enableStatistics 可选项
用来指定是否进行统计。 默认值为true。
19.enabled 可选项
指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。 默认值为true。
nginx 配置详细补充 可以实现动静态分离
##定义nginx运行的用户各用户组 user nginx nginx; ##nginx进程数,建议设置与cpu核心数一致 worker_processes 1; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; ##全局错误日志定义类型[ debug | info | notice | warn | error | crit ] #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; ##一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。 worker_rlimit_nofile 65535; ##进程文件 #pid logs/nginx.pid; ##工作模式与连接数上限 events { ##参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。 use epoll; ##单个进程的最大连接数 worker_connections 65535; } ##设置http服务器 http { ##引入外置配置文件 include /etc/nginx/conf.d/*.conf; ##文件扩展名与文件类型映射表 include mime.types; ##默认文件类型 default_type application/octet-stream; ##默认编码 #charset utf-8; ##服务器名字的hash表大小 #server_name_hash_bucket_size 128; ##上传文件大小限制 建议打开 client_header_buffer_size 32K; ##设定请求缓存 建议打开 large_client_header_buffers 4 64K; ##最大缓存 client_max_body_size 20M; client_header_timeout 20; ##日志格式设定 #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指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如 果图片显示不正常把这个改成off。 sendfile on; ##开启目录列表访问,合适下载服务器,默认关闭 #autoindex on; ##防止网络阻塞 建议打开 tcp_nopush on; ##防止网络阻塞 建议打开 tcp_nodelay on; ##长链接超时时间,单位是秒,为0,无超时 keepalive_timeout 65; ##gzip模块设置 ##开启gzip压缩输出 建议打开 gzip on; ##最小压缩文件大小 建议打开 gzip_min_length 1k; ##压缩缓冲区 建议打开 gzip_buffers 4 16k; ##压缩版本(默认1.1,前端如果squid2.5请使用1.0) 建议打开 gzip_http_version 1.0; ##压缩等级 gzip_comp_level 2; 建议打开 ##压缩类型,默认就已经包含了textxml,默认不用写,写上去也没有问题,会有一个warn 建议打开 gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; ##开启连接限制ip连接数使用 #limit_zone crawler $binary_remote_addr 10m; ##反向代理缓存Proxy Cache配置 proxy_temp_path /opt/cache/nginx/temp; proxy_cache_path /opt/cache/nginx/cache levels=1:2 keys_zone=infcache:600m inactive=1d max_size=2g; proxy_cache_path /opt/cache/nginx/proxy_cache_image levels=1:2 keys_zone=cache_image:3000m inactive=1d max_size=10g; proxy_connect_timeout 30; proxy_read_timeout 60; proxy_send_timeout 20; proxy_buffer_size 96k; proxy_buffers 8 256k; proxy_busy_buffers_size 512k; proxy_temp_file_write_size 512k; #proxy_cache_path配置 #keys_zone=infcache:600m 表示这个zone名称为infcache,分配的内存大小为600MB #/opt/cache/nginx/cache 表示cache这个zone的文件要存放的目录 #levels=1:2 表示缓存目录的第一级目录是1个字符,第二级目录是2个字符,即/data/ngx_cache/cache1/a/1b这种形式 #inactive=1d 表示这个zone中的缓存文件如果在1天内都没有被访问,那么文件会被cache manager进程删除掉 #max_size=10g 表示这个zone的硬盘容量为10GB ##FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。 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; ##载均衡,weight权重,权值越高被分配到的几率越大 upstream myserver{ server 192.168.1.10:8080 weight=3; server 192.168.1.11:8080 weight=4; server 192.168.1.12:8080 weight=1; } ##虚拟主机配置 server { ##监听端口 listen 80; ##域名可以有多个,用空格隔开 server_name localhost; #charset koi8-r; ##定义本虚拟主机的访问日志 #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } ##图片缓存时间设置 location ~.*.(gif|jpg|jpeg|png|bmp|swf)${ expires 10d; } ##js和CSS缓存时间设置 location ~.*.(js|css)?${ expires 1h; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html #error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} ##对 "/" 启用反向代理 location / { ##或者使用 #proxy_pass http://myserver; proxy_pass http://127.0.0.1:88; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以下是一些反向代理的配置,可选。 proxy_set_header Host $host; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } ##设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file confpasswd; #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。 } ##本地动静分离反向代理配置 #所有jsp的页面均交由tomcat或resin处理 location ~ .(jsp|jspx|do)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; } ##所有静态文件由nginx直接读取不经过tomcat或resin location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 15d; } location ~ .*.(js|css)?$ { expires 1h; } } }
相关文章推荐
- Windows+Nginx+Tomcat搭建负载均衡和集群环境实现session共享
- Windows环境下Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)
- Nginx +Tomcat 集群+memcached 实现负载均衡和session共享[理论篇]
- Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)
- Nginx+tomcat+redis集群共享session实现负载均衡
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- 解剖Nginx:linux+tomcat+nginx+memcached实现负载均衡以及session共享
- Nginx+memcached+tomcat配置集群session共享负载均衡
- Nginx+Tomcat+Memcached 集群Session共享[memcached服务安装、tomcat使用memcache存储session、nginx安装配置实现tomcat负载均衡]
- nginx、memcached、tomcat 负载均衡和集群配置,session共享
- Nginx+Tomcat+Memcached集群Session共享(windows)
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
- Nginx+Tomcat+Memcached 实现集群部署时Session共享
- Nginx+Tomcat+Memcached实现tomcat集群和session共享