文章目录:

1.负载均衡概述

2.案例讲解

2.Nginx中常用的负载均衡策略

2.1 轮询

2.2 权重

2.3 ip_hash

2.4 最少连接


1.负载均衡概述

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

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

Nginx——Nginx主要应用之负载均衡_服务器

Nginx——Nginx主要应用之负载均衡_tomcat_02

Nginx——Nginx主要应用之负载均衡_服务器_03


2.案例讲解

既然要实现负载均衡,那肯定不止一台服务器(Tomcat) 了,我在这里准备两台Tomcat服务器。

这两个Tomcat的webapp目录下都有一个a目录,其中我写了一个 a.html 页面,就是为了测试。

Nginx——Nginx主要应用之负载均衡_负载均衡_04

Nginx——Nginx主要应用之负载均衡_服务器_05

Nginx——Nginx主要应用之负载均衡_负载均衡_06

因为tomcat启动和关闭都是占用端口号的,为了确保不冲突,我提前修改这两台Tomcat的端口号。那就是在各自的Tomcat的conf目录下的server.xml文件中。

我将第一个tomcat的启动、关闭端口号改为8081、8006;第二个tomcat的启动、关闭端口号改为8082、8007。先启动这两个tomcat

Nginx——Nginx主要应用之负载均衡_tomcat_07

Nginx——Nginx主要应用之负载均衡_服务器_08

然后在nginx.conf配置文件中做如下修改:

这里的proxy_pass是指:当有请求的时候,会通过myserver这个数据转发块进行负载均衡的转发

修改完配置文件之后,需要使用 ./nginx -s reload 命令重启nginx(该命令仅限于你在nginx的sbin目录下执行)

Nginx——Nginx主要应用之负载均衡_tomcat_09

接下来就可以到浏览器中输入地址访问了。

Nginx——Nginx主要应用之负载均衡_负载均衡_10

Nginx——Nginx主要应用之负载均衡_服务器_11

可以看出,Nginx接收了同一个请求,其转发请求的服务器并不是同一个,而是平均分配给了不同的服务器,其分配的策略是轮询。


2.Nginx中常用的负载均衡策略

2.1 轮询

是默认的分配策略,会按照请求的时间顺序,分配到不同的服务器中,如果有宕机的服务器,会自动剔除。

也就是说,上面那个案例中,如果我们访问:192.168.40.130:80/a/a.html,那么nginx会将请求转发给两台tomcat中的其中一台,当你再次请求时,可能就会转发到了另一台tomcat。

2.2 权重

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

Nginx——Nginx主要应用之负载均衡_负载均衡_12

2.3 ip_hash

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

Nginx——Nginx主要应用之负载均衡_负载均衡_13

2.4 最少连接

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