网络负载均衡的大致原理是利用一定的分配策略将网络负载平衡地分摊到网络集群的各个操作单元上,使得单个负载任务能够分担到多个单元上并行处理,使得大量并发访问或者数据流量分担到多个单元上分别处理,从而减少用户的等待响应时间
upstream是nginx的http Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡
upstream与server同级
# 负载均衡配置
upstream yhsblog {
# 列举负载均衡的服务器列表
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server {
listen 80;
server_name localhost;
location / {
## 根据gupao找upstream
proxy_pass http://yhsblog;
}
}
语法:
server address[parameters]
server 必选
address必选,可以是主机名,域名,ip,也可以指定端口号
parameters是可选参数,可是如下参数:
down:表示当前server已停用
backup:表示当期server是备用服务器,只有其他非backup后端服务器都挂掉了或者很忙才会分配到请求
weight:表示当前server负载权重,权重越大被请求几率越大。默认是1
max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认 是10s,max_fails默认是1,即默认情况下,只要发生错误就认为服务器挂掉了,如果max_fails设置为0,表示取消该检查。
策略
轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉能自动剔除。
一致性HASH
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream yhsblog {
ip_hash;
server xxx;
server xxxx;
server xxx;
}
权重
即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下
upstream yhsblog {
server xxx weight=1;
server yyy weight=2;
}