nginx应用场景6——负载均衡
1,nginx的划分
地域
GLSB:全局负载均衡,Global Server Load Balance
SLB:一般用到,服务器负载均衡(Server Load Balancing)
网络模型
负载均衡又分为四层负载均衡(传输层,TCP/IP)和七层负载均衡(应用层)
nginx就是典型的七层负载均衡服务器。
nginx的负载均衡主要用到的是 proxy_pass:
2,主要语法(记住upstream是在server外面):
upstream imooc {
server 116.62.103.228:8001;
server 116.62.103.228:8002;
server 116.62.103.228:8003;
}
server{
location / {
proxy_pass http://imooc;
include proxy_params;
}
}
默认是轮训方式。一旦一个节点出了问题,就不会显示该节点
upstream举例:
upstream imooc {
server 116.62.103.228:8001 down;
server 116.62.103.228:8002 backup;
server 116.62.103.228:8003 max_fails=1 fail_timeout=10s;
}
后端服务器在负载均衡调度中的状态:
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout: 经过max_fails失败后,服务暂停的时间
max_conns: 限制最大的接受的连接数
3,nginx的调度算法:
轮训 按时间顺序逐一分配不同的后端服务器
加权轮训 weight值越大,分配到的访问几率越高
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP固定访问一个后端服务器
least_conn 最少链接数,哪个机器的连接数少就分发。
url_hash 按照访问的URL的hash结果来分配请求,使每个URL定向到同一个后端服务器
hash关键数值 hash自定义的key
加权轮训示例:
upstream imooc {
server 116.62.103.228:8001;
server 116.62.103.228:8002 weight=5;
server 116.62.103.228:8003;
}
ip_hash示例,但是它有一个缺陷,如果前端走代理,它的hash就不通了:
upstream imooc {
ip_hash;
server 116.62.103.228:8001;
server 116.62.103.228:8002;
server 116.62.103.228:8003;
}
url_hash方式:
upstream imooc {
hash $request_uri;
server 116.62.103.228:8001;
server 116.62.103.228:8002;
server 116.62.103.228:8003;
}