文章目录:
1.负载均衡概述
在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。
负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。
2.案例讲解
既然要实现负载均衡,那肯定不止一台服务器(Tomcat)了,我在这里准备两台Tomcat服务器。
这两个Tomcat的webapp目录下都有一个a目录,其中我写了一个 a.html 页面,就是为了测试。
因为tomcat启动和关闭都是占用端口号的,为了确保不冲突,我提前修改这两台Tomcat的端口号。那就是在各自的Tomcat的conf目录下的server.xml文件中。
我将第一个tomcat的启动、关闭端口号改为8081、8006;第二个tomcat的启动、关闭端口号改为8082、8007。先启动这两个tomcat
然后在nginx.conf配置文件中做如下修改:
这里的proxy_pass是指:当有请求的时候,会通过myserver这个数据转发块进行负载均衡的转发
修改完配置文件之后,需要使用 ./nginx -s reload 命令重启nginx(该命令仅限于你在nginx的sbin目录下执行)
接下来就可以到浏览器中输入地址访问了。
可以看出,Nginx接收了同一个请求,其转发请求的服务器并不是同一个,而是平均分配给了不同的服务器,其分配的策略是轮询。
2.Nginx中常用的负载均衡策略
2.1 轮询
是默认的分配策略,会按照请求的时间顺序,分配到不同的服务器中,如果有宕机的服务器,会自动剔除。
也就是说,上面那个案例中,如果我们访问:192.168.40.130:80/a/a.html,那么nginx会将请求转发给两台tomcat中的其中一台,当你再次请求时,可能就会转发到了另一台tomcat。
2.2 权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况。
2.3 ip_hash
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题。
2.4 最少连接
web请求会被转发到连接数最少的服务器上。