• 转载:Nginx负载均衡的5种策略


    nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
    
    nginx的upstream目前支持的5种方式的分配
    
    
    1、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 
    upstream backserver { 
    server 192.168.0.14; 
    server 192.168.0.15; 
    } 
    
    2、指定权重
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 
    upstream backserver { 
    server 192.168.0.14 weight=10; 
    server 192.168.0.15 weight=10; 
    } 
    
    3、IP绑定 ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 
    upstream backserver { 
    ip_hash; 
    server 192.168.0.14:88; 
    server 192.168.0.15:80; 
    } 
    
    4、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。 
    upstream backserver { 
    server server1; 
    server server2; 
    fair; 
    } 
    
    5、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 
    upstream backserver { 
    server squid1:3128; 
    server squid2:3128; 
    hash $request_uri; 
    hash_method crc32; 
    } 
    
    在需要使用负载均衡的server中增加 
    
    proxy_pass http://backserver/; 
    upstream backserver{ 
    ip_hash; 
    server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) 
    server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) 
    } 
    
    max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 
    
    
    fail_timeout:max_fails次失败后,暂停的时间
    

     

    发现目前两台双机server,配置差异很大,用的是默认的轮询机制,

    不过弱一点的server也完全胜任了目前的压力。

    。。。。。。 

    #运行用户
    user  nginx;
    #启动进程,通常设置成和cpu的数量相等
    worker_processes 4;
    
    #全局错误日志及PID文件
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    #工作模式及连接数上限
    worker_rlimit_nofile 100000;
    
    events {
    	#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
        #仅用于linux2.6以上内核,可以大大提高nginx的性能
    	
    	#单个后台worker process进程的最大并发链接数
        worker_connections  10240;
    	
    	# 并发总数是 worker_processes 和 worker_connections 的乘积
        # 即 max_clients = worker_processes * worker_connections
        # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么
        # 为什么上面反向代理要除以4,应该说是一个经验值
        # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
        # worker_connections 值的设置跟物理内存大小有关
        # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
        # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
        # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
        # $ cat /proc/sys/fs/file-max
        # 输出 34336
        # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
        # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
        # 使得并发总数小于操作系统可以打开的最大文件数目
        # 其实质也就是根据主机的物理CPU和内存进行配置
        # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
        # ulimit -SHn 65535
    }
    
    
    http {
    	#设定mime类型,类型由mime.type文件定义
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
    	#设定日志格式
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    					  
    	#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
        #对于普通应用,必须设为 on,
        #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
        #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        tcp_nopush     on;
    
    
        #连接超时时间
        #keepalive_timeout  0;
        keepalive_timeout  600;
     
    	#开启gzip压缩  
        #gzip  on;
        server_tokens off;
        server_name_in_redirect off;
    	
        #设定请求缓冲
        more_set_headers 'Pragma: no-cache';
       #more_set_headers 'Cache-Control: no-cache,no-store';
        more_set_headers 'Cache-Control: no-cache,no-store,must-revalidate,private';
        more_set_headers 'X-Content-Type-Options: nosniff';
        more_set_headers 'X-Frame-Options: SAMEORIGIN';
       #more_set_headers 'Set-Cookie: secure; HttpOnly';
        client_header_timeout 45s;
        client_body_timeout 60s;
        limit_req_zone  $binary_remote_addr  zone=one:10m   rate=30r/s;
    
       #upstream form backends
        upstream coach {
        server 10.215.65.55:8009;
        server 10.215.70.172:8009;
        keepalive 600;
        }
    
        include /etc/nginx/conf.d/*.conf;
    }
    

      

    /etc/init.d/nginx stop
    /etc/init.d/nginx start

  • 相关阅读:
    使用批处理文件(.bat)启动Java程序
    VARCHAR2(%n)和VARCHAR2(%n char)区别
    Truncate Table
    Ext4之杂七杂八
    Oracle导表
    关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题
    Ext4真是难(展开表格行,显示图表)
    Hadoop学习笔记【入门】
    魅蓝note 做Android真机调试
    11-java学习笔记-反射
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/9259534.html
Copyright © 2020-2023  润新知