• 【Nginx】6. 负载均衡详解


    企业在解决高并发问题时,一般有两个方向的处理策略:

    • 在硬件上:添加负载均衡器分发大量请求,
    • 在软件上:在高并发瓶颈处(数据库、web服务器两处)添加解决方案。

    其中web服务器一层最常用的的添加负载方案就是:使用nginx实现负载均衡。当并发量增大到一定程度,可将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。

    负载均衡的作用:

    • 转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
    • 故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
    • 恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

    1.Nginx的负载分发策略

    Nginx 的 upstream目前支持的分配算法:

    1、轮询(默认):1比1轮流处理请求。每个请求按时间顺序逐一分配到不同的应用服务器。(让过来的请求依次访问服务器。)

    如果应用服务器down掉,自动剔除,剩下的继续轮询。

    img

    2、权重(加权轮询):通过配置权重,指定轮询几率,权重和访问比率成正比,用于服务器性能不均的情况。(根据不同的权重来分发各服务器上的请求数量)

    img

    3、iphash算法:对客户端请求的ip进行hash操作,然后根据hash结果,将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

    img


    2.Nginx实现负载均衡

    配置Nginx的负载均衡与分发策略:通过在upstream参数中,添加 应用服务器IP 和 指定参数 即可实现。

    下面的配置是:Nginx代理服务器将到http://vccloud的请求,分别代理分发到 192.168.1.129:80 和 192.168.1.130:80 服务器上。

    # 配置被转发的服务器,其中的 ip 推荐使用内网ip,可以提高访问速度
    upstream vccloud { 	
    	server 192.168.1.129:80 weight=1;  # weight:权重,数字越大,权越高
    	server 192.168.1.130:80 weight=2;
    }
    
    # upstream vccloud { 
    #   ip_hash;  # Nginx会让相同的客户端ip请求相同的服务器
    # 	server 192.168.1.128:80;  # 缺省配置就是轮询策略,权重默认为1
    #	server 192.168.1.129:80; 
    # }
    
    server {
    	listen 80;
    	server_name localhost;
        location / {         
    		proxy_pass  http://vccloud;  # 将代理转发给upstream中配置的服务器去处理。这里的http://后的值必须和upstream后面的值一致
    	}
    }
    

    通过以上配置,可以实现,在访问 http://vccloud 时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在代理服务器将请求转发给目的主机时,读取upstream为 vccloud 的地址,读取分发策略,根据配置分发请求到两个服务器上。


    3.Nginx其他配置

    upstream myServer {    
    	# 1、表示单前的server暂时不参与负载。
        server 192.168.72.49:9090 down;  
        
        # 2、3次请求失败后,暂停服务20s。允许请求失败的次数默认为:1,默认的暂停服务时间:10s。
        server 192.168.72.49:6060 max_fails=3 fail_timeout=20s;  
        
        # 3、热备:其它所有的非backup机器down或忙的时候,请求backup机器。所以这台机器压力会最轻。
        server 192.168.72.49:7070 backup;  
    }  
    
    
  • 相关阅读:
    upload1
    web2
    自动生成代码,简化开发
    rabbitmq简易安装
    jenkin安装
    mysql 数据插入为问号 ?
    git 基础复习
    git 使用,强制推远程仓库
    Spring 源码解析(持续集成,哈哈)
    ContainerBase.addChild: start: 错误
  • 原文地址:https://www.cnblogs.com/mind18/p/15359157.html
Copyright © 2020-2023  润新知