• nginx负载均衡及配置


    nginx负载均衡及配置

    1 负载均衡概述

    	负载均衡由来是因为当一台服务器单位时间内的访问量很大时,此时服务器的压力也会很大,当超过自身承受能力时,服务器就会崩溃.为避免让服务器崩溃,用户拥有更好的体验,就诞生了负载均衡来分担服务器压力.
    	
    	负载均衡实质上就是用反向代理的原理实现的,是一种优化服务器资源,合理处理高并发的一种技术,能够平衡个服务器的压力,减少用户请求等待时间,并确保容错.一般采用nginx作为一种高效的HTTP负载均衡服务器,将流量分配到多个应用服务器上以提高性能,可扩展和高可用性.
    	
    	原理: 内网可以建很多服务器,组成服务器集群,当用户访问该网站时,先访问公网中间服务器,中间服务器根据算法合理分配到内网服务器,分担服务器的压力,因此户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
    
    	nginx反向代理实现包括下面这些负载均衡HTTP、HTTPS、FastCGI、uwsgi,SCGI和memcached。
    要配置HTTPS的负载均衡,只需使用'http'开头的协议。
    当要设置FastCGI,uwsgi,SCGI,或者memcached的负载平衡,分别使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。
    	
    

    2 负载均衡的常见平衡机制

    1 轮询(round-robin) :以轮询方式将请求分配到不同服务器上,每个请求按时间顺序逐一分配到不同的后端服务器, 如果后端服务器挂掉,自动剔除,保证正常的服务。

    
    配置1:
    upstream server_back {  #nginx分发服务请求
        server 192.168.162.49;
        server 192.168.162.50;
    }
    
    配置2:
    http {
        upstream servergroup {  # 服务组接受请求,nginx轮询分发服务请求
            server srv1.demo.com;
            server srv2.demo.com;
            server srv3.demo.com;
        } 
        server {
            listen 80;
            location / {
                proxy_pass http://servergroup; #所有的请求被代理到servergroup服务组
            }
        }
    }
     proxy_pass  后面是被代理的服务器ip,也可以是主机名,域名,ip端口模式
     upstream    设定负载均衡后台服务器列表
    

    2 权重负载均衡(weight):如果没有配置权重,每个服务器的负载都是一样的,当出现服务器性能不均时,采用 权重轮询,指定的服务器的权重参数,权重占比为负载均衡决定的一部分。权重大负载就大。

    upstream server_back { 
        server 192.168.162.49 weight=3;
        server 192.168.162.50 weight=7;
    }
    

    3 最少连接数(least-connected):将下一个请求分配到连接数最少的那台服务器上,当一些请求需要更长的时 间响应, 最少连接可以更公平地控制应用程序实例的负载。nginx会将请求转发到负载较少的服务器。

    upstream servergroup { 
    	    least_conn;
            server srv1.demo.com;
            server srv2.demo.com;
            server srv3.demo.com;
        } 
    

    4 ip-hash :基于客户端的IP地址。原因时负载均衡每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样明显不太妥。采用ip_hash解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

    每个请求按照IP hash的结果分配,因此请求被固定到某一个后端服务器,也可以解决session问题

    upstream servergroup { 
    	    ip-hash;
            server srv1.demo.com;
            server srv2.demo.com;
            server srv3.demo.com;
        } 
    

    附上一个实例:

    #user  nobody;
    worker_processes  4;
    events {
        # 最大并发数
        worker_connections  1024;
    }
    http{
        # 待选服务器列表
        upstream myserver{
            # ip_hash指令,将同一用户引入同一服务器。
            ip_hash;
            server 125.219.42.4 fail_timeout=60s; #max_fails失败后暂定时间60s
            server 172.31.2.183;
            }
    
        server{
                    # 监听端口
                    listen 80;
                    # 根目录下
                    location / {
                        # 选择哪个服务器列表
                        proxy_pass http://myserver;
                    }
                }
    }
    
    max_fails  允许请求失败的次数默认为1
    fail_timeout=60s  fail_timeout=60s失败暂停的时间 
    down 表示当前的服务器暂时不参与负载 
    backup  所有非backup机器忙的时候会请求backup,因此其压力会最轻
    

    参考:http://www.ttlsa.com/nginx/using-nginx-as-http-loadbalancer/ 非常感谢

    更多:http://nginx.com/blog/load-balancing-with-nginx-plus/

    http://nginx.com/blog/load-balancing-with-nginx-plus-part2/

  • 相关阅读:
    Linux shell(3)
    Linux shell 编写(2)
    Linux shell 编写(1)
    团队冲刺(一)
    峦码团队任务表
    电梯演讲&界面展示说明
    第一次小组会议——NABCD讨论
    开发项目&团队介绍
    Linux中查看各文件夹大小命令:du -h --max-depth=1
    shell脚本[] [[]] -n -z 的含义解析
  • 原文地址:https://www.cnblogs.com/why957/p/9095575.html
Copyright © 2020-2023  润新知