zoukankan      html  css  js  c++  java
  • Nginx负载均衡

    一、nginx负载均衡

    配置方法

    upstream server {
    server 192.168.133.161:80;
    server 192.168.133.160:80;
    }
    
    #假设代理服务器IP为192.168.133.162
    server {
        listen 80;
        server_name localhost;
        location / {
        	proxy_pass http://server;
        }
    }
    
    upstream 支持4种负载均衡调度算法:
    A、 轮询(默认) :每个请求按时间顺序逐一分配到不同的后端服务器;
    
    B、 ip_hash :每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以
    保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
    
    C、 url_hash :按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务
    器为缓存的时候效率。
    
    D、 fair :这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短
    智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。 Nginx
    本身是不支持 fair 的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块。
    

    实例:

    服务器:A和B

    #热备
    upstream server {
    server 192.168.133.161:80;
    server 192.168.133.160:80 backup; #热备
    }
    
    #轮询(默认,权重为1),ABABAB..
    upstream server {
    server 192.168.133.161:80;
    server 192.168.133.160:80;
    }
    
    #加权轮询,ABBABBABB
    upstream server {
    server 192.168.133.161:80 weight=1;
    server 192.168.133.160:8080 weight=2;
    }
    
    # ip_hash,相同IP访问同一台服务器,同一局域网转发到同一台服务器,可能会导致负载失衡
    upstream server {
    ip_hash;
    server 192.168.133.161:80;
    server 192.168.133.160:80;
    }
    

    负载均衡配置参数

    • down,表示当前的server暂时不参与负载均衡。
    • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求
    • backup机器,因此这台机器的压力最轻。
    • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回错误。
      fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和
      fail_timeout一起使用。
    # 配置参数
    upstream server {
    server 192.168.133.161:80 weight=2 max_fails=2 fail_timeout=2;
    server 192.168.133.160:80 weight=1 max_fails=2 fail_timeout=2;
    }
    

    二、Nginx会话保持

    1、ip_hash ip_hash

    使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不 可用。

    ip_hash语法:

    upstream server {
    ip_hash;
    server 192.168.133.161:80;
    server 192.168.133.160:80;
    server 192.168.133.160:8080 down;
    }
    
    

    ip_hash存在的问题:

    • 当后端服务器宕机后,session 会丢失;
    • 不适用于前段还有代理的情况。必须是第一层代理,接受客户端的真实 ip 地址,二层代理无 法使用
    • 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;
    • 不适用于 CDN 网络,

    基于cookie 来判断。可避免上述 ip_hash 中来自同一局域网的客户端和前端代理导致负载失衡的情况。 语法:

    upstream server {
    server 192.168.133.161:80;
    server 192.168.133.160:80;
    sticky_cookie_insert srv_id expires=2h domain=3evip.cn path=/;
    }
    
    • expires:设置浏览器中保持 cookie 的时间
    • domain:定义cookie 的域
    • path:为 cookie 定义路径

    3、jvm_route 方式

    4、使用后端服务器自身通过相关机制保持 session 同步

    三、实例配置

    环境

    代理服务器 192.168.133.161

    web服务 192.168.133.160(两台虚拟主机,这里为相同IP不能端口;如果是两台不同IP服务器,自行修改upstream)

    代理端

    [root@nginx-proxy conf.d]# cat up-proxy.conf
    upstream webapp {
            server 192.168.133.160:80;
            server 192.168.133.160:8080;
    }
    
    server {
            listen 80;
            server_name www.up-proxy.com;
            root /usr/share/nginx/html;
            # Load configuration files for the default server block.
            # include /etc/nginx/default.d/*.conf;
            location / {
                    proxy_pass http://webapp;
                    proxy_set_header Host $http_host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_set_header X-NginX-Proxy true;
                    proxy_connect_timeout 30;
                    proxy_send_timeout 60;
                    proxy_read_timeout 60;
                    proxy_buffering on;
                    proxy_buffer_size 32k;
                    proxy_buffers 4 128k;
                    proxy_busy_buffers_size 256k;
                    proxy_max_temp_file_size 256k;
            }
            error_page 404 /404.html;
            location = /40x.html {
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            }
    }
    [root@nginx-proxy conf.d]#
    
    

    服务端

    /etc/nginx/conf.d/

    [root@nginx-server conf.d]# cat lisi-query.conf
    server {
            listen 8080;
            server_name www.lisi.com;
            access_log /var/log/nginx/lisi-access.log main;
            error_log /var/log/nginx/lisi-error.log;
            set_real_ip_from 192.168.133.161;
            location /{
                    root /var/www/lisi;
                    index index.html index.htm index.php;
                    deny 192.168.133.5;
                    allow all;
    
            }
    
            location /status{
            stub_status on;
            access_log off;
            }
    }
    
    
    [root@nginx-server conf.d]# cat proxy.conf
    server {
            listen 192.168.133.160:80;
            server_name www.wangwu.com;
            access_log /var/log/nginx/wangwu-access.log main;
            error_log /var/log/nginx/wangwu-error.log;
            set_real_ip_from 192.168.133.161;
            location /{
                    root /var/www/test;
                    index index.html index.htm index.php;
    
            }
            location /status{
            stub_status on;
            access_log off;
            }
    }
    
    
    配置若有遗漏或错误,请评论留言。
  • 相关阅读:
    损失函数
    DPM 目标检测1
    编程题
    枚举型和元类
    python 多继承
    网络基础Cisco路由交换一
    网络基础tcp/ip协议五
    网络基础tcp/ip协议四
    网络基础tcp/ip协议三
    网络基础tcp/ip协议二
  • 原文地址:https://www.cnblogs.com/BrokenEaves/p/15153194.html
Copyright © 2011-2022 走看看