ngx_http_upstream_module模块

 

ngx_http_upstream_module模块: 将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用
upstream name { ... } 定义后端服务器组,会引入一个新的上下文  Context: http
upstream httpdsrvs {
    server...}
server address [parameters];
    在upstream上下文中server成员,以及相关的参数;Context:upstream
    address的表示格式:
        unix:/PATH/TO/SOME_SOCK_FILE
        IP[:PORT]
        HOSTNAME[:PORT]

parameters相关的参数:
weight=number             权重,默认为1,权重越高分配到需要处理的请求越多。此策略可以和ip_hash结合使用。此策略比较适合服务器的硬件配置差别比较大的情况。
max_conns=number         连接后端报务器最大并发活动连接数,1.11.5后支持
max_fails=number         失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用,默认为1
fail_timeout=time         后端服务器标记为不可用状态的连接超时时长,默认10s
backup                     将服务器标记为“备用”,即所有服务器均不可用时才启用
down                     标记为“不可用”,实现灰度发布
keepalive n             连接数N;为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管理的消耗
resolve                 当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不重启Nginx。

健康状态检测机制;常用参数:
interval=#检测的频率,默认为5秒;
fails=#判定服务器不可用的失败检测次数;默认为1次;
passes=#判定服务器可用的失败检测次数;默认为1次;
uri=uri做健康状态检测测试的目标uri;默认为/;
match=NAME健康状态检测的结果评估调用此处指定的match配置块;


调用算法:
wrr                        加权轮询 wrr,默认调度算法
ip_hash                    源地址hash调度方法,基于的客户端的remote_addr(源地址)做hash计算 .需要IP穿透。
least_conn                 最少连接调度算法,当server拥有不同的权重时其为wlc, 当所有后端主机连接数相同时,则使用wrr,适用于长连接
hash KEY [consistent]      (自定义)基于指定的key的hash表来实现对请求的调度,此处的key可以直接文本、变量或二者组合
    作用:将请求分类,同一类请求将发往同一个upstream server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用
    hash $request_uri consistent;     #基于用户请求的uri做hash    
    hash $remote_addr;                #等同ip_hash 
    hash $cookie_NAME;                #客户端请求的信息,服务端会生成会话信息,并标识一个的会话ID(sessionid),并通过setcookie中返回给客户端,客户端再次请求时会带有sessionid。                    
                                      nginx变量名    $cookie_NAME   如:hash cookie_sessionid   #  测试:curl -b sessionid=12345  www.abc.com



调用算法对比:http_upstream和LVS    
1.默认调度算法是wrr和 rr wrr    
2.ip_hash($remote_addr)和sh          
3.least_conn 和wlc  lc      
4.$request_uri consistent和dh


例:

upstream httpser {
  server 192.168.80.130:8080 weight=3 ;
  server 192.168.80.140:8080 weight=1 fail_timeout=5s max_fails=3 ;
  server 192.168.80.120 backup ;
 
  #ip_hash ;
  #least_conn;
  #hash cookie_sessionid;
}

server {
  listen 80;
  server_name upstream.zjol.com.cn;
  charset utf-8;

  location / {
    proxy_pass http://httpser;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }}

 

1.wrr
[root@localhost7e ~]# curl http://upstream.zjol.com.cn
192.168.80.130
[root@localhost7e ~]# curl http://upstream.zjol.com.cn
192.168.80.140
2.ip_hash
[root@localhost7e ~]# curl http://upstream.zjol.com.cn
192.168.80.130
[root@localhost7e ~]# curl http://upstream.zjol.com.cn
192.168.80.130

3.backup 备份服务器 和ip透传的日志
[root@localhost7e ~]# curl http://upstream.zjol.com.cn
192.168.80.120

cat /usr/local/nginx/logs/access.log
192.168.80.110 "-" - - [20/Jul/2022:11:08:00 +0800] "GET / HTTP/1.0" httpser - "-" "192.168.80.150" 192.168.80.150, 192.168.80.110


 

 

  

posted @ 2022-07-20 11:39  yuanbangchen  阅读(272)  评论(0编辑  收藏  举报