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

 更新时间:2022年09月13日 15:06:22   作者:恒悦sunsite  
nginx有一个最大的功能就是可以实现服务器的负载均衡,下面这篇文章主要给大家介绍了关于Nginx负载均衡之upstream模块简介与使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

一、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模块内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 详解Nginx反向代理WebSocket响应403的解决办法

    详解Nginx反向代理WebSocket响应403的解决办法

    本篇文章主要介绍了详解Nginx反向代理WebSocket响应403的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • FastDFS及Nginx整合实现代码解析

    FastDFS及Nginx整合实现代码解析

    这篇文章主要介绍了FastDFS及Nginx整合实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • linux(centos5.5)/windows下nginx开启phpinfo模式功能的配置方法分享

    linux(centos5.5)/windows下nginx开启phpinfo模式功能的配置方法分享

    某站点用到结合phpinfo功能的urlrewrite,在nginx中需要在nginx.conf文件中进行配置才可支持phpinfo
    2013-02-02
  • nginx配置多个站点共用80端口的解决方法

    nginx配置多个站点共用80端口的解决方法

    这篇文章主要介绍了nginx配置多个站点共用80端口的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • nginx设置资源缓存实战详解

    nginx设置资源缓存实战详解

    这篇文章主要介绍了nginx设置资源缓存实战详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Forever+nginx部署Node站点的方法示例

    Forever+nginx部署Node站点的方法示例

    这篇文章主要介绍了Forever+nginx部署Node站点的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • nginx实现动静分离的方法示例

    nginx实现动静分离的方法示例

    Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术,本文就详细的介绍一下如何使用,感兴趣的可以了解一下
    2021-11-11
  • nginx?rtmp模块编译?arm版本的问题

    nginx?rtmp模块编译?arm版本的问题

    这篇文章主要介绍了nginx?rtmp模块编译?arm版本的问题,pcre库和libz库都不用单独编译,在编译nginx时添加模块时一起编译,需要的朋友可以参考下
    2021-12-12
  • Nginx服务器的SSL证书配置以及对SSL的反向代理配置

    Nginx服务器的SSL证书配置以及对SSL的反向代理配置

    这篇文章主要介绍了Nginx服务器的SSL证书配置以及对SSL的反向代理配置方法,通常在开启全站HTTPS时会用到,需要的朋友可以参考下
    2016-01-01
  • nginx proxy_cache批量清除缓存的脚本介绍

    nginx proxy_cache批量清除缓存的脚本介绍

    今天小编就为大家分享一篇关于nginx proxy_cache批量清除缓存的脚本介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02

最新评论


http://www.vxiaotou.com