Nginx负载均衡之upstream模块简介与使用详解

目录
  • 一、upstream模块简介
  • 二、负载均衡算法简介
    • 1、轮询
    • 2、权重轮询
    • 3、IP哈希
    • 4、最小连接数
    • 5、最短响应时间
    • 6、url_hash算法
  • 三、配置示例
  • 四、负载均衡效果展示
    • 1、部署2个web服务器
    • 2、配置nginx服务
    • 3、配置域名解析
    • 4、访问域名验证
    • 5、停止s142的web服务后再次访问
    • 6、修改调度算法为轮询
  • 总结

一、upstream模块简介

Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。ngx_http_upstream_module模块有允许Nginx定义一组或多组服务组,使用的可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上。upstream模块可以实现负载均衡,其实隐含了一个重要功能那就是冗余,在一个web节点故障的时候,配置了upstream时可以自动切换到正常工作的节点。

二、负载均衡算法简介

调度算法一般分为两类:第一类为静态调度算法,即负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器的情。第二类为动态调度算法,即负载均衡器会根据后端节点的当前状态来决定是否分发请求。

1、轮询

rr 轮循即round robin 默认调度算法,静态调度算法。客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于 LVS 中的 rr 算法,如果后端节点服务器宕机(默认情况下nginx 只检测80端口)。宕机的服务器会自动从节点服务器池中剔除,以便客户端的用户访问不受影响。新的请求会分配给正产的服务器。

2、权重轮询

wrr即weight 权重轮循,静态调度算法。在 rr 轮循算法的基础上加上权重,即为权重轮循算法,当使用该算法时,权重和用户访问成正比,权重值越大,被转发的请求也就越多。可以根据服务器的配置和性能指定权重值大小,有效解决新旧服务器性能不均带来的请求分配问题。

3、IP哈希

ip_hash是静态调度算法,每个请求按客户端 IP 的 hash 结果分配,当新的请求到达时,先将其客户端IP通过哈希算法哈希出一个值,在随后的客户端请求中,客户 IP 的哈希值只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的 session 共享问题,但有时会导致请求分配不均,即无法保证 1:1 的负载均衡,因为在国内大多数公司都是 NAT 上网模式,多个客户端会对应一个外部 IP,所以,这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。LVS 负载均衡的 -P 参数、keepalived 配置里的 persistence_timeout 50 参数都类似这个 Nginx 里的 ip_hash 参数,其功能均为解决动态网页的 session 共享问题。

4、最小连接数

least_conn是动态调度算法,会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。

5、最短响应时间

最短响应时间(fair)调度算法是动态调度算法,会根据后端节点服务器的响应时间来分配请求,响应时间端的优先分配。这是更加智能的调度算法。此种算法可以依据页面大小和加载时间长短只能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 调度算法的,如果需要使用这种调度算法,必须下载 Nginx 的相关模块 upstream_fair。

6、url_hash算法

url_hash算法是动态调度算法,按访问 URL 的 hash 结果来分配请求,使每个 URL 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率命中率。(多用于后端服务器为缓存时的场景下)Nginx 本身是不支持 rul_hash的,如果需要使用这种调度算法,必须安装 Nginx 的hash 模块软件包。

三、配置示例

1、配置示例模板

upstream backend {
    server backend1.example.com       weight=5;  #执行realserver,可以赋权重
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;  #backup表示该节点为热备节点,激活节点失效时启用
    server backup2.example.com:8080   down;  #下线服务器,可以在real服务器需要维护时配置
}

server {
   listen	80;  #listen、server_name这些正常配置
   server_name	www.test.com;
    location / {
        proxy_pass http://backend;  ##反向代理执行定义的upstream名字
    }
}

2、权重轮询配置示例

upstream  show {
        server 192.168.0.141 weight=1;
        server 192.168.0.142 weight=2;
     }

