在多台Linux服务器中使用nginx分布式部署tomcat项目

今天需要分布式部署tomcat项目,把中间的过程记录下来,做一个总结。

首先先介绍搭建的环境:

IP 安装服务
192.168.128.223 Nginx、tomcat
192.168.128.222 tomcat

这里我就举个例子,使用两台服务器,实现Nginx代理两个服务器。下面提供了其中要用到的安装包,省的大家花重复时间去找。

链接: https://pan.baidu.com/s/1Q13owPv_RwPQZqLMFTq1ow

提取码: kvmp

 

接下来我们开始上手部署

1、在222与223服务器中要安装tomcat

安装tomcat这里就不详细介绍了,不是这次的重点,网上有挺多的教程。

 

2、修改tomcat的默认首页内容

这里为了等一下看到我们分布式部署后轮询效果,我们需要修改各自tomcat的默认首页内容。

比如在223服务器中:

进入到安装好的tomcat中,修改 webapps/ROOT/index.jsp 界面的内容:

vim webapps/ROOT/index.jsp

在多台Linux服务器中使用nginx分布式部署tomcat项目

修改内容如下:

在多台Linux服务器中使用nginx分布式部署tomcat项目

在前面我们添加333来区分。我们访问 192.168.128.223:8080 效果如下:

在多台Linux服务器中使用nginx分布式部署tomcat项目

同样的操作将222服务器中的tomcat首页也进行修改:

在多台Linux服务器中使用nginx分布式部署tomcat项目

 

3、在223服务器中安装Nginx

3.1安装编译工具及库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

在多台Linux服务器中使用nginx分布式部署tomcat项目

3.2再下载PCRE

PCRE 是为了让 Nginx 可以支持 Rewrite 功能。首先将网盘中的 pcre-8.35.tar.gz 文件通过XFTP上传到 /usr/local/src 中:

cd /usr/local/src/

在多台Linux服务器中使用nginx分布式部署tomcat项目

将这个tar包解压:

tar -zxvf pcre-8.35.tar.gz

在多台Linux服务器中使用nginx分布式部署tomcat项目

3.3 PCRE进行编译安装

进入pcre的安装目录:

cd pcre-8.35

编译:

./configure

在多台Linux服务器中使用nginx分布式部署tomcat项目

安装:

make && make install

在多台Linux服务器中使用nginx分布式部署tomcat项目

成功以后可以查看pcre的版本:

pcre-config --version

在多台Linux服务器中使用nginx分布式部署tomcat项目

3.4 安装Nginx

使用Xftp将 nginx-1.12.2.tar.gz 文件导入文件夹中,将其解压:

在多台Linux服务器中使用nginx分布式部署tomcat项目

进入安装目录:

cd nginx-1.12.2

编译安装:

./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35

在多台Linux服务器中使用nginx分布式部署tomcat项目

make

在多台Linux服务器中使用nginx分布式部署tomcat项目

make install

在多台Linux服务器中使用nginx分布式部署tomcat项目

都安装完后可以查看nginx的版本:

/usr/local/webserver/nginx/sbin/nginx -v

在多台Linux服务器中使用nginx分布式部署tomcat项目

3.5 启动 Nginx 查看默认网页

前面看到版本后说明我们安装完成,接下去我们启动nginx看看是否可以正常启动。

/usr/local/webserver/nginx/sbin/nginx

在多台Linux服务器中使用nginx分布式部署tomcat项目

然后在浏览器中打开,通过 192.168.128.223:80 ,若能看到下面界面说明安装成功。

在多台Linux服务器中使用nginx分布式部署tomcat项目

3.6 修改nginx配置信息

接下来就是重头戏了,修改nginx的配置信息,添加部署的服务器,将他们产生联系。

我们通过下面指令进入nginx的conf文件,我们修改的就是nginx.conf文件:

cd /usr/local/webserver/nginx/conf/

在多台Linux服务器中使用nginx分布式部署tomcat项目

修改配置文件:

vi ./nginx.conf

在多台Linux服务器中使用nginx分布式部署tomcat项目

修改的内容中最重要的就是如下:

在多台Linux服务器中使用nginx分布式部署tomcat项目

 

之前还配置了错误日志与指定pid存放路径,完全的配置文件如下:

#user  nobody;
worker_processes  1;

#指定错误日志存放的路径,错误日志记录级别可选项为:[debug|info|notice|warn|error|crit],默认是crit,记录的日志数量从crit到debug,由少到多
error_log  /usr/local/webserver/nginx/logs/nginx_error.log crit;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
#指定pid存放的路径
pid /usr/local/webserver/nginx/nginx.pid;

events {
    # 使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeeBSD系统推荐采用kqueue模型
    use epoll;
    # 允许的连接数
    worker_connections  1024;
}

#遵循http协议的服务器全局设置
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;

    #upstream设置,设置代理服务器(负载均衡池),默认的负载均衡方式是轮询,另外一种是ip_hash
    upstream tomcat_server {

         server 192.168.128.222:8080 weight=1;

         server 192.168.128.223:8080 weight=1;

    }

    #gzip  on;
    #server虚拟主机设置,可以设置多个:基于IP的虚拟主机,基于域名的虚拟主机
    # 第一个虚拟主机(基于域名的虚拟主机),反向代理tomcat_server这组服务器
    server {
        listen       9999;
        server_name  192.168.128.223;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
           # root   html;
           # index  index.html index.htm;
           proxy_next_upstream http_502 http_504 error timeout invalid_header;
           # 变量$host等于客户端请求头中的Host值。
           proxy_set_header Host $host;
           #后端的web服务器可以通过X-Forwarded-For获取真实的IP地址,$remote_addr客户端的ip地址
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_pass http://tomcat_server;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


    }

}

一定要注意 location 中的  proxy_pass 后面的 tomcat_server 要跟上面 upstream 配置代理服务器的名字相同。这里分布式负载均衡方式是轮询,也是默认的均衡方式,如果要配置多台服务器只要在tomcat_server 中多添加几次服务器ip与端口就可以了。

3.7 测试分布式部署是否成功

上面修改了配置文件后,使用下面指令看看是否配置文件没问题:

/usr/local/webserver/nginx/sbin/nginx -t

在多台Linux服务器中使用nginx分布式部署tomcat项目

成功可以看到上述输出。然后我们重新启动nginx,最好还是3.5测试后关闭后再修改配置,再启动。

这里的指令可以看下面的 reopen 指令:

/usr/local/webserver/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx

在多台Linux服务器中使用nginx分布式部署tomcat项目

然后我们启动 223 服务器的 9999端口,这里不是8080,配置服务器是222与223的8080,但是监听的端口是9999,原先默认是80,被我修改为9999了,第一次访问就可以看到打开的是222的tomcat。

在多台Linux服务器中使用nginx分布式部署tomcat项目

然后再次刷新,因为是轮询,所以下面访问的223的tomcat。

在多台Linux服务器中使用nginx分布式部署tomcat项目

到这里我们使用nginx分布式部署成功,但是我还是想测试一下如果其中的一个tomcat被关闭,会报错吗?

3.8 关闭其中一台tomcat看看效果

我进入222服务器中调用 apache-tomcat-8.5.38/bin/shutdown.sh 指令将tomcat关闭:

在多台Linux服务器中使用nginx分布式部署tomcat项目

然后重新测试223:9999端口:

我们发现可以成功打开,但是我怎么刷新这个界面都不会轮询,一直是223的tomcat:

在多台Linux服务器中使用nginx分布式部署tomcat项目