Nginx + Tomcat 负载均衡实现实例

负载均衡的目的是为了解决单个节点服务器压力过大,造成Web响应过慢,严重情况下导致服务瘫痪;由于一个web服务同时能处理的用户并发请求数量有限,同时可能还有服务机器故障等情况,所以web站点通常会在N台服务器上部署一套同样的程序,这就是通常所说的服务器集群.有了集群还要合理分配请求,不可能搭建了集群后所有的请求都发送到一台机器上,这显然是不合理的,也是对服务器资源的严重浪费.如何将用户的请求合理分配到一台能快速响应的服务器上,需要用到一些均衡策略.

负载均衡的意义就是讲用户的请求按照一定的策略,均衡地分配到服务器集群中的机器上,充分发挥服务器的性能,也提高了用户体验.

负载均衡常用的web服务器软件有NginxApacheHAProxy等。本文主要是Nginx的负载均衡配置.

为了模拟服务器集群,这里在本地机器上装了多个Tomcat,同时修改Tomcat的监听端口,以达到启动多个Web服务的目的.

具体修改步骤:

Tomcat下载

Tomcat安装目录 > conf > server.xml,主要修改位置为 3 处,因为实在本机上模拟集群,目的是为了防止端口冲突;

1、 Server:port

2、Server > Service > Connector:port (HTTP/1.1协议)

3、Server > Service > Connector:port (AJP/1.3协议)

---另外一个Tomcat http协议端口修改为20710,修改位置相同;

修改后启动两个Tomcat,可以看到端口没有冲突,可以正常启动,这样在本机上就存在了两个web服务.

为了简单区分确实是启动了两个Web服务,修改Tomcat安装目录 > webapps > ROOT > index.html,加上标识.

 

以下开始Nignx配置: 

Nignx下载(推荐稳定版本)

Nginx负载均衡是通过upstream模块来实现的,内置了三种负载策略,官方说明:配置参考;

· 轮循(默认)

  Nginx根据请求次数,将每个请求均匀按权重分配到每台服务器

· 最少连接

  将请求分配给当前连接数最少的服务器,Nginx会统计哪些服务器的连接数最少

· IP Hash

  根据IP绑定处理请求的服务器。第一次请求时,根据该请求IP计算出Hash值,将请求分配到集群中的某一台服务器上。以后来自改IP的所有请求,都将通过Hash算法,将请求转发到绑定的服务器上

更改负载策略主要是修改Nginx的配置文件, 位于 Nginx安装目录 > conf > nginx.conf. 修改后部分代码如下:

#user  nobody;

#工作进程的个数,一般与计算机的CPU核数一致.
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {

#单个进程最大连接数(最大连接数 = 连接数 * 进程数)
    worker_connections  1024;
}


http {

#文件扩展名与文件类型映射表
    include       mime.types;

#默认文件类型
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

#开启高效文件传输模式,sendfile函数指令指定nginx是否调用sendfile函数来输出文件
#对于普通应用设置为on,如果用来进行下载等应用磁盘IO重负载应用,可以设置为off,
#以平衡磁盘与网络IO处理速度,降低系统的负载;若图片显示不正常,则改为off
    sendfile        on;
    #tcp_nopush     on;

#长连接超时时间,单位/秒
    #keepalive_timeout  0;
    keepalive_timeout  65;

#是否启用gzip压缩
    #gzip  on;

    #服务器集群
    upstream sakurakann { #服务器集群的名字
    least_conn;
#服务器配置,weight是权重的意思,权重越大,分配的概率越大.
      server 127.0.0.1:11015 weight=1;
      server 127.0.0.1:20710 weight=2;
    }

#当前nginx配置
    server {

        #nignx监听的端口
        listen       80;

        #当前服务器域名
        server_name  localhost;

        charset utf-8;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}

        location / {

          #要与上面 @line 49 的服务器集群名称一致
          proxy_pass http://sakurakann; #服务器若是https连接,则使用https://
          proxy_redirect default;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
} 

· upstream sakurakann {...}; 配置反向代理服务器组,Nginx会根据配置,将请求按照负载策略分发给组中某一台服务器上, sakurakann 为服务器组名称.

· upstream模块中的server指令 配置处理请求的服务器IP或域名,端口可选,不配置端口默认使用80端口,在其后可以追加其他配置参数:

  ` weight 权重,数字越大,权重越大,被分配请求的机会越大,默认为1;不配置时将请求平均分配;

  ` max_fails 允许请求失败的次数,超过该次数后,在fail_timeout的时间之内,新的请求将不会分配到该机器,默认为1;

  ` fial_timeout 默认为10(秒);

  ` backup 备份机,所有其他服务器都不可用后才会生效;

  ` down 将指定服务器标示为不可用;

  ` max_conns 服务器最大连接数,超过后将不会分配新的请求,默认为0,表示不限制;

  ` resolve 将server指令配置的域名/IP,指定域名解析服务器,需要与upstream同级也配置resolve指定IP,表示example.com域名,将由10.0.0.1服务器来负责解析

  如:

http {
    resolver 10.0.0.1;

    upstream u {
        zone ...;
        ...
        server example.com resolve;
    }
}

  ` 其他详见官方文档

· proxy_pass http://sakurakann; 表示将所有请求转发到名称为 sakurakann 的服务器组中的某一台机器上.

终端进入Nginx安装目录 > start nginx

启动Nginx后访问 localhost:80 ( Nginx监听端口及IP )

可以看到,请求已经实现分发,按照多次访问结果来看,转发比例与权重一致;

Nginx + Tomcat 负载均衡简单实例完成。

更多Tomcat相关教程见以下内容

Tomcat 的详细介绍请点这里
Tomcat 的下载地址请点这里

猜你喜欢

转载自www.linuxidc.com/Linux/2017-12/149456.htm