【环境描述】
- 以下环境是我亲测有效的搭建环境
- redis 下载地址:https://download.csdn.net/download/qq_37535558/12527340
- tomcat8.5.20和redis的工具jar包下载地址:https://download.csdn.net/download/qq_37535558/12527401
- nginx下载地址:https://download.csdn.net/download/qq_37535558/12527353
【实现达到的效果】
当客户端访问Nginx服务器时,Nginx负载均衡会自动将请求转发到TomcatA或TomcatB服务器,以减轻Tomcat压力,从而达到 Tomcat集群化部署,为了使各Tomcat之间共享同一个Session,将采用Redis缓存服务来集中管理Session存储。
- 配置三个tomcat可以正常运行web程序
tomcat8080:找到tomcat目录下的server.xml文件,查看链接端口,我这里设置的是8080 端口。分别设置如下:
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
tomcat8081:端口设置如下:
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"/>
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
tomcat8082端口设置如下:
<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1"/>
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
以上端口设置要确保系统中没有占用的端口。
做完上面步骤后,可以在网页上新建一个jsp 或则html,测试代码如下:
<html>
<head>
<meta charset="ISO-8859-1">
<title>tomcat</title>
</head>
<body>
<h3>tomcat8080</h3>
<p>session ------ ${sessionId }</p>
</body>
</html>
三个tomcat中依次添加如上图所示。配置好启动tomcat后,在网页上运行三个tomcat地址后会发现,此时三个的session是不同的
2.配置session共享
需要把上面所下载的jar包放入tomcat的lib下,然后在三个tomcat的conf文件夹下的context.xml中配置如下:
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!--host为redis的地址,prot为端口,如果有密码可以加上password,database表示数据库,最后的则表示多长时间清除session-->
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="127.0.0.1"
port="6379"
database="0"
maxInactiveInterval="60" />
</Context>
配置好后启动tomcat和redis,然后再次访问,会发现这时候无论访问那个tomcat,session都是一样的。这时候就达到session共享的情况了。
3.配置nginx的conf文件
配置代码如下图所示:
#服务器的集群
upstream mesh { #服务器集群名字
server 192.168.1.166:8080 weight=1; #服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 192.168.1.166:8081 weight=2;
server 192.168.1.166:8082 weight=3;
}
server {
listen 8088; #监听的端口,可以改成其他端口,请求为 localhost:8088,则交给192.168.1.166的服务器集群处理
server_name mesh; #当前服务的域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://mesh; #服务器集群名字
proxy_redirect default;
proxy_set_header Host $host:$server_port; #非80端口,用80端口时,不需要$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Real-User $remote_user;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; #解决getScheme,isSecure,sendRedirect
}
然后重新tomcat,启动nginx代理服务器。
nginx常用命令
#进入nginx目录
start nignx ---为开启nginx,可在日志查看是否开启成功
nginx -s -reload ---修改后重新加载
nginx -s stop ---强制退出,暴力退出
nginx -s quit ---执行完后退出
这时候我们就搭建成功了。可以流畅的让客户使用程序了
4.小编再搭建的时候还遇到一个问题。这里跟大家说一下
我用的还是传统的jsp页面,引入的js等静态数据无法在客户端被读取,我的项目中是用的freamake标签${WEBROOT}动态获取的。找到访问请求时拼接的资源,改成配置。在配置里把路径配成相对路径。这时候就能完美运行了