阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx + Tomcat 负载均衡实现实例

264次阅读
没有评论

共计 3945 个字符,预计需要花费 10 分钟才能阅读完成。

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

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

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

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

具体修改步骤:

Tomcat 下载

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

1、Server:port

Nginx + Tomcat 负载均衡实现实例

 

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

Nginx + Tomcat 负载均衡实现实例

 

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

Nginx + Tomcat 负载均衡实现实例

 

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

 

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

Nginx + Tomcat 负载均衡实现实例

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

 Nginx + Tomcat 负载均衡实现实例

Nginx + Tomcat 负载均衡实现实例Nginx + Tomcat 负载均衡实现实例

 

以下开始 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 负载均衡实现实例Nginx + Tomcat 负载均衡实现实例

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

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

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

CentOS 6.6 下安装配置 Tomcat 环境  http://www.linuxidc.com/Linux/2015-08/122234.htm

RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目  http://www.linuxidc.com/Linux/2015-02/113528.htm 

Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签)  http://www.linuxidc.com/Linux/2015-02/113062.htm 

Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm 

Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm 

CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm 

Ubuntu 16.04 下安装 Tomcat 8.5.9  http://www.linuxidc.com/Linux/2017-06/144809.htm

Ubuntu 16.04 安装 Tomcat 8 图解  http://www.linuxidc.com/Linux/2017-10/147773.htm

Tomcat 配置文件 server.xml 详解  http://www.linuxidc.com/Linux/2017-10/148003.htm

Tomcat 单机多实例部署 - 多项目部署  http://www.linuxidc.com/Linux/2017-10/147259.htm

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

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149456.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3945字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中