使用负载均衡的好处
- 当我们的web服务直接面向用户,往往要承接大量的并发请求,单台服务难以负荷。
- 我们要使用多台web服务器组成集群,前端使用负载均衡,将请求分发到后端服务中
- 提升整体性能,以及系统的容灾能力
配置文件【编写】
[root@nginx nginx]# vim /etc/nginx/conf.d/proxy_web.conf
upstream node {
server 192.168.200.121:80;
server 192.168.200.122:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
调度算法
轮询 | 按时间顺序逐一分配到不同的后端(默认) |
weight | 加权轮询,weight值越大,分配的访问机率越高 |
ip_haship_hash | IP固定访问 |
least_connleast_conn | 将请求传递到活动连接数量少的后端 |
轮询配置 -wrr【默认】
upstream web {
server 192.168.200.121:80;
server 192.168.200.122:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://web;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
weight-权重轮询
upstream web{
server 192.168.200.121:80 weight=5;
server 192.168.200.122:80 weight=6;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://web;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
ip_hash配置【固定IP访问后端服务器】
- 缺点大
- 当大量用户上网的方式是通过同一台路由器【同一家公司】,那么他们的IP都会是相同的
- 访问服务站点时,通过IP_hash调度到相同的后端
- 导致后端某一个节点压力瞬间增大
upstream node {
ip_hash;
server 192.168.200.121:80;
server 192.168.200.122:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
负载均衡-后端状态
down | 当前server不参与调度 |
backup | 后端全部宕机后,启用预留的备份服务器 |
max_fails | 允许请求失败的次数 |
fail_timeout | 经过max_fails失败后,服务暂停时间 |
max_conns | 限制最大的接收连接数 |
down【不参与调度】
upstream web {
server 192.168.200.121:80 down;
server 192.168.200.122:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://web;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
backup【备份服务】
- 当后端服务器宕机,就会调度到backup备份服务
- 当服务恢复后,backup停止服务,等待下一次宕机
upstream node {
server 192.168.200.121:80 backup;
server 192.168.200.122:80;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
max_fails和fail_timeout【允许多少秒内连接失败的次数】
upstream node {
server 192.168.200.121:80 max_fails=3 fail_timeout=10s;
server 192.168.200.122:80 max_fails=3 fail_timeout=10s;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
max_conns【限制server最大的连接数】
upstream node {
server 192.168.200.121:80 max_fails=3 fail_timeout=10s max_conns=1000;
server 192.168.200.122:80 max_fails=3 fail_timeout=10s max_conns=1000;
}
server {
listen 80;
server_name www.test.org;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}