Nginx+Tomcat搭建负载均衡与两个服务器的

一、简单介绍

Nginx与Tomcat都是服务器,Tomacat是们最熟悉的web服务器了,它能够动态的生成资源并返回到客户端,即是一种动态资源服务器。而Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,属于静态资源服务器。能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的的,即是说无论何时任何人访问它得到的内容都是完全相同的这样的资源称之为静态资源。

二、开发工具

    nginx-1.14.0,

    apache-tomcat-7.0.42,

    apache-tomcat-8.0.39

    tomcat8.5

三、所学目标

实现高性能负载均衡的Tomcat集群

  • 负载均衡:当业务压力增大时,可能一个Tomcat的实例不足以处理,这时可以启动多个Tomcat实例进行水平扩展,Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例中进行处理.

Nginx+Tomcat搭建负载均衡与两个服务器的

四、环境搭建

下载Nginx,在官网中下载所需版本:https://nginx.org/en/download.html,我使用的是windows下的稳定版Nginx+Tomcat搭建负载均衡与两个服务器的

1.下载完毕后,解压

Nginx+Tomcat搭建负载均衡与两个服务器的

启动Nginx

开启Nginx有两种方法,一种是直接点击开启,一种是命名行开启。

a.点击开启

Nginx+Tomcat搭建负载均衡与两个服务器的

b.命令行开启

Nginx+Tomcat搭建负载均衡与两个服务器的

若遇启动失败,出现启动失败问题,一般是端口冲突问题,比如win7下的IIS已经启动并占用了80端口。在nginx.conf配置文件里修改一下端口号就可以了,小技巧:当修改玩nginx.conf配置文件时,不需要重启nginx,只需要在命令行输入一下命令即可

Nginx+Tomcat搭建负载均衡与两个服务器的

6.测试一下nginx是否启动成功

Nginx+Tomcat搭建负载均衡与两个服务器的

出现以上页面说明nginx启动成功了


2.然后解压三个Tomat

Nginx+Tomcat搭建负载均衡与两个服务器的

Nginx+Tomcat搭建负载均衡与两个服务器的

3.修改这三个Tomcat的启动端口,分别为18010,28080,38080,下面以修改第一个Tomcat为例,打开Tomcat的conf目录下的server.xml:

Nginx+Tomcat搭建负载均衡与两个服务器的

共需要修改3处端口

Nginx+Tomcat搭建负载均衡与两个服务器的

Nginx+Tomcat搭建负载均衡与两个服务器的

修改完后启动三个tomcat,并访问.看是否正常:

Nginx+Tomcat搭建负载均衡与两个服务器的

Nginx+Tomcat搭建负载均衡与两个服务器的

Nginx+Tomcat搭建负载均衡与两个服务器的

4.现在开始配置Nginx来实现负载均衡,只需要配置好Nginx的配置文件即可,配置如下(简单的配置,实际生产环境可以进行更详细完善配置)

Nginx+Tomcat搭建负载均衡与两个服务器的

1. worker_processes  1;  #工作进程的个数,一般与计算机的cpu核数一致  
2.   
3. events {  
4.     worker_connections  1024;   #单个进程最大连接数(最大连接数=连接数*进程数)  
5. }  
6.   
7. http {  
8.     include       mime.types;   #文件扩展名与文件类型映射表  
9.     default_type  application/octet-stream;  #默认文件类型  
10.




#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为on, #如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
#注意:如果图片显示不正常把这个改成off。
11.sendfile  on;  
12.       
13.     keepalive_timeout  65;    #长连接超时时间,单位是秒  
14.   
15.     gzip  on;       #启用Gizp压缩  
16.       
17.     #服务器的集群  
18.     upstream  netitcast.com {  #服务器集群名字 
#服务器配置weight是权重的意思,权重越大,分配的概率越大。
19.         server    127.0.0.1:18080  weight=1;  
20.         server    127.0.0.1:28080  weight=2; 
server    127.0.0.1:38080  weight=3;
21.     }     
22.   
23.     #当前的Nginx的配置  
24.     server {  
25.         listen       80;   #监听80端口,可以改成其他端口  
26.         server_name  localhost;  #当前服务的域名  
27.   
28.     location / {  
29.             proxy_pass http://netitcast.com;  
30.             proxy_redirect default;  
31.         }  
32.           
33.   
34.         error_page   500 502 503 504  /50x.html;  
35.         location = /50x.html {  
36.             root   html;  
37.         }  
38.     }  

39. }  

核心配置如下:

Nginx+Tomcat搭建负载均衡与两个服务器的

配置完成,下面开始演示负载均衡。

当第一次访问时,发现访问的是Tomcat7.0上的程序:

Nginx+Tomcat搭建负载均衡与两个服务器的

然后刷新,访问的还是Tomcat7.0上的程序:

Nginx+Tomcat搭建负载均衡与两个服务器的

再刷新,发现变为了Tomcat8.0上的程序:

Nginx+Tomcat搭建负载均衡与两个服务器的

再刷新发现变为了Tomcat8.5上的程序:

Nginx+Tomcat搭建负载均衡与两个服务器的

到此,我们利用Nginx已经实现了负载均衡的Tomcat集群。我们不断的刷新,发现访问Tomcat7.0的概率大概是Tomcat8.0和Tomcat8.5的2倍,这是因为我们在Nginx中配置的三台Tomcat的权重起的作用,如下图:

Nginx+Tomcat搭建负载均衡与两个服务器的

五、总结

实现一个高性能的负载均衡集群会如此简单。Nginx的功能如此强大,配置却如此简单,我们还有什么理由拒绝它呢?这比我们动不动就十多万至几十万人民币的F5 BIG-IP、NetScaler等硬件负载均衡交换机廉价了不知多少。此外,Nginx不仅仅是一个反向代理服务器,它本身也可以托管网站,作为Web服务器,进行Http服务处理。