nginx负载均衡 相关配置详解
程序员文章站
2024-02-21 10:24:28
...
负载均衡
当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。
那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题
nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略:轮询、加权轮询、ip hash
以下配置块,需添加到nginx.conf http块下
第一、upstream 模块
轮询(默认): 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉(宕机),能自动剔除。 如:ABABAB…
upstream groupName{
server 127.0.0.1:8082;
server 127.0.0.1:8081;
}
- upstream groupName
配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器。groupName表示服务器组的名称
指定权重(weight): 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如:ABBABBABB…
upstream groupName{
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8081 weight=2;
}
IP绑定(ip_hash)
通过hash 算法会让相同的客户端ip一直请求相同的服务器,此方式可以解决session会话问题(但一般建议session存入缓存)
upstream groupName{
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8081 weight=2;
ip_hash;
}
除了上面三种策略外,还可以通过参数,来控制各个服务器运行
upstream groupName{
server 127.0.0.1:8082 [weight=1] [down] [backup] [max_fails=1] [fail_timeout=20s] [max_conns=1000];
server 127.0.0.1:8081 [weight=2] [down] [backup] [max_fails=1] [fail_timeout=20s] ]max_conns=1000];
}
- down
当前服务器不参与负载均衡 - backup
当其他非backup服务器出现故障或者忙的时候或者宕机,才会调用backup服务器,因此backup服务器压力最小 - max_fails(默认1)
允许请求失败的次数 - fail_timeout(默认10s,一般配合max_fails使用)
表示在fail_timeout时间内,如果请求失败达到max_fails次数,则任何该服务器为宕机,同时等待fail_timeout时间内,不会再次请求该服务器,而是直接请求其他正常服务器,当等待时间fail_timeout过了后,又会再一次请求该服务器,若出现1次失败,则继续等待fail_timeout时间,以此循坏,直到该服务器恢复正常。
fail_timeout可以设置为0s ,则不管max_fails失败多少次,都会请求该服务器 - max_conns(默认0 ,1.5.9之后的版本)
限制分配给当前服务器处理的最大连接数量,超过这个数量,将不会分配新的请求 给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置
第二server模块
server {
keepalive_requests 120; #单连接请求上限次数。
listen 80; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。/表示所有的都能进来
root html; #根目录
index index.html; #设置默认页
proxy_pass http://groupName; #请求转向upstream groupName定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}