nginx+tomcat负载均衡集群(二)

nginx+tomcat负载均衡集群(二)

一、安装nginx

大同小异,主要有几步

1.下载安装包(http://nginx.org/en/download.html) nginx-1.8.0.tar.gz

2.解压  tar - zxvf nginx-1.8.0.tar.gz

3.cd 解压目录下 nginx-1.8.0

4.配置安装目录及附带信息 ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.32(这里附带了一个pcre 可以下载一个,少东西了编译的时候回报错,缺什么补什么就可以了,直接下载包、或用yum命令都可以)

5.编译 make

6.加载、运行 make install

    安装完之后,通用命令可以查看一下版本 rpm -qa|grep nginx

    启动nginx: cdcd /usr/local/nginx/sbin目录 nginx  就启动了(若提示无命令,按提示安装或 yum install nginx)    默认端口为80,访问http://address address为你的ip,本机即为localhost 出现 nginx 信息 即成功。

eg:


 

 

二、部署tomcat

  简单的部署一个web项目,加入一个test.jsp页面即可。里面的内容就加入后台的输出、前台页面显示,如:

 

  访问该test.jsp  成功如下:

 

三、负载均衡集群实现

 

    粗略解释:如图、客户端发送请求,先由nginx监听,转发给后端的tomcat,减轻单个tomcat压力,亦可保证单个tomcat挂了之后,用户请求会由其它的tomcat处理。

 

3.1打开nginx的配置文件nginx.conf

      一般在安装目录下,不确定哪个的话使用命令 nginx -t。如:



 

该命令是检测加载的配置文件是否有错误,其中就有配置文件的路劲。

之后修改配置文件之后,重新加载命令  nginx -s reload

 

打开之后找到

server {

  listen       80;
  server_name  localhost;

  #charset koi8-r;
  #access_log  logs/host.access.log  main;

  location / {

      root   html;
      index  index.html index.htm;
  
   …………
  }

listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。

server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。

location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。

index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

 

修改为:

server {

        listen       80;
        server_name  192.168.1.60;

       location / {
              proxy_pass http://192.168.1.60:8080;
          }

    ………

 }

表示 访问80端口后通过nginx转发到http://192.168.1.60:8080下;即第二步中部署的tomcat中。成功如下:


 

tomcat访问的是8080 此时通过nginx监听80端口转发到tomcat下得到响应。

 

3.2负载均衡实现多个tomcat分担请求

   3.2.1 再次部署两个tomcat 通过cp命令即可。修改各自端口和tomcattest.jsp的输出值,部署好之后,与第二步中一致。

   比如修改为:

      tomcat1  startup端口 8080  shutdown端口 8085    test.jsp输出为===tomcat111111===

      tomcat2  startup端口 8081  shutdown端口 28085  test.jsp输出为===tomcat222222===

      tomcat3  startup端口 8082  shutdown端口 38085  test.jsp输出为===tomcat333333===

 

   3.2.2修改nginx的配置文件

 

    #负载均衡配置   

    #轮询

    

    upstream local_tomcat {

        server 192.168.1.60:8080 weight=1; 

        server 192.168.1.60:8081 weight=1;

        server 192.168.1.60:8082  backup;

    }

  server {

        listen       80;
        server_name  192.168.1.60;

      location / {

                   proxy_pass http://local_tomcat;

                  }

    …………

}

 

   upstream+名字:分别对应部署的三个tomcatweight越大表示请求的几率就越大,backup表示备用,其它的tomcat挂掉了,访问它。

成功如下:

 

此时通过nginx转发到两个tomcat上,同一个地址两个tomcat交替给出响应,当停掉tomcat1tomcat2,我们继续访问,此时会访问备用的tomcat3,如下



 
到此,轮询方式的负载均衡已实现。

 

3.3 ip_hash的方式实现负载均衡

  3.3.1 修改nginx的配置文件

    #负载均衡配置

    #ip_hash

    

upstream local_tomcat {

         ip_hash;

        server 192.168.1.60:8080 weight=1 max_fails=2 fail_timeout=2;

        server 192.168.1.60:8081 weight=1 max_fails=2 fail_timeout=2;

    }

    server {

        listen       80;
        server_name  192.168.1.60;

      location / {

                       proxy_pass http://local_tomcat;

                   }
    …………
 }

 

采用ip_hash方式可绑定请求访问ip以解决session问题,其中无backup机器,max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。 fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

测试如下:

 
断掉tomcat1,再访问,即会发现,全部请求都转到了tomcat2ip_hash负载均衡就可以了。

总结:轮询方式根据比重来分配,但是不能解决session,ip_hash可以解决,但很多项目里都采用memcached来保存session,已此来保存,后续单独再弄。

 四、分文件过滤,静态文件伺服

主要目的:nginx直接缓存一些静态文件、图片、csshtml……,客户端发起请求,通过nginx直接返回回来,不通过tomcat处理

4.1修改nginx的配置文件

server {

        listen       80;

        server_name  192.168.1.60;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #jsp页面跳转

        location ~ \.jsp$ {

           proxy_pass   http://local_tomcat;

        }

        #静态文件缓存

        location ~ \.(html|js|css|png|gif)$ { 

                                         root  /usr/local/nginx/html;

        } 

        #错误页面跳转

        error_page  404     /404.html;

        error_page   500 502 503 504  /50x.html;

      …………

}

修改了之前的loction /{……}  改变的判断动态的.jsp后缀交给tomcat处理,其余的一些html等等直接找/usr/local/nginx/html 该文件夹下对应的,定义了404页面。如下:

/usr/local/nginx/html文件下有如下文件:

 

此时访问最后一个html如下:



 

访问一个不存在的路径,如下:




注:如果后缀为.jsp,nginx配置文件直接转到了tomcat处理,不会经过此处的拦截,可以在nginx进行判断,也可以在项目里做处理。

 

到此为止,基本可以达到要求。

 

  参考:

 

猜你喜欢

转载自tablemiao.iteye.com/blog/2223178