前面我已经写了centos安装nginx服务、及centos安装部署多个tomcat应用服务器的文章。这两篇文章都是单独部署的,nginx和tomcat之间并无联动关系,下面我将记录下nginx代理、负载均衡多个tomcat的配置和部署。
准备工作:
- nginx服务器能正常单独运行
user root root;
worker_processes 2;
pid /opt/nginx/logs/nginx.pid;
error_log /opt/nginx/logs/error.log;
worker_rlimit_nofile 102400;
events
{
use epoll;
worker_connections 102400;
}
http
{
include mime.types;
default_type application/octet-stream;
fastcgi_intercept_errors on;
access_log /opt/nginx/logs/access.log;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time $remote_addr';
upstream web_app {
server 192.168.32.128:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.32.128:8081 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name chenfeng.test.com;
index index.jsp index.html index.htm;
root /jeff/zx/;
location /
{
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web_app;
expires 3d;
}
}
}
- 多个tomcat能正常单独运行(一个tomcat表示同一应用的多个节点)
模拟情景:
我们工作中往往会遇到用户高并发的情况,这种情况下如果是部署单一的应用服务器在性能上可能有些吃不消,可能导致应用服务器的宕机,为了避免单一服务器的各种原因的宕机,我们寻找集群的方式来解决这个问题。例如我们可以将同一个应用部署多个服务器,然后通过统一的代理服务器来将用户请求分发给这些应用服务器;这样做的好处有三点,第一就是直接减轻了单个服务器的并发压力;第二就是提高了应用服务器对外提供服务的可靠性,因为多台服务器中任何一台宕机都不影响用户使用;第三点就是方便应用的升级,可以说是0断线的升级,我们只需要依次将多个服务器按照先后顺序进行升级就好了。
Nginx、tomcat负载均衡配置:
主要是更改nginx的conf目录下的nginx.conf文件,具体配置如下: -
集成后localhost返回的是tomcat1,如下图所示: -
此时我继续刷新一下浏览器,可以看到返回的是tomcat2了,如下图所示: -
至此验证了我的配置是成功的,nginx已经反向代理了tomcat1、tomcat2应用服务,并且在我刷新时自动切换tomcat1和tomcat2,这就代表了nginx已经正确的按照配置进行了负载均衡工作。
此时我还想继续验证nginx服务器在其中一个tomcat应用服务器宕机的情况下会出现什么情况,这里宕机我就直接将tomcat1的服务器停掉
-
可以看到我将tomcat1停掉后单独访问tomcat1的服务地址localhost:800时已经不能正常访问了,如下图所示: -
此时我访问nginx代理服务器地址localhost时,看看还能不能正常访问,可以看到此时nginx还是能正常访问的,只不过现在每次刷新地址都返回的是tomcat2的页面了,nginx自动将宕机的tomcat1剔除了负载均衡的队列了,如下图: -
这个时候如果我又把tomcat1启动,会出现什么情况呢 -
这个时候可以看到单独访问tomcat1地址时,已经能够正常访问了,如下图: -
这时我在访问nginx地址,并多刷几次,可以考到tomcat1有被自动加到了nginx负载均衡中,请求返回都在tomcat1和tomcat2之间进行切换了,至此我这里成功的验证了各种情况,可以满足我前面所说的三个主要应用模拟情景了。
附言:nginx.conf文件中的配置项中文释义可能没有进行说明,我这里直接引用别人的文章进行说明好了,有兴趣的可以看下面两个地址的内容,基本说本很清楚明了了。
可以看到这个配置upstream web_app 中我将已经安装配置好的tomcat服务器进行了指向。
至此我已经将nginx和tomcat进行了负载均衡配置,接下来就是重新启动nginx服务器
可以看到当我们输入原来的localhost请求地址时,返回的界面已经改成了两个tomcat中的一个,而不是原来的nginx的欢迎界面了。
集成前localhost返回界面如下图: