Nginx实战-负载均衡服务器(1)

2018-12-18 22:05:35 george518 ...

一、负载均衡

负载均衡提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡有两方面的含义:
首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。

二、负载均衡的分类

二层负载均衡(mac)

根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应)

三层负载均衡(ip)

一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应)

四层负载均衡(tcp)

在三次负载均衡的基础上,用ip+port接收请求,再转发到对应的机器。

七层负载均衡(http)

根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。


常见的负载均衡是四层负载均衡和七层负载均衡。

三、四层负载均衡和七层负载均衡的特点:

七层负载均衡基本都是基于http协议的,适用于web服务器的负载均衡。(nginx)

  • 七层应用负载的好处,是使得整个网络更”智能化“。例如访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定的文字服务器并可以使用压缩技术。当然这只是七层应用的一个小案例,从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。很多在后台,例如Nginx或者Apache上部署的功能可以前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。

四层负载均衡主要是基于tcp协议报文,可以做任何基于tcp/ip协议的软件的负载均衡(haproxy、LVS)。

  • 四层负载均衡主要是较为灵活,可以作为多种软件的负载均衡器。

四、Nginx负载均衡的算法

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

2、weight(轮询权值)

weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

upstream bakend {  
        server  127.0.0.1:8081 weight=2 max_fails=2  fail_timeout=2;
        server  127.0.0.1:8082 weight=1 max_fails=2  fail_timeout=2;
        server 127.0.0.1:8083 backup; #调用backup服务器,可以是本机或其他服务器。
}

如上所示,如果有三个请求,2个落在8081上,1个落在8082上。

3、ip_hash

每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。

upstream slbserver {
        #根据Ip来分配,有存储cookie登录等场景适用
        ip_hash; 
        server  127.0.0.1:8081 weight=2 max_fails=2  fail_timeout=2;
        server  127.0.0.1:8082 weight=1 max_fails=2  fail_timeout=2;
        server 127.0.0.1:8083 backup; #调用backup服务器,可以是本机或其他服务器。
}
4、fair

比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

upstream backend {  
    server  127.0.0.1:8081;
    server 127.0.0.1:8082; 
    fair; 
}
5、url_hash

按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

upstream backend {  
    server  127.0.0.1:8081;
    server 127.0.0.1:8082;
    hash $request_uri;
    hash_method crc32;

五、Nginx负载均衡调度状态

在Nginx upstream模块中,可以设定每台后端服务器在负载均衡调度中的状态,常用的状态有:

1、down

表示当前的server暂时不参与负载均衡

2、backup

预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的访问压力最低

3、max_fails

允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。

4、fail_timeout

请求失败超时时间,在经历了max_fails次失败后,暂停服务的时间。max_fails和fail_timeout可以一起使用。


参考:
https://www.cnblogs.com/kevingrace/p/6137881.html
https://www.cnblogs.com/zhang-shijie/p/5469073.html
https://www.cnblogs.com/lvgg/p/6140584.html

相似文章