实现方式:
1.ip_hash(笨办法 ip哈希顾名思义是将特定ip分配到特定服务器,负载均衡效果比较一般)
upstream nginx.example.com {
server 127.0.0.1:8080;
server 127.0.0.1:808;
ip_hash;
}
server {
listen 80; location /
{
proxy_pass http://nginx.example.com;
}
}
2.存放redis(插件:支持tomcat7及以下(tomcat8暂不支持),前提安装redis)
插件github源码地址:https://github.com/jcoleman/tomcat-redis-session-manager.git
1> 在tomcat7 lib下放入
commons-pool2-2.0.jar;
tomcat-redis-session-manager-2.0.0.jar;
jedis-2.5.0.jar.
这三个文件
2> 在tomcat7的context.xml中加入如下内容:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.169.133"
port="6379"
database="0"
maxInactiveInterval="60" />
具体属性配置可参看RedisSessionManager的成员变量。
注意:多台服务器的tomcat7都需要如此配置。
实现原理:
1.正常session请求方式。
客户端请求服务器,服务器会分配一个JSESSIONID给客户端,保存在客户端cookie中。
每次客户端访问服务器session内容时,就会根据JSESSIONID获取服务器对应的内容。
当一个应用被部署到多个服务器时,同一个JSESSIONID去不同的服务器,明显是取不到相同的内容。
于是便有了下面的session共享一说。
2.session存放redis的方式:
将session的所有数据信息保存到redis中,每个客户端访问服务器都会拿着JSESSIONID去redis中获取session内容,服务器不一致了,但是redis是同一个。就有效的减轻了服务器的负担。
但是加大了redis数据库的负担,这时,就可以用到了redis的分库,主从复制等优化机制了。