负载均衡的基本概念
web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用
Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、
请求性能、高容灾

LB load balance
SLB server lb 阿里云

SLB 阿里云
CLB 腾讯云
QLB 青云
ULB Ucloud

Nginx负载均衡按层划分
负载均衡按层划分应用场景

四层负载均衡
    IP地址
    TCP/UDP
    端口号

七层负载均衡

HTTP
HTTPS
SMTP
FTP

 

 Nginx upstream虚拟配置语法

Syntax:    upstream name { ... }
Default:    —
Context:    http

1.环境规划

角色      外网IP(NAT)        内网IP(LAN)         主机名
lb01    eth0:10.0.1.5      eth1:172.16.1.5     lb01
web01   eth0:10.0.1.7      eth1:172.16.1.7     web01
web02   eth0:10.0.1.8      eth1:172.16.1.9     web02
web03   eth0:10.0.1.9      eth1:172.16.1.9     web03

2.部署web服务器

web01的配置:
mkdir -p /code/www
echo "web01 172.16.1.7" > /code/www/index.html
[root@web01 conf.d]# cat www.conf 
server {
    listen 80;
    server_name www.xiao.com;
        
    location / {
        root /code/www;
        index index.html;
    }
}

web02的配置
mkdir -p /code/www
echo "web02 172.16.1.8" > /code/www/index.html
[root@web02 conf.d]# vim www.conf 
server {
    listen 80;
    server_name www.xiao.com;
        
    location / {
        root /code/www;
        index index.html;
    }
}

2)重载服务
systemctl reload nginx

3.部署负载均衡服务器

1)添加配置文件
[root@1b01 conf.d]# cat lb_web.conf 
upstream xiao {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

server {
    listen 80;
    server_name www.xiao.com;

    location / {
        proxy_pass http://xiao;
    }
}

2)重载服务
systemctl reload nginx

加一个站点

1)web的配置

所有web站点配置是一样的
mkdir -p /code/blog
echo "blog asdasdasd" > /code/blog/index.html
[root@web02 conf.d]# cat blog.conf 
server {
    listen 80;
    server_name blog.xiao.com;
        
    location / {
        root /code/blog;
        index index.html;
    }
}
其他web站点可以通过scp将配置信息同步过去,重启服务即可

2)负载均衡的配置

vim /etc/nginx/proxy_params
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_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

[root@1b01 conf.d]# cat lb_web.conf 
upstream xiao {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}
server {
    listen 80;
    server_name www.xiao.com;

    location / {
        proxy_pass http://xiao;
        include proxy_params;
    }
}

server {
    listen 80;
    server_name blog.xiao.com;

    location / {
        proxy_pass http://xiao;
        include proxy_params;
    }
}

 

Nginx负载均衡后端状态

后端web服务器在前端Nginx负载均衡调度中的状态

状态                 概述
down                当前的server暂时不参与负载均衡
backup              预留的备份服务器,不是纯备份,有自身业务的,同时能为其他业务做备份
max_fails           允许请求失败的次数
fail_timeout        经过max_fails失败后,服务暂停时间
max_conns           限制最大的接受连接数

测试案例:

1.测试down状态,测试该Server不参与负载均衡的调度
upstream load_pass {
    //不参与任何调度,一般用于停机维护
    server 172.16.1.7:80 down;
}

2.测试backup以及down状态
upstream load_pass {
    server  172.16.1.7:80 down;
    server  172.16.1.8:80 backup;
    server  172.16.1.9:80 max_fails=1 fail_timeout=10s;
}

3.测试max_fails失败次数和fail_timeout多少时间内失败多少次则标记down
upstream load_pass {
    server  172.16.1.7:80 down;
    server  172.16.1.8:80 max_fails=1 fail_timeout=10s;
}

4.测试max_conns最大TCP连接数
upstream load_pass {
    server 172.16.1.7:80;
    server 172.16.1.8:80 max_conns=1;
}

 

Nginx负载均衡调度算法

调度算法       概述
轮询          按时间顺序逐一分配到不同的后端服务器(默认)(rr)
    不考虑实际负载或实际配置,所有服务器都是平等的,平均负载
weight        加权轮询,weight值越大,分配到的访问几率越高(wrr)
ip_hash       每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      按照访问URL的hash结果来分配请求,使每个URL定向到后端同一个服务器
least_conn    最少连接数,那个机器连接数少就分发(lc)
wlc           加权最少连接
1.Nginx负载均衡[wrr]轮询具体配置
upstream load_pass {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}

2.Nginx负载均衡[weight]权重轮询具体配置
upstream load_pass {
    server 172.16.1.7:80 weight=5;
    server 172.16.1.8:80;
}

3.Nginx负载均衡iP_hash具体配置,不能和weight一起使用。
//如果客户端都走相同代理,会导致某一台服务器连接过多
upstream load_pass {
    ip_hash;
    server 172.16.1.7:80 weight=5;
    server 172.16.1.8:80;
}