前面我已经写了centos安装nginx服务、及centos安装部署多个tomcat应用服务器的文章。这两篇文章都是单独部署的,nginx和tomcat之间并无联动关系,下面我将记录下nginx代理、负载均衡多个tomcat的配置和部署。

 

准备工作:

  1. 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;   
    }   
  }   
}
  1. 多个tomcat能正常单独运行(一个tomcat表示同一应用的多个节点)
     
    模拟情景:
    我们工作中往往会遇到用户高并发的情况,这种情况下如果是部署单一的应用服务器在性能上可能有些吃不消,可能导致应用服务器的宕机,为了避免单一服务器的各种原因的宕机,我们寻找集群的方式来解决这个问题。例如我们可以将同一个应用部署多个服务器,然后通过统一的代理服务器来将用户请求分发给这些应用服务器;这样做的好处有三点,第一就是直接减轻了单个服务器的并发压力;第二就是提高了应用服务器对外提供服务的可靠性,因为多台服务器中任何一台宕机都不影响用户使用;第三点就是方便应用的升级,可以说是0断线的升级,我们只需要依次将多个服务器按照先后顺序进行升级就好了。
     
    Nginx、tomcat负载均衡配置:
    主要是更改nginx的conf目录下的nginx.conf文件,具体配置如下:

  2. 可以看到这个配置upstream web_app 中我将已经安装配置好的tomcat服务器进行了指向。
    至此我已经将nginx和tomcat进行了负载均衡配置,接下来就是重新启动nginx服务器
    可以看到当我们输入原来的localhost请求地址时,返回的界面已经改成了两个tomcat中的一个,而不是原来的nginx的欢迎界面了。
    集成前localhost返回界面如下图:

    在一台云服务器上同时部署前后端 部署多台服务器_nginx代理

  3.   
    集成后localhost返回的是tomcat1,如下图所示:

  4. 在一台云服务器上同时部署前后端 部署多台服务器_nginx负载均衡_02

  5.  
      
    此时我继续刷新一下浏览器,可以看到返回的是tomcat2了,如下图所示:
  6. 在一台云服务器上同时部署前后端 部署多台服务器_在一台云服务器上同时部署前后端_03

  7.   
    至此验证了我的配置是成功的,nginx已经反向代理了tomcat1、tomcat2应用服务,并且在我刷新时自动切换tomcat1和tomcat2,这就代表了nginx已经正确的按照配置进行了负载均衡工作。
     
    此时我还想继续验证nginx服务器在其中一个tomcat应用服务器宕机的情况下会出现什么情况,这里宕机我就直接将tomcat1的服务器停掉
     
  8. 在一台云服务器上同时部署前后端 部署多台服务器_nginx负载均衡_04

  9.  
    可以看到我将tomcat1停掉后单独访问tomcat1的服务地址localhost:800时已经不能正常访问了,如下图所示:
  10. 在一台云服务器上同时部署前后端 部署多台服务器_在一台云服务器上同时部署前后端_05

  11.   
    此时我访问nginx代理服务器地址localhost时,看看还能不能正常访问,可以看到此时nginx还是能正常访问的,只不过现在每次刷新地址都返回的是tomcat2的页面了,nginx自动将宕机的tomcat1剔除了负载均衡的队列了,如下图:
  12. 在一台云服务器上同时部署前后端 部署多台服务器_nginx集成多个tomcat_06

  13.   
    这个时候如果我又把tomcat1启动,会出现什么情况呢
  14. 在一台云服务器上同时部署前后端 部署多台服务器_tomcat_07

  15.   
    这个时候可以看到单独访问tomcat1地址时,已经能够正常访问了,如下图:
  16. 在一台云服务器上同时部署前后端 部署多台服务器_nginx负载均衡_08

  17.   
    这时我在访问nginx地址,并多刷几次,可以考到tomcat1有被自动加到了nginx负载均衡中,请求返回都在tomcat1和tomcat2之间进行切换了,至此我这里成功的验证了各种情况,可以满足我前面所说的三个主要应用模拟情景了。
     
    附言:nginx.conf文件中的配置项中文释义可能没有进行说明,我这里直接引用别人的文章进行说明好了,有兴趣的可以看下面两个地址的内容,基本说本很清楚明了了。