(1)举个简单的例子,以tomcat为例,咱们都知道session存在于服务器端,对于不是分布式部署,整个系统的session都会是这惟一的服务器来管理。这点 没问题。可是对于分布式部署来讲,假设有tomcatA与tomcatB,但用户user访问系统时,经过负载均衡,此user访问了位于tomcatA上的应用。系统给此用户分配了一个session来标识用户身份,并返回sessionID给浏览器。这时user又向服务器发送个请求。假设这时候负载均衡到了tomcatB,可是此时tomcatB上并无存有user相应的session信息。根据通常应用的设置,会提示user从新登陆,试想下user就这样一直登陆,一直被提示未登陆,这样确定行不通。这就是session保持的问题。nginx
解决session保持有几种方法,例如nginx自带的ip_hash模块,session复制,以及使用相似redis这种缓存数据库来实现对session的统一管理。在这里介绍的是粘性session;redis
(2) 粘性session的概念:数据库
用户在持续访问系统时,根据粘性session,仍会被分配到上一次访问的服务器中。浏览器
(3)粘性session的配置:缓存
1.给nginx添加 nginx_upstream_jvm_route 模块tomcat
下载: http://down.51cto.com/data/910451服务器
安装 : 解压后,首先执行patch -p0 < /nginx_upstream_jvm_route/jvm_route.patch 补丁文件cookie
而后在./configure nginx时,–add-module=/nginx_upstream_jvm_routesession
2.配置nginx.conf负载均衡
server 192.168.10.63:8081 srun_id=tomcat0;
server 192.168.10.63:8088 srun_id=tomcat1;
jvm_route $cookie_JSESSIONID|sessionid reverse;
3.配置tomcat
在<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat0">处,添加 jvmRoute="tomcat0";
注:此处的jvmRoute的值应同nginx.conf中的srun_id的值 相对应。
4.从新启动nginx与tomcat,配置完成
(4)负载均衡优化配置
server 192.168.10.63:8081 srun_id=tomcat0 max_fails=3 fail_timeout=60s 上面max_fails=3 fail_timeout=15s两个参数表明在15s,如有3次失败链接,则在下个15s内再也不访问该服务器。