本文共 4472 字,大约阅读时间需要 14 分钟。
Nginx 负载均衡
1. Nginx 负载均衡基础知识
nginx 的 upstream 目前支持 4 种方式的分配 1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 2)、weight 指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 3)、ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 4)、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 5)、url_hash(第三方)2. Nginx 负载均衡实例 1
upstream bbs.linuxtone.org { #定义负载均衡设备的 Ip 及设备状态 server 127.0.0.1:9090 down; server 127.0.0.1:8080 weight=2; server 127.0.0.1:6060; server 127.0.0.1:7070 backup; } 在需要使用负载均衡的 server 中增加 proxy_pass http://bbs.linuxtone.org/;每个设备的状态设置为:
a) down 表示单前的 server 暂时不参与负载 b) weight 默认为 1.weight 越大,负载的权重就越大。 c) max_fails : 允许请求失败的次数默认为 1.当超过最大次数时, 返回 proxy_next_upstream 模 块定义的错误 d) fail_timeout:max_fails 次失败后,暂停的时间。 e) backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器 压力会最轻。nginx 支持同时设置多组的负载均衡,用来给不用的 server 来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug client_body_temp_path 设置记录文件的目录 可以设置最多 3 层目录 location 对 URL 进行匹配.可以进行重定向或者进行新的代理 负载均衡3. Nginx 负载均衡实例 2
按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓 存时比较有效,也可以用作提高 Squid 缓存命中率. 简单的负载均等实例: #vi nginx.conf //nginx 主配置文件核心配置 ………. #loadblance my.linuxtone.org upstream my.linuxtone.org { ip_hash; server 127.0.0.1:8080; server 192.168.169.136:8080; server 219.101.75.138:8080; server 192.168.169.117; server 192.168.169.118; server 192.168.169.119; } ………….. include vhosts/linuxtone_lb.conf; ……… # vi proxy.conf proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 256k; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 60; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; proxy_store on; proxy_store_access user:rw group:rw all:r; #nginx cache #client_body_temp_path /data/nginx_cache/client_body 1 2; proxy_temp_path /data/nginx_cache/proxy_temp 1 2; #vi linuxtone_lb.conf server { listen 80; server_name my.linuxtone.org; index index.php; root /data/www/wwwroot/mylinuxtone; if (-f $request_filename) { break; } if (-f $request_filename/index.php) { rewrite (.*) $1/index.php break; } error_page 403 http://my.linuxtone.org/member.php?m=user&a=login; location / { if ( !-e $request_filename) { proxy_pass http://my.linuxtone.org; break; } include /usr/local/nginx/conf/proxy.conf; } }
使用负载均衡的话,可以修改配置http节点如下:
#设定http服务器,利用它的反向代理功能提供负载均衡支持http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #省略上文有的一些配置节点 #。。。。。。。。。。 #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.1x:3128 weight=5; #本机上的Squid开启3128端口,不是必须要squid server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; } upstream mysvr2 { #weigth参数表示权值,权值越高被分配到的几率越大 server 192.168.8.x:80 weight=1; server 192.168.8.x:80 weight=6; } #第一个虚拟服务器 server { #侦听192.168.8.x的80端口 listen 80; server_name 192.168.8.x; #对aspx后缀的进行负载均衡请求 location ~ .*\.aspx$ { #定义服务器的默认网站根目录位置 root /root; #定义首页索引文件的名称 index index.php index.html index.htm; #请求转向mysvr 定义的服务器列表 proxy_pass http://mysvr ; #以下是一些反向代理的配置可删除. proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #允许客户端请求的最大单文件字节数 client_max_body_size 10m; #缓冲区代理缓冲用户端请求的最大字节数, client_body_buffer_size 128k; #nginx跟后端服务器连接超时时间(代理连接超时) proxy_connect_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) proxy_read_timeout 90; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_buffers 4 32k; #高负荷下缓冲大小(proxy_buffers*2) proxy_busy_buffers_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 proxy_temp_file_write_size 64k; } }}
转载地址:http://kwews.baihongyu.com/