Nginx从入门到精通负载均衡

Posted 神即道,道法自然,如来。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx从入门到精通负载均衡相关的知识,希望对你有一定的参考价值。

1:负载均衡概述

在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。

负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。

 

2:负载均衡实现的方式

2.1 硬件实现负债均衡

比如 F5、深信服、Array 等

优点是有厂商专业的技术服务团队提供支持,性能稳定

缺点是费用昂贵,对于规模较小的网络应用成本太高

 

2.2 软件实现负载均衡

比如 nginx、LVS、HAProxy 等

优点是免费开源,成本低廉

 

3:Nginx实现负载均衡

Nginx通过在nginx.conf文件进行配置即可实现负载均衡

原理图:

配置如下:(配置两步即可)

 

3.1 在http模块上加上upstream配置

upstream www.myweb.com {

            server  127.0.0.1:9100 weight=3;

           server  127.0.0.1:9200 weight=1; 

}

其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多

upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器

 

3.2 在server模块里添加location,并配置proxy_pass

location /myweb {

         proxy_pass http://www.myweb.com;

}

其中 www.myweb.com 字符串要和 upstream 后面的字符串相等

 

3.3  部署同一个应用在两个tomcat下面,注意tomcat的端口分别为9100和9200.

3.4 配置Nginx location 关联上上面配置的upstream

 

3.5 重启Nginx,浏览器直接访问nginx进行测试

 

 

4:Nginx常用负载均衡策略讲解

 

4.1 轮询(默认)

注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问urlhash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下如果后端服务器down掉,将自动剔除

         upstream backserver {

             server 127.0.0.1:8080;

             server 127.0.0.1:9090;

}

 

4.2 权重

每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况

         upstream backserver {

             server 192.168.0.14 weight=5;

             server 192.168.0.15 weight=2;

}

 

4.3 ip_hash

ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题

         算法:hash("124.207.55.82") % 2 = 0, 1

         upstream backserver {

             ip_hash;

             server 127.0.0.1:8080;

             server 127.0.0.1:9090;

}

 

4.4 最少连接

web请求会被转发到连接数最少的服务器上

         upstream backserver {

             least_conn;

             server 127.0.0.1:8080;

             server 127.0.0.1:9090;

}       

 

5 负载均衡的其他几个配置

配置1

upstream backserver {

             server 127.0.0.1:9100;

                   #其它所有的非backup机器down的时候,才请求backup机器

             server 127.0.0.1:9200 backup;

}

配置2

         upstream backserver {

server 127.0.0.1:9100;

#down表示当前的server是down状态,不参与负载均衡

    server 127.0.0.1:9200 down;

}

一般在项目上线的时候,可以分配部署不同的服务器上,然后对Nginx重新reload。

reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级...

 

 

 

 

以上是关于Nginx从入门到精通负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

NGINX从入门到精通进阶系列培训

《从入门到精通云服务器》第七讲—负载均衡和CDN技术

IPVS从入门到精通kube-proxy实现原理

IPVS从入门到精通kube-proxy实现原理(转)

nginx教程从入门到精通

linux学习课程从入门到精通:Centos8-系统进程管理