3、ip_hash配置示例

 upstream show {
        ip_hash;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

4、fair配置示例

 upstream show {
        fair;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

5、least_conn配置示例

 upstream show {
        least_conn;
        server 192.168.0.141 ;
        server 192.168.0.142 ;
     }

6、url_hash配置示例

 upstream show {
        server 192.168.0.141 ;
        server 192.168.0.142 ;
        hash $request_uri;
        hash_method crc32;
     }

四、负载均衡效果展示

1、部署2个web服务器

分别在s142主机和s142主机部署2个Tomcat服务,服务访问页面内容如下:

2、配置nginx服务

upstream show {
    ip_hash ;  #使用ip_hash负载均衡调度算法
    server 192.168.10.141:8080 ;
    server 192.168.10.142:8080 ;
    }
server {
    listen	80;  #listen、server_name这些正常配置
    server_name	www.test.com;
    access_log /var/log/nginx/test.access.log;
    location / {
        proxy_pass http://show;  ##反向代理执行定义的upstream名字
    }
}

3、配置域名解析

这是模拟测试,使用测试域名,通过修改hosts文件(C:\Windows\System32\drivers\etc\hosts)实现直接通过域名访问,实际应用需要申请域名并解析。

4、访问域名验证

5、停止s142的web服务后再次访问

停止s142的web服务后应用自动切换到了s141节点,其实upstream模块可以作为负载均衡,更重要的是实现冗余,如果是单机部署的web应用在出现节点故障时服务即无法访问,通过upstream可以实现多节点冗余。

6、修改调度算法为轮询

总结

到此这篇关于Nginx负载均衡之upstream模块简介与使用的文章就介绍到这了,更多相关Nginx负载均衡upstream模块内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于nginx没有跳转到upstream地址的解决

    前言 今天在nginx碰到一个很奇怪的问题,在前端tomcat跳转页面的时候跳转的是upstream的地址,直接就报404,但是有些页面访问又是正常的. http://tomcat/tomcat-web/account/index 如果直接用内网ip访问是正常的,所以可以判定是nginx的问题,nginx配置如下 upstream tomcat { server 192.168.11.172:8061; server 192.168.11.172:8062; ip_hash; } server

  • 详解nginx upstream 配置和作用

    配置例子 upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backe

  • Nginx upstream的5种权重分配方式分享

    1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 例如: 复制代码 代码如下: upstream backend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; } 3.ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决se

  • Nginx负载均衡之upstream模块简介与使用详解

    目录 一.upstream模块简介 二.负载均衡算法简介 1.轮询 2.权重轮询 3.IP哈希 4.最小连接数 5.最短响应时间 6.url_hash算法 三.配置示例 四.负载均衡效果展示 1.部署2个web服务器 2.配置nginx服务 3.配置域名解析 4.访问域名验证 5.停止s142的web服务后再次访问 6.修改调度算法为轮询 总结 一.upstream模块简介 Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass

  • Nginx负载均衡详细介绍

    如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.因此,这时候的负载均衡就会大显身手了,它会自动剔除挂掉的服务器. 下面简单的介绍下我使用Nginx做负载的体会 下载---安装Nginx这些不介绍了,前篇有介绍. windows和Linux下配置Nginx负载的写法一样,故不分开介绍. Nginx负载均衡一些基础知识: nginx 的 upstream目前支持 4 种方式的分配 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.

  • 浅析Nginx 负载均衡4种模式

    4 种负载均衡算法 upstream 支持4种负载均衡调度算法: A)轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器; B)ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器.可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题. C)url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器.后台服务器为缓存的时候效率. D)fair:这是比上面两个更加智能的负载均衡算法.此种算法可以依据

  • Nginx 负载均衡算法及故障转移解析

    概述 Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器),负载均衡.故障转移.失败重试.容错.健康检查等. 当上游服务器(真实业务逻辑访问的服务器)发生故障时,可以转移到其他上游服务器(真实业务逻辑访问的服务器). 配置 upstream backServer{ server 127.0.0.1:8080; server 127.0.0.1:8081; } server { listen 80; server_name www.itmayiedu.com; location / { #

  • nginx负载均衡配置,宕机自动切换方式

    严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问. 下面列出这两个模块中相关的指令: 语法: proxy_connect_timeout time; 默认值: proxy_connect_timeout 60s; 设置与后端服务器建立连接的超时时间.应该注意这个超时一般不可能大于75秒. 语法

  • nginx 负载均衡轮询方式配置详解

    一.概述 Nginx的upstream目前支持的分配算法:1.round-robin 轮询1:1轮流处理请求(默认)每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询.2.weight 权重(加权轮询)通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况.3.ip_hash 哈希算法每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题.应用服务器如果故障需要手工down掉

  • Nginx负载均衡配置简单配置方法

    背景 当一个网站从小到大,访问量逐渐增大现有的服务器已经支撑不住,一般的解决方案就是缓存.加服务器.数据库读写分离.实行负载均衡分布式等等,本人对这些技术方案都没有在项目中具体的实践过, 但是一直听同事过说起,利用空闲时间自我学习了解下: 负载均衡 什么是负载均衡,就是当快要承受不住的时候,又给你一台服务器来分担压力,请求会分配到两台服务器上,两台服务器上部署相同的内容相当于一个分身,可以处理相同的事情: Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转

  • nginx 负载均衡的简单配置方法

    复制代码 代码如下: http      {        upstream www.test2.com {                  server 10.1.165.36:80  weight = 3;                  server 10.249.198.235;               server 10.1.168.1  down;                server 10.1.168.2  backup;              #ip_hash;

  • 使用Docker Compose 实现nginx负载均衡的方法步骤

    以Docker的网络管理,容器的IP设置为基础知识实现Nginx负载均衡 查看所有docker网络 docker network ls /* NETWORK ID NAME DRIVER SCOPE b832b168ca9a bridge bridge local 373be82d3a6a composetest_default bridge local a360425082c4 host host local 154f600f0e90 none null local */ // compose

  • Linux下Nginx负载均衡多个tomcat配置的方法步骤

    Linux下安装nginx和安装多个tomcat的方法这里不过多介绍,不清楚的可参考: Linux安装nginx: https://www.jb51.net/article/159519.htm Linux安装多个tomcat: https://www.jb51.net/article/159521.htm 当我们服务器安装好了nginx,并且安装了多台tomcat,那么我们现在可以试着玩玩nginx的负载均衡. 先简单介绍我的运行环境 一台阿里云服务器, Linux系统,jdk1.8, 已安装

随机推荐