nginx负载均衡算法
负载均衡是什么意思
通俗点讲就是多个具有相同能力的“人”去做某一件事情,并根据每个“人”所能承受的量的大小不同,来分配任务量。
有哪几种实现方式,以及它们之间的区别
LVS和nginx,前者是四层负载均衡,作用于传输层,后者是七层负载均衡,作用于应用层。
nginx负载均衡配置方法
在配置文件中做如下配置,
1 upstream tomcats { 2 server 192.168.0.103:8088 weight=1; 3 server 192.168.0.104:8088 weight=2; 4 server 192.168.0.105:8088 weight=10; 5 } 6 server { 7 listen 90; 8 server_name www.cnblogs.com; 9 10 location / { 11 proxy_pass http://tomcats; 12 } 13 }
当请求访问的域名是“www.cnblogs.com”,并且端口号是90时,就会被nginx的负载均衡所拦截,依照配置(upstream)来分配具体的响应服务器。
在做了负载均衡之后,为upstream指定的名字(如:tomcats)就是访问各个上游服务器时的域名。
负载均衡—轮询、权重 weight:
轮询:是nginx负载均衡的默认策略。会将上游服务器排序,依次调用。
权重:为每一个服务器设置权重(即能力值,默认为1),权重越大则越有可能被调用。
负载均衡—max_conns:
表示每一个上游服务器可同时接收处理的连接数量,用于保护避免过载,可以起到限流的作用。
负载均衡—slow_start:
设置服务器慢速启动,将其权重从0慢慢加载到实际配置的值。即完成服务器的状态从不可用到可用甚至高可用的转变。此参数只在商业版本中有效。
- 该参数不能使用在hash和random load balancing负载策略中。
- 当只有一台服务器时,该参数失效。
负载均衡—down、backup:
down:标志该服务器不可用,不会处理请求。
backup:标志该服务器是备份机,只有在其他服务器无法工作时(比如宕机),才会加入到集群中提供服务。
- backup参数不能使用在hash和random load balancing中。
负载均衡—max_fails、fail_timeout:
这两个参数需要同时声明才可以生效。例如:max_fails=2 fail_timeout=15s ,表示在15秒内请求某一个服务器失败了2次,则认为该服务器宕机了,接下来的15秒内不会分配新请求到该服务器。15秒后再有新的请求会再次尝试连接该服务器,如果请求仍旧失败,则再次重复上述过程。
负载均衡—keepalived:
作用:用于提高系统的吞吐量。当一个请求进来时,系统需要维护其状态(打开、关闭和再打开),这样当一个请求在一定时间内多次访问服务器时会造成很大的消耗,而且服务器处理请求的速度也会降低。使用keepalived保证请求在一定时间内处于连接状态。
配置:
1 upstream tomcats { 2 #server 192.168.0.103:8088 max_fails=2 fail_timeout=1s; 3 #server 192.168.0.104:8088; 4 #server 192.168.0.105:8088; 5 server 192.168.0.106:8080; 6 keepalive 32; #设置长连接处理的数量 7 } 8 server { 9 listen 90; 10 server_name www.cnblogs.com; 11 location / { 12 proxy_pass http://tomcats; 13 proxy_http_version 1.1; 14 proxy_set_header Connection ""; 15 } 16 }
负载均衡—ip_hash:
ip_hash可以保证用户的每次访问都可以请求到固定的服务器,前提是用户的ip没有变动。在使用ip_hash时需要注意一点,不能把后台服务器直接移除,只能标记为down。
If one of the servers needs to be temporarily removed, it should be marked with the down parameter in order to preserve the current hashing of client IP addresses. http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash
负载均衡—url_hash与least_conn:
url_hash,根据每次请求的url地址不同,将会访问到不同的服务器节点,hash后访问到的服务器节点将会固定。
1 upstream tomcats { 2 #使用ip_hash作负载均衡 3 ip_hash; 4 #获取到请求的ip地址 5 hash $request_uri; 6 server 192.168.204.128:8088; 7 server 192.168.204.129:8088; 8 server 192.168.204.130:8088; 9 }
least_conn,根据每台服务器节点当前连接数不同,将请求分配到连接数最少的节点上。
1 # 最少连接数 2 # least_conn