在多台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
修改内容如下:
在前面我们添加333来区分。我们访问 192.168.128.223:8080 效果如下:
同样的操作将222服务器中的tomcat首页也进行修改:
3、在223服务器中安装Nginx
3.1安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
3.2再下载PCRE
PCRE 是为了让 Nginx 可以支持 Rewrite 功能。首先将网盘中的 pcre-8.35.tar.gz 文件通过XFTP上传到 /usr/local/src 中:
cd /usr/local/src/
将这个tar包解压:
tar -zxvf pcre-8.35.tar.gz
3.3 PCRE进行编译安装
进入pcre的安装目录:
cd pcre-8.35
编译:
./configure
安装:
make && make install
成功以后可以查看pcre的版本:
pcre-config --version
3.4 安装Nginx
使用Xftp将 nginx-1.12.2.tar.gz 文件导入文件夹中,将其解压:
进入安装目录:
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
make
make install
都安装完后可以查看nginx的版本:
/usr/local/webserver/nginx/sbin/nginx -v
3.5 启动 Nginx 查看默认网页
前面看到版本后说明我们安装完成,接下去我们启动nginx看看是否可以正常启动。
/usr/local/webserver/nginx/sbin/nginx
然后在浏览器中打开,通过 192.168.128.223:80 ,若能看到下面界面说明安装成功。
3.6 修改nginx配置信息
接下来就是重头戏了,修改nginx的配置信息,添加部署的服务器,将他们产生联系。
我们通过下面指令进入nginx的conf文件,我们修改的就是nginx.conf文件:
cd /usr/local/webserver/nginx/conf/
修改配置文件:
vi ./nginx.conf
修改的内容中最重要的就是如下:
之前还配置了错误日志与指定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
成功可以看到上述输出。然后我们重新启动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
然后我们启动 223 服务器的 9999端口,这里不是8080,配置服务器是222与223的8080,但是监听的端口是9999,原先默认是80,被我修改为9999了,第一次访问就可以看到打开的是222的tomcat。
然后再次刷新,因为是轮询,所以下面访问的223的tomcat。
到这里我们使用nginx分布式部署成功,但是我还是想测试一下如果其中的一个tomcat被关闭,会报错吗?
3.8 关闭其中一台tomcat看看效果
我进入222服务器中调用 apache-tomcat-8.5.38/bin/shutdown.sh 指令将tomcat关闭:
然后重新测试223:9999端口:
我们发现可以成功打开,但是我怎么刷新这个界面都不会轮询,一直是223的tomcat: