基于Nginx实现Tomcat集群搭建

写在前面

在Linux下,使用Nginx的反向代理、负载均衡,可以增强服务器主机CPU的利用率,提交系统的并发量,加大系统的稳定性(一台Tomcat出现问题了,还有其他Tomcat支撑着系统的运行),同时使用Redis可以解决多台Tomcat之间Session和文件共享的问题,从而实现Tomcat集群的搭建。

配置环境:Centos6.5,Tomcat8.0+Jdk1.8+Redis-4.0.5+Nginx-1.12

文章对多台Tomcat共存、Nginx安装配置、Nginx实现集群以及Session、文件共享、Tomcat集群配置二级域名等方面做了说明。若未安装Redis,需先安装Redis。

准备Tomcat

官网下载 tomcat.tar.gz 并上传到服务器上。

解压:tar -vxf tomcat.tar.gz
解压两次获得两台Tomcat,修改端口,确保两台Tomcat对应的端口不冲突。

tomcat8.0.1端口:

tomcat8.0.2端口:

更改完端口后启动Tomcat,并测试能够正常访问,此时可以发现访问项目时得到的Session是不一样的。


Nginx的安装

Nginx下载:Nginx官网
1.说明:Nginx官网下载下来的是源码,Nginx的编译需要c++,同时prce(重定向支持)和openssl(https支持)也需要安装。因此安装Nginx之前需要在linux上先安装对应的环境。
[root@admin home]# yum install gcc-c++  
[root@admin home]# yum -y install pcre*  
[root@admin home]# yum -y install openssl* 
2.解压及编译
[root@admin home]# tar -zxvf nginx-1.12.2.tar.gz 
3.进入Nginx目录:
cd nginx-1.12.2
4.设置安装目录为/usr/local/nginx:
./configure --prefix=/usr/local/nginx
5.编译和安装:
[root@admin nginx-1.12.2]# make  
[root@admin nginx-1.12.2]# make install  
6.启动nginx服务,进入安装目录 /usr/local/nginx
[root@admin home]# cd /usr/local/nginx/sbin  
[root@admin sbin]# ./nginx 
通过ip访问,若出现Welcome欢迎页面,则表示安装成功。停止服务命令:killall nginx

配置Nginx

vim更改配置文件nginx/conf/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;
    include  /usr/local/nginx/conf/sites-enabled/*.conf; #加载配置文件,设置二级域名时使用

    sendfile        on;
    keepalive_timeout  65;

    upstream project_nginx{
        #服务器配置,weight越大越有机会被访问到,15秒内出现3次错误,接
        #下来30s内不再去访问该服务器
        server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=30s;
        server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=30s;
    }

    server {
        listen       80;
        server_name  域名;
        charset utf-8;
        #charset koi8-r;

        access_log logs/host_access.log;
        error_log logs/host_error.log;

        location / {
            proxy_set_header  Host $host:80; #端口跟上面的一致
            proxy_set_header  REMOTE-HOST $remote_addr;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_pass  http://project_nginx;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
修改完配置后,重启Nginx,测试 可以发现,Nginx将访问随机代理给了服务器,但访问项目得到的Session依旧还是不一样的。

Redis实现Session共享

1.说明:案例用的是Tomcat8.0,不同的Tomcat版本会有不同的jar包,这里提供Tomcat8.0版本jar包的下载。将jar包移动到Tomcat安装的目录的lib文件夹下(2台Tomcat都需要进行此操作)。
该实现方式支持在一台主机,多台Tomcat的环境下实现Session共享,对于多台主机,多台tomcat并不适合。
3.修改配置:
<Valve className="com.demo.redis_session.RedisSessionHandlerValve" />
<Manager className="com.demo.redis_session.RedisSessionManager"
         host="127.0.0.1"
         port="6379" 
         database="0"
         maxInactiveInterval="60" />
两台服务器配置完成后要记得重启,之后测试可发现,Nginx将访问随机代理给了服务器,得到的Session是一样的,清除Session时也是同时的,这样便实现了集群共享Session。

软链接实现文件共享

1.说明:此文件共享只在一台主机多个Tomcat情况下使用,不适合多台主机。
2.软链接实现:
ln -s /home/tomcat8.0.1/webapps/project/upload/ /home/tomcat8.0.2/webapps/project/
这里假设upload为文件上传文件夹,Tomcat8.0.1要存在upload文件夹,Tomcat8.0.2不需要upload文件夹,tomcat8.0.2使用软链接生成upload文件夹,类似于window系统下的快捷方式。也就是在Tomcat8.0.2下访问upload其实是访问Tomcat8.0.1下的upload文件夹。

在tomcat8.0.2/conf目录下修改context.xml,在<context></context>节点之间增加配置:
<Resources allowLinking="true" />
别忘了重启服务器,此时便实现了文件共享。

说说Tomcat集群配置二级域名

1.配置两台Tomcat的server.xml虚拟目录,在<Engine></Engine>结点之间配置虚拟主机
<Host name="二级域名"  appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">
      <Alias>二级域名</Alias>
      <Context path="" docBase="qgzx" reloadable="true"></Context>
</Host>
2.配置Nginx虚拟目录,更改配置文件nginx/conf/nginx.conf,在http{}下加载二级域名的配置文件目录。
include  /usr/local/nginx/conf/sites-enabled/*.conf; 
#加载配置文件,设置二级域名时使用
#include:表示请求时会将/usr/local/nginx/conf/sites-enabled 目录下的文件加载进来
#若没目录,则mkdir手动创建对应的目录
3.编写配置文件 demo_name.conf
upstream demo_nginx{
     #服务器配置,weight越大越有机会被访问到,15秒内出现3次错误,接
     #下来30s内不再去访问该服务器
     server localhost:8080 weight=1 max_fails=3 fail_timeout=30s;
     server localhost:8081 weight=1 max_fails=3 fail_timeout=30s;
}
server {
     listen       80;
     server_name  二级域名;  #跟tomcat配置时的二级域名一样
     charset utf-8;
     access_log logs/name_access.log;
     error_log logs/name_error.log;

     location / {
         proxy_set_header  Host $host:80; #端口跟上面的一致
         proxy_set_header  REMOTE-HOST $remote_addr;
         proxy_set_header  X-Real-IP $remote_addr;
         proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_pass  http://demo_nginx;
     }
}
别忘了重启Nginx。

最后再说说

到此,便实现了基于Nginx的Tomcat集群搭建,Session和文件共享以及集群下二级域名的配置。文章的具体细节如有问题,欢迎指出,以便一同探讨和学习,十分感谢。

猜你喜欢

转载自blog.csdn.net/hsf15768615284/article/details/78713166
今日推荐