Title

利用Nginx实现负载均衡及参数详解

  • 作者:Mr_Yan
  • linux
  • 时间:2018-09-11 07:44:53
  • 483人已阅读


什么是负载均衡,负载均很的作用是什么:

负载均衡_百度百科

个人理解来看,说的通俗易懂点就是,一个人一天要搬1000块砖,那么这个人会很累,甚至可能般不完,

但是如果把这1000块砖分给10个人来般,那么就会减少很大的工作压力,并且还可以及时的把活干完。


那么对于Web 应用来说也是同样的道理,假如一个网站每天一千万的访问量,如果只有一台服务器的话,

那么服务肯定会垮掉,并且也不能及时响应。这个时候就用到服务器集群了,也就是负载均衡配置。


示意图:



NGINX 反向代理实现负载均衡的配置


参数解释

1) 轮询 (默认rr)

每个请求按时间顺序逐一分配到后端不同的服务器,如果后端某台服务器DOWN掉 ,自动剔除,待恢复自动添加上

2)Weight 权重

指定轮询权重,权重越高,处理的请求就越多,weight和访问比率成正比,用与后端服务器性能不均的情况

3)ip_hash

每个请求根据访问的IP的hash结果分配,这样没个访客固定访问一个后端服务器,可以解决SESSION的问题,用于登录会话

4)fair (第三方)

按后端服务器的响应时间来分配,响应短的优先分配

5)url_hash(第三方)

upstreamd的fail_timeout和max_failsc 参数是用来判断负载均衡upstream中的某个server是否失效

在fail_timeout时间内,nginx与upstream中的某个server的链接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的fail_timeout时间内,nginx不再将请求分发给失效的server


 应用集群配置,根据后端实际情况修改即可,phpweb1为负载均衡名称,可以任意指定

#但必须跟VHOSTS.conf虚拟主机的pass段一致,否则不能转发后端的请求,weight 配置权重,在fail_timeout 内检查max-fails次数,失败则剔除均衡


nginx.conf 配置

user www-data;
 worker_processes 4;
 worker_cpu_affinity 00000001  00000010   00000100   00001000;
 pid /run/nginx.pid;
 events {
     use epoll;
     worker_connections 768;
 }
 http {
     include /etc/nginx/mime.types;
     default_type application/octet-stream;
 fastcgi_intercept_errors on;
# charset utf-8;
# charset gb2312;
 server_names_hash_bucket_size 128;
 client_header_buffer_size 4k;
 large_client_header_buffers 4 32k;
 client_max_body_size 300m;

 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 65;
 client_body_buffer_size 512k;

 proxy_connect_timeout 5;
 proxy_read_timeout 60;
 proxy_send_timeout 5;
 proxy_buffer_size 16k;
 proxy_buffers 4 64k;
 proxy_busy_buffers_size 128k;
 proxy_temp_file_write_size 128k;


 gzip on;
 gzip_min_length 1k;
 gzip_buffers 4 16k;
 gzip_http_version 1.1;
 gzip_comp_level 2;
 gzip_types text/plain application/x-javascript text/css application/xml;
 gzip_vary on;

 log_format main '$remote_addr -  $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer"'
 '"$http_user_agent" $request_time ';


#负载均衡配置
 upstream  phpweb1 {
 server 192.168.140.137 weight=2 max_fails=2 fail_timeout=30s;
 server 192.168.140.140 weight=1 max_fails=2 fail_timeout=30s;
 }

 include vhosts.conf;

 }


vhosts.conf

server{

   listen 80;

       server_name 192.168.140.129;
       index index . html index . php;

       root / home / www;

       location /
       {

           proxy_next_upstream http_502  http_504 error timeout invalid_header;

       proxy_set_header Host $host;
       proxy_set_header X - Real - IP $remote_addr;
       proxy_set_header X - Forwarded -For $proxy_add_x_forwarded_for;

#必须添加 proxy_pass 参数 并且参数必须跟nginx.conf   upstream 名称一致
        proxy_pass http://phpweb1;

       }
       }


测试是否生效 ,例如当前ip为192.168.140.129, 则浏览器访问192.168.140.129,  由于上面192.168.140.137的权重较大,我们访问的实际相应的服务器则为137,如图

image.png


然后我们可以手动关闭137这台服务,看看是否会由140响应请求

image.png

image.png


经过测试说明已经配置成功!


本文为MrYan原创文章,转载无需和我联系,但请注明来自MrYan个人博客:www.mryan888.com

文章评论

Top