负载均衡原理
七层的负载均衡
负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。
主要用到upstream模块
负载均衡算法
默认是rr算法
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
1
2
3
4upstream test {
server localhost:8080;
server localhost:8081;
}wrr
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如1
2
3
4upstream test {
server localhost:8080 weight=9;
server localhost:8081 weight=1;
}那么10次一般只会有1次会访问到8081,而有9次会访问到8080
ip-hash
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用ip_hash了,ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
1
2
3
4
5upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}url-hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
1
2
3
4
5
6upstream backend {
hash $request_uri;
hash_method crc32;
server localhost:8080;
server localhost:8081;
}fair
上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用ip_hash了,ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
1
2
3
4
5upstream test {
ip_hash;
server localhost:8080;
server localhost:8081;
}会话保持推荐使用ip-hash
负载均衡实例
1
2
3
4
5
6
7
8
9
10
11
12
13upstream xiaomi {
server 172.16.10.221:80;
server 172.16.10.222:80;
}
server {
listen 80;
server_name nginx.myi-cloud.com;
client_max_body_size 1024M;
location / {
proxy_pass http://xiaomi;
proxy_set_header Host $host:$server_port;
}
}负载均衡优化