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;
        }
}

posted @ 2021-08-17 17:16  破碎的屋檐  阅读(79)  评论(0编辑  收藏  举报