05.24 nginx负载均衡

第一章 集群的优势特点

一些国家重要的计算密集型应用(如:天气预报、核试验模拟等),需要计算机有很强的运算处理能力。以全世界现有的技术,即使是大型机,其计算能力也是有限的,很难单独完成此任务。因为计算时间可能会相当长,也许几天,甚至纪念或更久,因此,对于这类复杂的计算业务,便使用了计算机集群技术,集中有几十上百台,甚至成千上万台计算机进行计算。


第二章 集群的常见分类

负载均衡集群(Load balancing clusters),简称LBC或LB
高可用性集群(High-availability clusters)简称HAC
高性能计算集群(High-performance clusters)简称HPC
网络计算(Grid computing)


第三章 负载均衡集群的作用

  1. 分担用户访问请求及数据流量(负载均衡)。
  2. 保持业务连续性,即7*24小时服务(高可用性)。
  3. 应用于web业务及数据库从库(读)等服务器的业务。
  4. 负载均衡集群典型的开源软件包括LVS、Nginx Haproxy等。

这里写图片描述


第四章 高可用性集群

高可用性集群常用的开源软件包括Keepalived、Hearbeat等
这里写图片描述


第五章 企业中常见软硬件介绍

互联网企业常用的开源集群软件有:Nginx LVS Haproxy Keepalived Hearbeat
应用层(http、https)
传输层(tcp)
互联网企业常用的商业集群硬件有:F5、Netscaler、Radware、A10等。工作模式相当于haproxy的工作模式。
这里写图片描述


第六章 企业中常见软硬件选择

  1. 当企业业务重要,技术力量又薄弱,并且希望出钱购买产品及获取更好的服务时,可以选择硬件负载均衡产品,如F5、Netscaler、Radware等,此类公司多为传统的大兴非互联网企业,如银行、证券、金融、宝马、奔驰等。
  2. 对于门户网站来说,大多会并用软件及硬件产品来分担单一产品的风险,如淘宝、腾讯、新浪等。融资了的企业会购买硬件的产品,如赶集等网站。
  3. 中小型互联网企业,由于起步阶段无利润可赚或者利润很低,会希望通过使用开源免费的方案来解决问题,因此会雇佣专门的运维人员进行维护。

第七章 反向代理与负载均衡概念

严格的说,Nginx仅仅是作为Nginx Proxy反向代理使用的,因此这个反向代理功能表现的效果是负载均衡的效果,所以本文称之为Nginx负载均衡。

普通负载均衡软件,例如LVS。其实现的功能只是对请求数据包的转发(也可能会改成数据包)、传递,其中DR模式明显的特征是从负载均衡下面的节点服务来看,接受到的请求还是来自访问负载均衡器的客户端的真实用户,而反向代理就不一样了,反向代理接收访问用户的请求后,会代理用户重新发起请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,访问的节点服务器的客户端用户就是反向代理服务器了,而非真是的的网站访问用户。


第八章 负载均衡的组件模块

Nginx http功能模块模块说明
ngx_http_proxy_moduleproxy代理模块,用于把请求后抛给服务器节点或upstream服务器池。
ngx_http_upstream_module负载均衡该模块,可以实现网站的负载均衡功能及节点的健康检查。创建了一个池子,web服务器

第九章 配置nginx web服务

1. 配置文件修改

worker_processes  1;
events {
        worker_connections  1024;
}
http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

        server {
                listen       80;
                server_name  www.etiantian.org;
                location / {
                        root   html/www;
                        index  index.html index.htm;
                }
                access_log  logs/access_www.log  main;
        }
        server {
                listen       80;
                server_name  bbs.etiantian.org;
                location / {
                        root   html/bbs;
                        index  index.html index.htm;
                }
                access_log  logs/access_bbs.log  main;
        }
}

2. 创建对应站点目录及首页文件

mkdir -p /application/nginx/html/{www,bbs}
for dir in www bbs;do echo "`ifconfig eth0|egrep -o "10.0.0.[0-9]+"` $dir" >/application/nginx/html/$dir/index.html;done

3. 优雅重启

[root@web02-8 html]# nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is successful
[root@web02-8 html]# nginx -s reload

4. 负载均衡upstream

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


    upstream server_pools { 
         server 10.0.0.7;
         server 10.0.0.8;
         server 10.0.0.9;
    }       

    server { 
       listen       80;
       server_name  www.etiantian.org;
       location / {
        proxy_pass http://server_pools; 
       }
    }
}

5. weight权重模块

[root@LB01_5 conf]# vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


    upstream server_pools {
         server 10.0.0.7:80 weight=2;
         server 10.0.0.8:80 weight=1;
         server 10.0.0.9:80 weight=1;
    }

    server {
       listen       80;
       server_name  www.etiantian.org;
       location / {
        proxy_pass http://server_pools;
       }
    }
}

