nginx 负载均衡策略

nginx 负载均衡策略,第1张

nginx 负载均衡策略

Nginx的upstream支持如下六种方式的分配算法,分别是:

算法名称说明轮询默认方式weight权重方式ip_hash依据ip分配方式least_conn依据最少连接方式url_hash依据URL分配方式fair依据响应时间方式 轮询

是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置。

upstream backend{ 
  server 192.168.1.100:9001 weight=1; 
  server 192.168.1.100:9002; 
  server 192.168.1.100:9003; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
} 
weight加权[加权轮询]

weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况。

upstream backend{ 
  server 192.168.1.100:9001 weight=10; 
  server 192.168.1.100:9002 weight=5; 
  server 192.168.1.100:9003 weight=3; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
}
ip_hash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,能保证其访问的还是后端web服务器A。

语法ip_hash;默认值—位置upstream
upstream backend{ 
  ip_hash; 
  server 192.168.1.100:9001; 
  server 192.168.1.100:9002; 
  server 192.168.1.100:9003; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
}

需要额外多说一点的是使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的请求少,而且设置后端服务器权重等方法将不起作用。可以采用redis来存储session。

least_conn

最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream backend{ 
  least_conn; 
  server 192.168.1.100:9001; 
  server 192.168.1.100:9002; 
  server 192.168.1.100:9003; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
}

此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

upstream backend{ 
  hash &request_uri; 
  server 192.168.1.100:9001; 
  server 192.168.1.100:9002; 
  server 192.168.1.100:9003; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
} 
fair

fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的fair负载均衡策略。

upstream backend{ 
  fair; 
  server 192.168.1.100:9001; 
  server 192.168.1.100:9002; 
  server 192.168.1.100:9003; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
}

但是如何直接使用会报错,因为fair属于第三方模块实现的负载均衡。需要添加nginx-upstream-fair ,如何添加对应的模块:

1.下载nginx-upstream-fair模块

下载地址为: https://github.com/gnosek/nginx-upstream-fair

2.将下载的文件上传到服务器并进行解压缩

unzip nginx-upstream-fair-master.zip

3.重命名资源

mv nginx-upstream-fair-master fair

4.使用./configure命令将资源添加到Nginx模块中

./configure --add-module=/root/fair

5.编译

make

编译可能会出现如下错误,ngx_http_upstream_srv_conf_t结构中缺少default_port

解决方案:

在Nginx的源码中 src/http/ngx_http_upstream.h,找到ngx_http_upstream_srv_conf_s,在模块中添加添加default_port属性

in_port_t default_port


然后再进行make.

6.更新nginx

6.1将sbin目录下的nginx进行备份

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold

6.2将安装目录下的objs中的nginx拷贝到sbin目录

cd objs 
cp nginx /usr/local/nginx/sbin

6.3更新nginx

cd ../ 
make upgrade

7.编译测试使用Nginx

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3988666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存