基础原理和算法解析 nginx的负载均衡算法有哪些( 二 )


功能:通过复用连接,降低 Nginx 与上游服务器建立、关闭连接的消耗,提升吞吐量的同时降低时延模块: ngx_http_upstream_keepalive_module 默认编译进 Nginx,通过 –without-http_upstream_keepalive_module 移除对上游服务器的 HTTP 头部设定proxy_http_version 1.1;proxy_set_header Connection "";upstream_keepalive 的指令Syntax: keepalive connections;Default: —Context: upstream# 1.15.3 非稳定版本新增命令Syntax: keepalive_requests number;Default: keepalive_requests 100; Context: upstreamSyntax: keepalive_timeout timeout;Default: keepalive_timeout 60s; Context: upstreamkeepalive connections;指定上游服务域名解析的 resolver 指令当使用域名访问上游服务时,可以指定一个 DNS 解析的地址,还可以设置超时等,这个时候就要用到 resolver 指令 。
Syntax: resolver address ... [valid=time] [ipv6=on|off];Default: —Context: http, server, locationSyntax: resolver_timeout time;Default: resolver_timeout 30s; Context: http, server, location实战下面我起了两个 Nginx 的进程,一个作为上游服务器,监听 8011 和 8012 端口,另一个作为反向代理向上游服务器发请求 。
上游服务器的配置如下,当请求是到达 8011 端口就返回 8011 server response. ,当请求到达 8012 端口返回 8012 server response.。
server {listen 8011;default_type text/plain;return 200 '8011 server response.n';}server {listen 8012;default_type text/plain;# client_body_in_single_buffer on;return 200 '8012 server response.n';}作为反向代理的 Nginx 服务器配置是这个样子的:
这里面 8011 端口和 8012 端口的区别在于 8011 端口设置了权重和对应的参数 。
upstream rrups {server 127.0.0.1:8011 weight=2 max_conns=2 max_fails=2 fail_timeout=5;server 127.0.0.1:8012;keepalive 32;}server {server_name rrups.ziyang.com;error_log myerror.log info;location /{proxy_pass http://rrups;proxy_http_version 1.1;proxy_set_header Connection "";}}两个 Nginx 都配置好之后,来测试一下:
?nginx curl rrups.ziyang.com8011 server response.?nginx curl rrups.ziyang.com8011 server response.?nginx curl rrups.ziyang.com8012 server response.由于 8011 端口的权重设置的是 2,所以根据 rr 算法,每次都是先两个连接负载到 8011 端口上然后是 8012 端口 。
这一节讲了 rr 负载均衡算法,rr 算法是所有负载均衡算法的基础,在其他负载均衡算法失效的情况下,Nginx 也会使用 rr 算法进行负载均衡 。
负载均衡哈希算法,ip_hash 与 hash 模块rr 轮询算法没有办法保证请求由某一台指定的服务器去处理,只能轮询处理请求,在 AKF 立方体中只能在 x 轴方向上进行水平扩展 。如果基于 z 轴扩展,就可以采用哈希算法保证某一类请求只由特定的服务器处理 。
功能:以客户端的 IP 地址作为 hash 算法的关键字,映射到特定的上游服务器中对 IPv4 地址使用前 3 个字节作为关键字,对 IPv6 则使用完整地址可以使用 rr 算法的参数可以基于 realip 模块修改用于执行算法的 IP 地址模块: ngx_http_upstream_ip_hash_module ,通过 –without-http_upstream_ip_hash_module 禁用模块指令的话比较简单,就是 ip_hash 出现在 upstream 上下文中 。
Syntax: ip_hash;Default: —Context: upstream这里面不得不提到的一个模块就是 realip 模块,哈希算法是根据 remote_addr 这个变量的值来进行哈希的,这个变量已经出现了好多次了,可见是多么常用的一个变量 。不熟悉的还是到前面Nginx 的 11 个阶段 重新复习一下 。
还有另外一个模块 upstream_hash 模块,这个模块可以基于任意的关键字实现 hash 算法的复杂均衡 。
基于任意关键字实现 hash 算法的负载均衡:upstream_hash 模块功能:通过指定关键字作为 hash key,基于 hash 算法映射到特定的上游服务器中关键字可以含有变量、字符串可以使用 rr 算法的参数模块: ngx_http_upstream_hash_module ,通过 –without-http_upstream_ip_hash_module 禁用模块指令的话就是 hash 指令,后面可以跟关键字作为 key 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: