nginx-负载均衡
- 前言
- 一、负载均衡的分类
- 二、配置负载均衡
- 三、负载均衡算法
-
- [1. 轮询](#1. 轮询)
- [2. 加权轮询](#2. 加权轮询)
- [3. 最小连接数](#3. 最小连接数)
- [4. ip hash](#4. ip hash)
- [5. 基于url的hash算法](#5. 基于url的hash算法)
- [6. least_time](#6. least_time)
- [7. random](#7. random)
- 四、服务器状态配置
-
- [1. bakcup配置](#1. bakcup配置)
- [2. down配置](#2. down配置)
- [3. Health checks 健康检查](#3. Health checks 健康检查)
-
- [Passive Health Checks](#Passive Health Checks)
- [Active Health Checks](#Active Health Checks)
前言
反向代理
:nginx 作为客户端和后端服务器之间的中间层,客户端直接访问 nginx,Nginx 再将请求转发给后端服务器(客户端不知道实际处理请求的服务器)。
负载均衡池
:由多台后端服务器组成的集群,nginx 按规则将请求分配到这些服务器
nginx通过将客户端请求分发到后端多台服务器,将流量 "均匀分配" 到多台服务器,避免单台服务器过载,实现流量均衡、提高系统可用性和扩展性
一、负载均衡的分类
三层负载均衡
在路由器上做负载均衡,到达某个ip地址有多条路由可以走,一般在机房的路由器上实现。 路由器里配置ospf协议支持,等价路由
四层负载均衡
传输层实现,根据ip地址和端口号做转发,支持tcp和udp协议(nginx支持)
七层负载均衡
应用层实现,基于http协议实现 (nginx支持)
从解封装和建立连接角度出发,3层效率 --》4层 --》7层
二、配置负载均衡
在负载均衡器上加载upstream配置
bash
# http块中添加
http {
upstream myweb1 {
#ip_hash;
#least_conn;
#server 192.168.168.136 weight=3;
server 192.168.168.136;
server 192.168.168.137;
}
server {
# server块中添加
location / {
#root html;
#index index.html index.htm;
# 转发给负载均衡器
proxy_pass http://myweb1;
}
}
}
验证:刷新nginx配置后到浏览器中访问会有轮转效果
三、负载均衡算法
nginx商业网站:HTTP Load Balancing | NGINX Documentation
nginx开源网站:Using nginx as HTTP load balancer

http块中添加
1. 轮询
round-robin :默认 --->简称 rr
bash
upstream myweb1 {
server 192.168.168.136;
server 192.168.168.137;
}
2. 加权轮询
默认权重值为weight=1,数值越大获得的流量越多
bash
upstream myweb1 {
server 192.168.168.136 weight=3;
server 192.168.168.137;
}
3. 最小连接数
least-connected: 基于7层的http协议或者4层,先3次握手,建立连接
bash
upstream myweb1 {
least_conn;
server 192.168.168.136;
server 192.168.168.137;
}
4. ip hash
基于客户机的ip地址,计算一个hash值,如果hash值一样就一直转发到固定的后端的web服务器。 适合于需要保持session会话信息持久性的场景,购物网站等
bash
upstream myweb1 {
ip_hash;
server 192.168.168.136;
server 192.168.168.137;
}
5. 基于url的hash算法
根据请求 URL 的哈希值分配服务器(同一 URL 始终由同一服务器处理)。适合缓存静态资源(需安装第三方模块 ngx_http_upstream_hash_module)
bash
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
6. least_time

7. random

四、服务器状态配置
1. bakcup配置
bash
http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 192.0.0.1 backup;
# 处于备份状态,前面的服务器挂了,不能用了,才能获得流量。
}
}
2. down配置
bash
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
# 直接表示这台服务器挂了,不分配流量
}
3. Health checks 健康检查
问题:
1.谁检查谁?
负载均衡器检查后端的真实的web服务器是否在运行网站
2.检查什么?
检查后端的web服务器的网站是否运行
3.如何进行监控检查的呢?
Passive Health Checks
被动检测 --》默认支持
LB向web服务器发起请求报文,但是web服务器没有响应,因此LB才知道web服务器出问题。
fail_timeout
设置必须多次尝试失败才能将服务器标记为不可用的时间,以及将服务器标记为不可用的时间(默认为10秒)
max_fails
设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认为1次尝试)
backup
备份:当其他的服务器都不提供服务的时候,再启用这台服务器提供服务 --》备胎
slow_start
慢启动 down 将上游的服务器标识为不可用,不会再发送任何的请求给这台服务器

Active Health Checks
主动检查:
LB服务器不管有没有web请求,定期去检查web服务器里的网站是否运行,主动去了解情况。
NGINX Plus 是nginx的商业插件(软件),需要购买的
