nginx 负载均衡策略和配置

Nginx支持的weight轮询(默认)、ip_hash、fair、url_hash这四种负载均衡调度算法

Nginx负载均衡策略

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,后端服务器分配的请求数基本一致,如果后端服务器“down 掉”,能自动剔除。

加权轮询

根据权重来进行轮询,权重高的服务器分配的请求更多,主要适应于后端服务器性能不均的情况,如新老服务器混用。

ip_hash

每个请求按访问 IP 的 hash 结果分配,这样每个访客固定访问一个后端服务器,主要用于
解决 session 的问题,如购物车类的应用。

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配,能够最大化地平衡各后端服务器的压力,可以适用于后端服务器性能不均衡的情况,也可以防止某台后端服务器性能不足的情况下还继续接收同样多的请求从而造成雪崩效应。

url_hash

按访问 URL 的 hash 结果来分配请求,每个 URL 定向到同一个后端服务器,适用于后端服务器能够将 URL 的响应结果缓存的情况。

参考文档

配置示例

配置效果是:
访问 http://10.130.135.bb:9888/nabs-route-api/route/getTestOne 时,会按权重访问
http://172.16.62.aa:9082/nabs-route-api/route/getTestOne 和 http://172.16.62.aa:9083/nabs-route-api/route/getTestOne

nginx.conf 文件配置

user  nginx;
worker_processes  auto;
worker_rlimit_nofile 65535;
worker_priority -10;
error_log  /opt/logs/nginx/error.log;

pid        /var/run/nginx.pid;

include modules.conf;

events {
    worker_connections  10240;
}


http {
    include       mime.types;
    server_tokens off;
    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"';

    #access_log  logs/access.log  main;
    log_format json_log escape=json '{'
        '"http_host": "$host",'
        '"remote_addr": "$remote_addr",'
        '"local_time": "$time_iso8601",'
        '"scheme": "$scheme",'
        '"request_method": "$request_method",'
        '"request_uri": "$uri",'
        '"request_args": "$args",'
        '"status": $status,'
        '"body_bytes_sent": $body_bytes_sent,'
        '"http_referer": "$http_referer",'
        '"http_user_agent": "$http_user_agent",'
        '"request_time": $request_time,'
        '"upstream_addr": "$upstream_addr",'
        '"upstream_status": "$upstream_status",'
        '"upstream_response_length": "$upstream_response_length",'
        '"upstream_response_time": "$upstream_response_time",'
        '"server_addr": "$server_addr:$server_port",'
        '"http_x_forwarded_for": "$http_x_forwarded_for",'
        '"connection_requests": $connection_requests,'
        '"unix_milliseconds": "$msec",'
        '"http_version": "$server_protocol",'
        '"istest": "$http_istest"'
    '}';

    access_log /opt/logs/nginx/access.log json_log;
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  20;
    keepalive_requests 100;

    gzip on;
    gzip_buffers 32 4k;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript ;
    gzip_disable 'MSIE [1-6]\.'; 
    gzip_vary on;

    resolver_timeout 3s;
    large_client_header_buffers 4 8k;
    client_max_body_size  20m;
    proxy_buffer_size  8k;
    proxy_buffering on;
    proxy_buffers 8 8k;
    proxy_busy_buffers_size 16k;

    include conf.d/*.conf;
	  

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

    ## 测试测试
	upstream mytest {  
		server 172.16.62.aa:9082 weight=1;    
		server 172.16.62.aa:9083 weight=1;  
    } 
	
    server {
        listen 9888;
		## nginx 安装服务器地址
        server_name 10.130.135.bb;

        location = /nabs-route-api/route/getTestOne {
            proxy_pass   http://mytest/nabs-route-api/route/getTestOne;  
            index  index.html index.htm;  
        }
    }
    ####

}

相关文档

a. PartOne 匹配模式: [=|||^~|@]
= : 表示精确匹配后面的url
~ : 表示正则匹配,但是区分大小写
~
: 正则匹配,不区分大小写
^~ : 表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
@ : “@” 定义一个命名的 location,使用在内部定向时,例如 error_page
上面定义了几个不同的符号,表示不同的匹配规则,那么先后顺序呢?

  1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。
  2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
  3. 正则表达式,在配置文件中定义的顺序。
  4. 如果第3条规则产生匹配的话,结果被使用。否则,使用第2条规则的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值