Nginx+Tomcat+Memcache实现负载均衡及Session共享
2018-03-09 12:02
711 查看
第一部分 环境介绍
部署环境:
Host1:Nginx、Memcached、Tomcat1
Host2:Tomcat2
Tomcat_version:8.0.38
第二部分 Nginx+Tomcat实现负载均衡
1、nginx及tomcat的安装省略
2、nginx负载均衡配置:
http标签中定义tomcat集群:
关于nginx负载均衡的策略,有以下几种方式:
2.1 ip_hash:
根据客户端地址,同一个ip地址分配给同一台后段服务器处理,这样可以解决session的问题。但是如果该后端服务器宕掉,则session会失效。
缺点:局域网内的用户使用的是同一个公网IP,这对于ip_hash来说,会被认为是同一个客户端,因此总是会将这个公网ip的请求交给同一个后端服务器来处理,因此起不到负载均衡的作用。
2.2 轮询:
每一个请求,按照时间顺序,逐一分配给后端不同的服务器。
缺点:需要对后端服务器做session共享。
2.3 权重:
每个请求,根据后端服务器的权重值来转发。权重越大,表明该服务器处理能力相对越高。主要用于后端服务器性能不同的情况。
第三部分 利用MSM框架实现session共享
Github项目地址:https://github.com/magro/memcached-session-manager
1、msm框架主要使用缓存(如memcache、redis)来存储session信息,后端服务器都可以从该缓存中读写session。
2、tomcat序列化(Serializable)策略介绍:
序列化是指将对象以字符串形式在网络上传输、存储、读取的过程。
java有以下几种序列化框架:
kryo-serializer
javolution-serializer
xstream-serializer
flexjson-serializer
每种序列化框架需要的依赖jar包不同,本例使用javolution框架
3、准备需要的jar包:
Github上提供了下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
本例需要的jar包及版本如下:
asm-5.1.jar
minlog-1.3.0.jar
javolution-5.5.1.jar
reflectasm-1.11.3.jar
msm-javolution-serializer-1.9.5.jar
memcached-session-manager-1.9.5.jar
memcached-session-manager-tc8-1.9.5.jar
注意:对各jar的版本兼容性要求极高!
将以上jar包放在tomcat/lib/目录下。
4、安装memcached,启动memcached:
/usr/local/memcached/bin/memcached -m 512 -d -u memcache -p 11011 -c 1024
-m表示分配内存大小
-d表示后台运行
-u表示以某一用户运行
-p表示监听的端口号
-c表示接受的连接数
tomcat/conf/context.xml配置:
<Context>标签中添加如下内容:
以上配置后,重启tomcat即可。
参考:http://blog.csdn.net/remote_roamer/article/details/51133790
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ff3b1d; background-color: #000000 }
span.s1 { }p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #29f914; background-color: #000000 }
span.s1 { }
部署环境:
Host1:Nginx、Memcached、Tomcat1
Host2:Tomcat2
Tomcat_version:8.0.38
第二部分 Nginx+Tomcat实现负载均衡
1、nginx及tomcat的安装省略
2、nginx负载均衡配置:
http标签中定义tomcat集群:
upstream tomcat_server { server 101.200.229.38:8080; server 101.200.162.214:8080; }server中设置代理,将请求转发给后端tomcat集群处理:
server { listen 80; server_name www.xxx.com; location / { proxy_pass http://tomcat_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
关于nginx负载均衡的策略,有以下几种方式:
2.1 ip_hash:
根据客户端地址,同一个ip地址分配给同一台后段服务器处理,这样可以解决session的问题。但是如果该后端服务器宕掉,则session会失效。
缺点:局域网内的用户使用的是同一个公网IP,这对于ip_hash来说,会被认为是同一个客户端,因此总是会将这个公网ip的请求交给同一个后端服务器来处理,因此起不到负载均衡的作用。
2.2 轮询:
每一个请求,按照时间顺序,逐一分配给后端不同的服务器。
缺点:需要对后端服务器做session共享。
2.3 权重:
每个请求,根据后端服务器的权重值来转发。权重越大,表明该服务器处理能力相对越高。主要用于后端服务器性能不同的情况。
第三部分 利用MSM框架实现session共享
Github项目地址:https://github.com/magro/memcached-session-manager
1、msm框架主要使用缓存(如memcache、redis)来存储session信息,后端服务器都可以从该缓存中读写session。
2、tomcat序列化(Serializable)策略介绍:
序列化是指将对象以字符串形式在网络上传输、存储、读取的过程。
java有以下几种序列化框架:
kryo-serializer
javolution-serializer
xstream-serializer
flexjson-serializer
每种序列化框架需要的依赖jar包不同,本例使用javolution框架
3、准备需要的jar包:
Github上提供了下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
本例需要的jar包及版本如下:
asm-5.1.jar
minlog-1.3.0.jar
javolution-5.5.1.jar
reflectasm-1.11.3.jar
msm-javolution-serializer-1.9.5.jar
memcached-session-manager-1.9.5.jar
memcached-session-manager-tc8-1.9.5.jar
注意:对各jar的版本兼容性要求极高!
将以上jar包放在tomcat/lib/目录下。
4、安装memcached,启动memcached:
/usr/local/memcached/bin/memcached -m 512 -d -u memcache -p 11011 -c 1024
-m表示分配内存大小
-d表示后台运行
-u表示以某一用户运行
-p表示监听的端口号
-c表示接受的连接数
tomcat/conf/context.xml配置:
<Context>标签中添加如下内容:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11011" sticky="false" sessionBackupAsync="false" failoverNodes="" sessionBackupTimeout="100000" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
以上配置后,重启tomcat即可。
参考:http://blog.csdn.net/remote_roamer/article/details/51133790
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #ff3b1d; background-color: #000000 }
span.s1 { }p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #29f914; background-color: #000000 }
span.s1 { }
相关文章推荐
- Nginx+Tomcat+Memcached 集群Session共享[memcached服务安装、tomcat使用memcache存储session、nginx安装配置实现tomcat负载均衡]
- Nginx+Tomcat+Memcache实现负载均衡及Session共享
- 转 tomcat+nginx+redis实现均衡负载、session共享(二)
- tomcat+nginx+redis实现均衡负载、session共享(一)
- 详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结
- Nginx+Tomcat+Redis实现负载均衡与Session共享之三 — Gradle下载配置
- tomcat+nginx+redis实现均衡负载、session共享
- tomcat+nginx+redis实现均衡负载、session共享
- 详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结
- tomcat+nginx+redis实现均衡负载、session共享(一)
- Apache + tomcat实现高并发负载均衡方案(四)----实现session共享(memcache)的集群
- tomcat+nginx+redis实现均衡负载、session共享(一)
- Centos下Nginx+Apache+Mysql+Memcache实现多负载均衡与Session共享
- tomcat+nginx+redis实现均衡负载、session共享---让Tomcat把会话Session保存到Redis数据库。
- tomcat+nginx+redis实现均衡负载、session共享(二)
- tomcat+nginx+redis实现均衡负载、session共享(二)
- nginx+tomcat+redis(session共享)实现负载均衡,动静分离
- tomcat+nginx+redis实现均衡负载、session共享(一)
- tomcat+nginx+redis实现均衡负载、session共享(一)
- Nginx+Tomcat+Redis实现负载均衡与Session共享之五 — Nginx+Tomcat+Redis实现Session共享