6. max_fails fail_timeout

    upstream server_pools {
         server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;

max_fail 最大的失败连接数,当连接失败后会再继续3次连接
fail_timeout失败连接超时时间,当连接失败超过30s后会尝试重新连接

7. backup

    upstream server_pools {
         server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s backup;
    }
backup备用服务器,当加入backup后不使用该服务器,当其它两台服务器挂掉之后自动使用本服务器。

8. server标签详解

server标签参数说明
server 10.0.0.8:80负载均衡后面的RS配置,可以是IP或域名,如果端口不写,默认是80端口。高并发场景下,IP可换成域名,通过DNS做负载均衡。
weight=1代表服务器的权重默认值是1。权重数字越大表示接受的请求比例越大。
max_fails=1Nginx尝试连接后端主机失败的次数,这个数值是配合proxy_next_upstarem \ fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的,当Nginx接收后端服务器返回的这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404、502、503。max_fails的默认值是1;企业场景:建议2-3次。京东1次,蓝汛10次。根据业务需求去配置
fail_timeout=10s在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s;如果max_fails是5,它就检测5次,如果5次都是502。那么,它就会根据fail_timeout的值,等待10s再去检查。还是只检查一次,如果持续502,在不重新加载nginx配置的情况下,每隔10s
backup热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS。这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求;注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。
down这标志着服务器永远不适用相当于注释,这个参数可配合ip_hash使用。

第十章 upstream模块调度算法

1. rr轮询(round robin默认调度算法,静态调度算法)
把客户端的请求逐一分配到不同的后端节点服务器,这相当于LVS中的rr算法,如果后端节点服务器宕机(默认情况下nginx只检测80端口),宕机的服务器会被自动从节点服务器池中剔除,以使客户端的用户访问不受影响。新的请求分配给正常的服务器。

2. wrr权重轮询
在rr轮询算法的基础上加上权重,即为权重轮询算法,但是用该算法时候,权重和用户访问成正比,权重值越大,被转发的请求也就越多,可以根据服务器的配置和性能制定权重大小,有效解决新旧服务器溪能不均带来的请求分配问题。

3. least_conn算法
least_conn算法会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。

4. url_hash算法
和ip_hash类似,这里是根据访问URL的hash结果来分配请求的,让每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果显著。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method使用的hash算法。

5. ip_hash静态调度算法
每个请求按客户端IP的hash结果分配,当新的请求达到时,先将其客户端端IP通过hash算法哈希出一个值,在随后的客户端请求中,客户端IP哈希值只要相同,就会被分配给同一台服务器,该调度算法可以解决动态网页的session共享问题,但有时会导致请求分配不均,即无法保证1:1的负载均衡,因为在国内大多数公司都是NAT上网模式,多个客户端会对应一个外部IP,所以这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。LVS负载均衡的-p参数、Keepalived配置里的persistence_timeout50参数都类似这个nginx里的IP_hash参数。其功能都可以解决动态网页的session共享问题。


第十一章 proxy模块

http proxy模块相关参数说明
proxy_set_header负载均衡请求后面web服务器的时候,请求,响应。
proxy_set_header修改 请求头里面的信息设置http请求header项传给后端服务器节点,例如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址。
client_body_buffer_size用户指定客户端请求主体缓冲区大小,此处如了解前文的http请求包的原理就好理解了。
proxy_connect_timeout表示反向代理与后端接单服务器连接的超时时间,即发起握手等候相应的超时时间。
proxy_send_timeout表示代理后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。
proxy_read_timeout设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的派对只中等候处理的时间。

9. proxy_set_header Host

    server {
       listen       80;
       server_name  bbs.etiantian.org;
       location / {
        proxy_pass http://server_pools;
        proxy_set_header  Host $host;
       }
    }

10. proxy_set_header X-Forwarded-For

    server {
       listen       80;
       server_name  bbs.etiantian.org;
       location / {
        proxy_pass http://server_pools;
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $remote_addr;
       }
    }
[root@LB01_5 conf]# vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


    upstream server_pools {
         server 10.0.0.7:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.8:80 weight=4 max_fails=3 fail_timeout=30s;
         server 10.0.0.9:80 weight=4 max_fails=3 fail_timeout=30s;
    }

    server {
       listen       80;
       server_name  www.etiantian.org;
       location / {
        proxy_pass http://server_pools;
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $remote_addr;
       }
    }
    server {
       listen       80;
       server_name  bbs.etiantian.org;
       location / {
        proxy_pass http://server_pools;
        proxy_set_header  Host $host;
        proxy_set_header  X-Forwarded-For $remote_addr;
       }
    }
}
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream upload_pools {
      server 10.0.0.8:80;
    }

    upstream static_pools {
      server 10.0.0.7:80;
    }

    upstream default_pools {
      server 10.0.0.9:80;
    } 

    server { 
       listen       80;
       server_name  www.etiantian.org;
         location /upload {
             proxy_pass http://upload_pools;  
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;
         }

         location /static {
             proxy_pass http://static_pools;  
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;
         }


         location / {
             proxy_pass http://default_pools;  
             proxy_set_header Host $host;
             proxy_set_header X-Forwarded-For $remote_addr;
         }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值