手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

CentOS7下Nginx+Tomcat负载均衡及Redis共享Session解决方案

[日期:2017-11-06] 来源:Linux社区  作者:guddqs [字体: ]

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

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款