nginx负载均衡如何实现?

作者: 全栈弄潮儿 | 来源:发表于2019-09-19 22:48 被阅读0次

    什么是nginx?

    Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的Web和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

    在高连接并发的情况下,Nginx是Apache服务器不错的替代品。

    nginx服务器基本特征

    • 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲
    • 无缓存的反向代理加速,简单的负载均衡和容错
    • FastCGI,简单的负载均衡和容错
    • 模块化的结构。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或 其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待
    • 支持SSL 和 TLSSNI

    nginx常用功能

    1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

    Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

    2、负载均衡

    Nginx的负载均衡是通过upstream实现的。

    eg.

    upstream test.aaa { 
        ip_hash;  ## 调度算法
        server 192.168.1.10:80; 
        server 192.168.1.11:80 down; 
        server 192.168.1.12:8009 max_fails=3 fail_timeout=20s; 
        server 192.168.1.13:8080; 
     } 
    server { 
        listen       80;
        server_name  localhost;
        location / { 
        proxy_pass http://test.aaa; 
        } 
     } 
    

    upstream 支持的负载均衡算法:

    • 轮询(默认)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。

    • weight

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    • fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。

    • url_hash(第三方)

    按访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,后端服务器为缓存时比较适用。另外,在upstream中加入hash语句后,server语句不能写入weight等其他参数。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

    upstream 支持的状态参数

    • down,表示当前的server暂时不参与负载均衡。
    • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
    • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
    • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

    注,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

    3、web缓存

    Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。


    经典前端面试题每日更新,欢迎参与讨论,地址:https://github.com/daily-interview/fe-interview


    更多angular1/2/4/5、ionic1/2/3、react、vue、微信小程序、nodejs等技术文章、视频教程和开源项目,请关注微信公众号——全栈弄潮儿

    qrcode_for_gh_8.jpg

    相关文章

      网友评论

        本文标题:nginx负载均衡如何实现?

        本文链接:https://www.haomeiwen.com/subject/smkductx.html