共计 6021 个字符,预计需要花费 16 分钟才能阅读完成。
CentOS7 下 Nginx+Tomcat 负载均衡及 Redis 共享 Session 解决方案
文件准备
nginx: nginx-1.10.3.tar.gz
tomcat8: apache-tomcat-8.0.43.zip
redis: redis-3.2.8.tar.gz
ruby(当使用 redis cluster 时需要): ruby-2.4.1.tar.gz
TomcatRedisSessionManager(From GitHub): TomcatRedisSessionManager-1.1.1.zip
jdk :jdk-8u131-linux-x64.tar.gz
环境安装
PS: 建议将所有文件下载后上传至 /usr/local/src ; 若无其他说明, 本教程所有操作均以 /usr/local/src 作为起手目录
redis
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make
建议安装后, 将 redis 移动到 /usr/local/redis3.2 或相似的好记的目录, 方便后续操作
安装后查看是否安装成功
cd src
./redis-server ../redis.conf
具体参考:
CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm
nginx
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install
tar -zxvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
./confignre --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make && make install
安装完成后, 进入 sbin 目录, 输入 nginx
默认端口 80, 尝试访问
nginx 源码安装较为复杂, 参考完整安装教程:
CentOS 7 下 Nginx 服务器的安装配置 http://www.linuxidc.com/Linux/2017-04/142986.htm
CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向 http://www.linuxidc.com/Linux/2017-04/142642.htm
CentOS6.9 编译安装 Nginx1.4.7 http://www.linuxidc.com/Linux/2017-06/144473.htm
tomcat
tar -zxvf apache-tomcat-8.0.43.zip
cd apache-tomcat-8.0.43
cd bin
./startup.sh
解压即安装, 启动后默认端口为 8080, 自行测试 server 是否正常开启, 若失败, 尝试以下命令
systemctl stop firewalld
systemctl stop iptabled
nginx+tomcat 集群搭建
复制一份 tomcat8
mv apache-tomcat-8.0.43 /usr/local/tomcat8/8081
cp /usr/local/tomcat8/8081 /usr/local/tomcat8/8082
修改 tomcat 的启动及关闭端口
更改配置文件
tomcat/conf/server.xml
更改关闭端口, 例如 8005->8015
<Server port="8005" shutdown="SHUTDOWN">
.....
更改启动端口, 例如 8080->8081
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
配置 nginx
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local]"$request" '
# '$status $body_bytes_sent"$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcatcluster{server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
server {listen 80;
server_name localhost;
charset utf-8;
#access_log logs/host.access.log main;
location / {proxy_pass http://tomcatcluster;
proxy_redirect default;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
}
}
其中核心是
upstream tomcatcluster{
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
定义一个 upstream 标识为 tomcatcluster;
server: 定义一个服务器
ip:port: 指定 URL
weight: 权重, 越大
location / {
proxy_pass http://tomcatcluster;
proxy_redirect default;
}
http:// 后接 upstream 指定的标识 , 如 tomcatcluster
启动 nginx
进入 nginx 目录, 比如我的 /usr/local/nginx
cd /usr/local/nignx
cd sbin
./nginx
启动前可使用 nignx -t
检验配置文件是否错误.
浏览器访问 80 端口, 若无意外, 则显示 tomcat 的欢迎界面, 于是为 tomcat 添加项目
修改 tomcat/webapps/ROOT
cd /usr/local/tomcat8/8081
cd webapps/ROOT
rm -rf *
vi index.jsp
输入以下内容:
<html>
<body>
<h1>This is tomcat 1 , sessionId: <%=session.getId()%></h1>
<% session.setAttribute("aa","guddqs"); session.setAttribute("bb","bbgudqs"); %>
</body>
</html>
类似的修改 8082, 要在 jsp 上区分出是哪个 tomcat 服务
修改后, 多次刷新页面, 轮次出现 2 个 tomcat 的页面. 至此 nginx+tomcat 负载均衡搭建完毕
redis 共享 session for tomcat
PS: 本教程采用 tomcat8, 并使用国外某大佬 github 项目, 对于 tomcat7 需要另一个 redis-session-manager.jar
准备文件
unzip TomcatRedisSessionManager-1.1.1.zip
cd TomcatRedisSessionManager-1.1.1
ls -l
total 740
-rw-r--r--. 1 root root 61829 Mar 19 2016 commons-logging-1.2.jar
-rw-r--r--. 1 root root 111892 Mar 19 2016 commons-pool2-2.4.1.jar
-rw-r--r--. 1 root root 533252 Feb 21 2016 jedis-2.8.0.jar
-rw-r--r--. 1 root root 1850 Nov 26 00:30 ReadMe.txt
-rw-r--r--. 1 root root 324 Nov 25 23:56 RedisDataCache.properties
-rw-r--r--. 1 root root 28807 Nov 26 00:49 TomcatRedisSessionManager-1.1.1.jar
其中 4 个 jar 包需要复制到 tomcat 的 lib 目录下
cp commons-logging-1.2.jar /usr/local/tomcat/8081/lib
cp commons-pool2-2.4.1.jar /usr/local/tomcat/8081/lib
.......
RedisDataCache.properties 需要复制到 tomcat 的 conf 下
cp RedisDataCache.properties /usr/local/tomcat/8081/conf
修改配置文件
context.xml
进入 tomcat 的 conf 目录, 修改 context.xml 文件
再<Context>
节点下加入
<Valve className="com.r.tomcat.session.management.RequestSessionHandlerValve" />
<Manager className="com.r.tomcat.session.management.RequestSessionManager" />
RedisDataCache.properties
然后修改之前复制到 conf 下的 RedisDataCache.properties 文件, 切记不可修改文件名
vi RedisDataCache.properties
- 1
单 redis 配置如下:
redis.hosts=127.0.0.1:6379
# Redis Password
redis.password=
# set true to enable redis cluster mode
redis.cluster.enabled=false
# Redis database (default 0)
#redis.database=0
# Redis connection timeout (default 2000)
#redis.timeout=2000
redis cluster 模式配置文件如下:
redis.hosts=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003,127.0.0.1:3004,127.0.0.1:3005
# Redis Password
redis.password=
# set true to enable redis cluster mode
redis.cluster.enabled=true
# Redis database (default 0)
#redis.database=0
# Redis connection timeout (default 2000)
#redis.timeout=2000
PS: redis.password 留空则等于无密码
类似的修改 8082 下的 tomcat 配置文件, 复制 jar 包, RedisDataCache.properties
最后重启 2 个 tomcat, 访问 80 端口, 刷新页面, 观察页面显示是否达到 2 个不同的 tomcat 服务单具有相同的 session id
小结
使用 nginx 反向代理到 2 个 tomcat 服务器, 仅需修改 tomcat 配置不同的端口, 以及为 nginx.conf 添加 upstream 配置并将反向代理指向 upstream 即可
而添加 tomcat 的 session 共享则利用了 tomcat 的提供的外部 session 存储机制接口, 而实现则使用了 redis 作为储存源. 从而实现了 session 共享.
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
Ubuntu 16.04 下安装 Tomcat 8.5.9 http://www.linuxidc.com/Linux/2017-06/144809.htm
Ubuntu 16.04 安装 Tomcat 8 图解 http://www.linuxidc.com/Linux/2017-10/147773.htm
Tomcat 单机多实例部署 - 多项目部署 http://www.linuxidc.com/Linux/2017-10/147259.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148311.htm