Nginx负载均衡
负载均衡:将客户端的请求通过调度单元分摊到多个操作单元上进行执行,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优。
配置方法:
需要结合proxy_pass
和upstram server
upstream配置
# 只能配置在http层,大括号中有多个参数
upstream name {...}
server参数
- down:当前的server暂时不参与负载均衡
- backup:预留的备份服务器
- max_fails:允许请求失败的次数
- fail_timeout:经过max_fails失败后,服务暂停的时间,默认10秒
- max_conns:限制最大的接收的连接数
- weight:表示权重,默认是1,多个server轮询访问
upstream backend{
# 对应每一个开启的服务,可以是ip,域名,socket
# weight 表示权重,默认情况下是1,进行轮询访问
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
# backup表示是备用节点
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
Nginx调度算法
- 轮询:按时间顺序逐一分配到不同的后端服务器
- 加权轮询:weight值越大,分配到的访问几率越高
- ip_hash:每个请求按ip的hash结果分配,这样来自同一个IP的固定访问一个后端服务器(这种方法走代理的话会导致都在一台服务器)
- least_conn:最少连接数,哪个机器连接数少就分发
- url_hash:按照访问的URL的hash结果分配请求,每个URL定向到同一个后端服务器
- hash:hash自定义的key
设置调度算法:
upstream name{
# 设置调度算法,默认是轮询,如果是加权轮询,直接在server后加weight就好
ip_hash;
# 如果是hash,可以自定义key,可以根据请求地址等,如:
hash $request_uri;
server ...;
}
配置完upstream后,需要利用proxy_pass
进行配置
location / {
# name对应上面的upstream的name
proxy_pass http://name
# 出现指定错误时跳过这个服务器使用下一个
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
# 导入其他proxy的配置
include proxy_params;
}