使用 Nginx 搭配 Tomcat 实现负载均衡
1、简介
Nginx(发音同 engine x)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。该软件由伊戈尔·赛索耶夫创建并于2004年首次公开发布。2011年成立同名公司以提供支持。2019年3月11日,Nginx 公司被 F5 Networks 以6.7亿美元收购。
传统模型下,一个项目部署在一台tomcat上,这个时候,假如tomcat因为服务器资源不够,突然挂机了,那么整个项目就无法使用,给客户造成的损失可想而知!
Nginx 就可以避免单台服务如果挂机,依然能保证服务正常使用,当我们把项目 war 包部署到三台服务器上时,即使服务器A、服务器B都挂了,依然能够通过服务器C访问项目资源!
2、Nginx 安装
2.1、下载 Nginx 安装包
直接访问 Nginx 官网(https://nginx.org),下载对应的安装包,本次案例选择的是nginx-1.6.3.tar.gz版本,安装环境是centos7。
上传到对应服务器的文件夹或者直接在服务器端使用wget
命令
#下载nginx-1.6.3.tar.gz
wget -c https://nginx.org/download/nginx-1.6.3.tar.gz
如果出现如下信息:
-bash: wget: command not found
提示wget
命令找不到,使用如下命令,进行安装,之后再次执行上述下载命令
yum install wget
2.2、安装Nginx
在按照 Nginx 之前,需要安装相应运行库环境,操作如下
-
安装 gcc 环境
yum install gcc-c++
-
安装 PCRE 依赖库
yum install -y pcre pcre-devel
-
安装 zlib 依赖库
yum install -y zlib zlib-devel
-
安装 OpenSSL 安全套接字层密码库
yum install -y openssl openssl-devel
-
解压 Nginx
tar -zxvf nginx-1.6.3.tar.gz
-
执行配置命令
cd nginx-1.6.3
执行配置命令
./configure
如图。表示执行配置成功。
当然,也可以执行自定义配置文件,例如:
./configure
–prefix=/usr/local/nginx
–conf-path=/usr/local/nginx/conf/nginx.conf
–pid-path=/usr/local/nginx/conf/nginx.pid
–lock-path=/var/lock/nginx.lock
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log
–with-http_gzip_static_module
–http-client-body-temp-path=/var/temp/nginx/client
–http-proxy-temp-path=/var/temp/nginx/proxy
–http-fastcgi-temp-path=/var/temp/nginx/fastcgi
–http-uwsgi-temp-path=/var/temp/nginx/uwsgi
–http-scgi-temp-path=/var/temp/nginx/scgi
注意:临时文件目录指定为/var/temp/nginx
,需要在/var
下创建temp
及nginx
目录
-
执行编译安装命令
make install
-
查找安装路径
whereis nginx
-
启动服务(进入 nginx 的目录)
cd /usr/local/nginx/sbin/
执行如下命令
#启动
./nginx
#停止,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
./nginx -s stop
#停止,此方式停止步骤是待nginx进程处理任务完毕进行停止
./nginx -s quit
#重新加载配置文件,Nginx服务不会中断
./nginx -s reload
- 修改配置文件
比如,修改端口号,默认端口号为80,咱们这里改成81;
进入配置文件夹
cd /usr/local/nginx/conf
备份原始配置文件
cp nginx.conf nginx.conf.back
编辑nginx.conf
配置文件
vim nginx.conf
找到server
中的listen
,修改端口号为81
启动服务
./nginx
查看 nginx 进程
ps -ef|grep nginx
3、Tomcat安装
直接访问 tomcat
官网(http://tomcat.apache.org/
),下载对应的安装包,本次案例选择的是apache-tomcat-8.5.45.tar.gz
版本,本次安装环境是centos7
上传到对应的服务器文件夹中,之后解压文件夹
tar -zxvf apache-tomcat-8.5.40.tar.gz
重新命名
mv apache-tomcat-8.5.40 tomcat-1
同样的,再次解压安装包,命名为tomcat-2
mv apache-tomcat-8.5.40 tomcat-2
- 修改 tomcat 端口号
将 tomcat-1 的 http 端口设置为8080,将 tomcat-2 的 http 端口设置为8081。
进入tomcat
的conf文件夹,修改server.xmlvim server.xml
修改SHUTDOWN
、HTTP/1.1
、redirectPort
、AJP/1.3
端口,使其错开,避免重启的时候,报端口被占用问题
tomcat-1 的SHUTDOWN
、HTTP/1.1
、redirectPort
、AJP/1.3
设置如下:
<!--关闭服务端口-->
<Server port="9005" shutdown="SHUTDOWN">
...
<!--HTTP服务端口8080,跳转端口9443-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9443" />
<!--AJP服务端口-->
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
...
</Server>
tomcat-2 的SHUTDOWN
、HTTP/1.1
、redirectPort
、AJP/1.3
设置如下:
<!--关闭服务端口-->
<Server port="10005" shutdown="SHUTDOWN">
...
<!--HTTP服务端口8081-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="10443" />
<!--AJP服务端口-->
<Connector port="10009" protocol="AJP/1.3" redirectPort="10443" />
...
</Server>
- 启动服务
分别进入tomcat-1
、tomcat-2
的bin
文件夹,执行脚本,启动服务
sh startup.sh
查看服务是否启动成功
ps -ef|grep tomcat
直接在浏览器上分别输入ip:8080、ip:8081进行访问了,结果如下:
- 编写html
为了便于测试,我们创建一个html
格式的页面,文件命名为index.html
,内容如下:<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> Hello server! </body> </html>
进入tomcat
的webapps
文件夹,删除ROOT
文件夹里面的东西,创建index.html
文件;
在 tomcat-1
中,index.html
内容如下:
在 tomcat-2
中,index.html
内容如下:
- 测试
创建好了之后,分别在浏览器上访问ip:8080
、ip:8081
;ip:8080
,结果如下:
4、Nginx实现负载均衡
进入Nginx
的配置文件夹
cd /usr/local/nginx/conf
编辑nginx.conf配置文件
vim nginx.conf
主要新增upstream
集群配置点,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
#服务器的集群(这个就是我们要配置的地方)
#test.com:服务器集群名字,自定义
upstream
test.com {
#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
#127.0.0.1:8080、127.0.0.1:8081对应tomcat服务器地址
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
server {
listen 81;
server_name localhost;
location / {
· #配置反向代理地址
proxy_pass http://test.com;
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
参数说明:
•worker_processes:工作进程的个数,一般与计算机的cpu核数一致
•worker_connections:单个进程最大连接数(最大连接数=连接数*进程数)
•include:文件扩展名与文件类型映射表
•default_type:默认文件类型
•sendfile :开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
•keepalive_timeout:长连接超时时间,单位是秒
•upstream:服务器的集群配置点
配置好之后,进入/usr/local/nginx/sbin/
文件夹,重新刷新配置文件
./nginx -s reload
最后,访问Nginx服务器所在ip:81地址,多次刷新,看看效果:
至此,Nginx 与 Tomcat 搭配实现负载均衡已经配置完了。