nginx+tomcat+redis负载均衡
(一)软件版本
nginx:nginx-1.12.2
tomcat:apache-tomcat-7.0.57
redis:Redis 3.2
(二)配置
1.nginx
配置负载均衡服务器
upstream sampou.com {
server 192.168.0.1:7084;
server 192.168.0.2:8084;
}
location / {
proxy_pass http://sampou.com;
proxy_redirect default;
}
2.tomcat
我这里使用了两个tomcat,所以需要配置两个tomcat的端口,不要重复。
首先,配置conf/context.xml,在Context标签内添加redis支持:
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager" host="192.168.0.3" password="123456" port="6379" database="0" maxInactiveInterval="60" />
host:redis服务器IP地址,password:redis服务器密码,port:redis服务器端口(这里使用的是默认端口)。
tomcat2配置与tomcat1的配置相同,使用的都是同一个redis服务器。
这里使用了tomcat-redis集成插件,RedisSessionHandlerValve路径要填写对,使用了如下6个jar包:
tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar
tomcat-juli.jar
tomcat-juli-adapters.jar
commons-pool-1.6.jar
commons-pool2-2.0.jar
jedis-2.2.1.jar
其中jedis-2.2.1.jar高版本的jedis不能用,存在版本兼容的问题,这一点我不太喜欢,而且在版本兼容上费了很大功夫去解决。
这些jar文件需要放到tomcat/lib目录下。
(三)redis
之前在网上找到的都是没有绑定redis的IP和配置密码,但是经过测试,打开浏览器会有问题,但是网页上也提供了四种解决方案,其中两种就是protected-mode设置为“no”,
另一种就是redis绑定ip或者设置密码,经测试只绑定IP是不可以的还是设置密码才行。
(四)运行
启动nginx、redis、tomcat服务,浏览器运行就可以看到效果。
我自己的tomcat下放了一个jsp,记录了session的id
<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <table align="centre" border="1"> <tr> <td>Session ID</td> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> sessionID:<%=session.getId()%> <br> SessionIP:<%=request.getServerName()%> <br> SessionPort:<%=request.getServerPort()%> <% //为了区分,第二个可以是111 out.println("This is Tomcat Server 111"); %>
以上配置只是简单的达到负载均衡,nginx的高级用法有兴趣的童鞋可以去研究,另外关于redis的session共享问题,我觉得与tomcat的集成不太友好,
尤其jar就是一个问题。
对于企业级别的session共享,之后的文章会进一步去研究。
在这方面有研究的童鞋欢迎指点一二。