# 7. Nginx 负载均衡

Nginx 负载均衡策略:

  1. 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

  2. weight 权重 weight 代表权重默认为 1,权重越高被分配的客户端越多。

  3. ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。

  4. fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  5. url_hash(第三方)

    按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。

# 7.1 需求

  • 浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080 和 8081 端口中

# 7.2 准备工作

  • 停止前面的所有 tomcat 服务器

    ps -ef | grep tomcat
    kill -9 端口号
    
  • 修改 tomcat8081 下面的 vod 目录为 edu

    cd ~/tomcat/tomcat8081/apache-tomcat-9.0.50/webapps/
    mv vod/ edu/
    
  • 重启两台 tomcat

    # 进入每个 tomcat 目录下的 bin 目录
    ./startup.sh
    

# 7.3 负载均衡

  • 进入 nginx 配置文件目录

    cd /usr/local/nginx/conf
    
  • 编辑配置文件

    vim nginx.conf
    
  • 内容如下

    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        
        #负载均衡实例
        upstream myserver {
          #服务器列表
          server 172.16.58.200:8080;
          server 172.16.58.200:8081;
        }
    
        server {
            listen       80;
            server_name  172.16.58.200;  #localhost 改成 ip 地址
            #配置转发
            location / {
                root   html;
                proxy_pass http://myserver;  #配置负载均衡实例
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    权重:

    #负载均衡实例
    upstream myserver {
     #服务器列表
     server 172.16.58.200:8080 weight=3;
     server 172.16.58.200:8081 weight=7;
    }
    

    ip_hash:

    #负载均衡实例
    upstream myserver {
     ip_hash;
     server 172.16.58.200:8080;
     server 172.16.58.200:8081;
    }
    

    fair:

    #负载均衡实例
    upstream myserver {
     server 172.16.58.200:8080;
     server 172.16.58.200:8081;
     fair;
    }
    

    url_hash:

    #负载均衡实例
    upstream myserver {
     server 172.16.58.200:8080;
     server 172.16.58.200:8081;
     hash $request_uri;
     hash_method crc32;
    }
    
  • 重启 nginx

    /usr/local/nginx/sbin/nginx -s reload
    

# 7.4 验证

访问 http://172.16.58.200/edu/a.html,会发现一会儿是 8080 一会儿是 8081,负载均衡成功。

image-20210726112956581

image-20210726112945988

上次更新: 8/22/2022, 10:48:17 PM