nginx负载均衡       

nginx负载均衡

upstream支持的负载均衡分配方式

1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,会自动剔除。
2.weight
指定轮询机率,weight和访问比率成正比,用于后端服务器性能不均的情况
3.ip_hash
每个请求按访问的ip做ip_hash计算定位到同一台服务器,以解决session共享的问题。
当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果要使用此种算法需下载Nginx的upstream_fair模块。
5.url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效果。
Ningx本身不支持url_hash,如果要使用这种算法,要下载安装hash软件包。

weight=NUMBER:设置服务器的权重,权重越高,被分配到的客户端请求数越多,如无设置权重值 ,则默认为权重为1。
max_fails=NUMBER:指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404除外),则标记为失败。哪果没有设置,则为默认值1,设为0表示关闭检查项。
fail_timeout=TIME:max_fails次失败后,暂停的时间。
down:标记服务器永久离线状态,用于ip_hash中。
backup:仅仅在非backup服务器全部宕机或繁忙时才启用。

http
{
upstream test {
server 192.168.110.11:80 weight=3;
server 192.168.110.22:8080 max_fails=3 fail_timeout=30s;
server 192.168.110.33 backup;
}
server
{
    listen 80;
    server_name  www.linux78.com;
    index index.html index.php;
    root /www/web;
 
location / {
        proxy_pass   http://test;
        proxy_next_upstream  http_500 http_502 _ http_503 error timeout invalid_header;
        include   /usr/local/nginx/conf/proxy.conf;
        }
  }
}

nginx upstream

image-20201009111321841

首先每个进程需要一个connection pool,里面都是长连接,多进程之间是不需要共享这个连接池的。 一旦与后端服务器建立连接,则在当前请求连接结束之后不会立即关闭连接,而是把用完的连接保存在一个keepalive connection pool里面,以后每次需要建立向后连接的时候,只需要从这个连接池里面找,如果找到合适的连接的话,就可以直接来用这个连接,不需要重新创建socket或者发起connect()。这样既省下建立连接时在握手的时间消耗,又可以避免TCP连接的slow start。如果在keepalive连接池找不到合适的连接,那就按照原来的步骤重新建立连接。

参考

http://xiaorui.cc/archives/3495

https://xnathan.com/2019/05/07/nginx-502/

https://blog.51cto.com/xiaosu/1689992

http://xstarcd.github.io/wiki/shell/TCP_ACK.html