• nginx+tomcat实现负载均衡(windows环境)


    一、下载软件

    1、nginx下载地址:nginx: download

    2、tomcat下载地址:https://tomcat.apache.org/

    二、实现目标

    访问http://localhost地址时, 将请求轮询到tomcat1tomcat2服务器上, 实现负载均衡, 并通过proxy_connect_timeout 1;配置, 实现其中一台服务器宕机能快速切换到另一台服务器上面, 从而不影响使用

    第一次、第二次请求到tomcat1服务器,第三次请求到tomcat2服务器

    三、负载均衡简介

    在这里插入图片描述

      后台服务器组成了一个服务器集群(多台服务器). 有中间服务器(nginx)接受到请求分发给不同的服务器后台. 该nginx就是一个负载均衡服务器.
    优点:
      分散后台服务器的压力
      自动去掉挂掉的后台服务器
      缓存后台服务器响应内容

    负载均衡的分配策略
      nginx 的 upstream目前支持 4 种方式的分配
      1)、轮询(默认)
          每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
      2)、weight
         指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
      2)、ip_hash
         每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
      3)、fair(第三方)
         按后端服务器的响应时间来分配请求,响应时间短的优先分配。
      4)、url_hash(第三方)
        按访问url的hash结果来分配请求,使每个url定向到同一
        个后端服务器,后端服务器为缓存时比较有效。
    负载均衡配置
    在http节点里添加:
      upstream myServer {
        server 127.0.0.1:9090 down;
        server 127.0.0.1:8080 weight=2;
        server 127.0.0.1:6060;
        server 127.0.0.1:7070 backup;
        [ip_hash | fair | url_hash]
      }
    在需要使用负载的server节点下添加
      proxy_pass http://myServer;
      upstream 每个设备的状态:
      down 表示单前的server暂时不参与负载
      weight 默认为1.weight越大,负载的权重就越大。
      max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回  proxy_next_upstream 模块定义的错误
      fail_timeout:max_fails 次失败后,暂停的时间。
      backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    四、开始

    1、下载nginx和tomcat, 复制一份tomcat作为tomcat2服务器

     2、修改第一个server.xml中的端口配置 ,3个位置改为 18005 18080 18009

           同样修改第二个server.xml中的端口配置 ,3个位置改为 28005 28080 28009

    3、为了区分tomcat1、tomcat2, 修改F: est_nginx_tomcat omcat1webappsROOT目录下的index.jsp文件内容

     

     4.分别启动tomcat1、tomcat2, /bin目录下startup.bat命令, 访问http://localhost:18080http://localhost:28080, 查看是否启动成功

     

     5、到目前为止两台tomcat服务器已经准备就绪了, 接下来配置nginx,即修改nginx.conf文件

    worker_processes  1;#工作进程的个数,一般与计算机的cpu核数一致
     
    events {
        worker_connections  1024;#单个进程最大连接数(最大连接数=连接数*进程数)
    }
     
    http {
        include       mime.types; #文件扩展名与文件类型映射表
        default_type  application/octet-stream;#默认文件类型
     
        sendfile        on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
        
        keepalive_timeout  65; #长连接超时时间,单位是秒
     
        gzip  on;#启用Gizp压缩
        
        #服务器的集群
        upstream  myNginxTest {  #服务器集群名字    
            server    127.0.0.1:18080  weight=1;#服务器配置   weight是权重的意思,权重越大,分配的概率越大。
            server    127.0.0.1:28080  weight=2;
        }    
     
        #当前的Nginx的配置
        server {
            listen       80;#监听80端口,可以改成其他端口
            server_name  localhost;##############    当前服务的域名
     
        location / {
                proxy_pass http://myNginxTest;
                proxy_redirect default;
            proxy_connect_timeout 3;
            proxy_read_timeout 1;
            proxy_send_timeout 1;
            }
            
     
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    • upstream: 指定服务器集群, 我们开启了tomcat1、tomcat2, 定义2个server即可
    • weight: 权重, tomcat2是1的两倍, 后面测试发现, 基本上tomcat1和tomcat2的请求次数比例为1:2
    • server: 监听localhost:80的所有请求, 并将请求根据upstream配置的集群规则进行分发, 注意, proxy_pass的test.nginx.com必须跟upstream的test.nginx.com一致
    • proxy_connect_timeout 3; # 当其中一台服务器宕机后, 请求连接的超时时间, 设为3s, 可以看到tomcat2宕机后, 当轮询到tomcat2服务器时, 响应会有3s的延时, 3s后自动将请求转到tomcat1服务器, 实现了集群的高可用, 同理, 开启tomcat2后, nginx恢复正常的轮询请求 proxy_read_timeout 1; proxy_send_timeout 1;

    6、保存配置, 启动nginx, 双击启动或通过命令启动,

     nginx命令:

    nginx的启动和关闭
    nginx -h 查看帮助信息
    nginx -v 查看Nginx的版本号
    nginx -V 显示Nginx的版本号和编译信息
    start nginx 启动Nginx
    nginx -s stop 快速停止和关闭Nginx
    nginx -s quit 正常停止或关闭Nginx
    nginx -s reload 配置文件修改重新加载
    nginx -t 测试Nginx配置文件的正确性及配置文件的详细信息
    task /fi "imagename eq nginx.exe" windows命令框下查看nginx的进程命令

     7、浏览器请求http://localhost, 不断刷新、停掉任意一台服务器, 可以看到目标中的效果

    四、文章参考

    nginx+tomcat实现负载均衡(windows环境) - wangzaiplus - 博客园 (cnblogs.com)

    nginx配置文件详解及其负载均衡; - 笑~笑 - 博客园 (cnblogs.com)

  • 相关阅读:
    Nginx动静分离经典案例配置
    Nginx实现HTTP反向代理配置
    mac 使用brew安装nginx 各种命令
    nginx 启动报错Error: undefined method `named' for #<OptionParser:0x00007fdd090802d0>
    【Java多线程】PriorityBlockingQueue源码分析 (二十五)
    【Java】PriorityQueue 源码分析
    【Java多线程】SynchronousQueue源码分析(二十四)
    【Java多线程】线程最快累加方案(二十三)
    【Java多线程】线程池ThreadPoolExecutor实现原理(二十二)
    【Java多线程】读写锁(ReadWriteLock)(二十一)
  • 原文地址:https://www.cnblogs.com/dragon-lan/p/15206496.html
Copyright © 2020-2023  润新知