负载均衡的基本概念
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; }