一、为什么要做负载均衡?(下面的话是引用网上的)
在网站创立初期,我们一般都使用单台机器对外提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服务。我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如www.taobao.com。那么当用户在浏览器输入www.taobao.com的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。
针对以上情况的解决方案:
(1) 服务器进行硬件升级:采用高性能服务器替换现有低性能服务器。 该方案的弊端:
高成本:高性能服务器价格昂贵,需要高额成本投入,而原有低性能服务器被闲置,造成资 源浪费。
可扩展性差:每一次业务量的提升,都将导致再一次硬件升级的高额成本投入,性能再卓越 的设备也无法满足当前业务量的发展趋势。
无法完全解决现在网络中面临的问题:如单点故障问题,服务器资源不够用问题等。
(2) 组建服务器集群,利用负载均衡技术在服务器集群间进行业务均衡。
该方案的优势: 低成本
可扩展性:当业务量增长时,系统可通过增加服务器来满足需求,且不影响已有业务,不降 低服务质量
高可靠性:单台服务器故障时,由负载均衡设备将后续业务转向其他服务器,不影响后续业 务提供,保证业务不中断。
二、什么是负载均衡?
负载均衡:分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。(大白话解释:就是有一台服务器用来接收请求并将请求做分(转)发,将发过来的请求按照你自己制定的分发规则分别转发到其它的服务器上。重点:有一台服务器专门用来做请求分发的服务器)
负载均衡这里面涉及的东西相对也是比较多的,理论就不说太多了,网上,书上很多,今天我们就利用Nginx服务器来实现一个简单的负载均衡
来,我们上负载均衡工作流程图
至此 也就是说 要想搭建负载均衡服务器 至少需要三台服务器 有一台用来做负载均衡服务器,另外两台用来做web服务器
三、相关准备工作
我们使用三台服务器(三台服务器都已安装了nginx)
负载均衡服务器:119.3.220.26 (用来将请求分发给下面的web server服务器1和web server服务器2)
web server服务器1:111.231.138.248 (给站点增加一个index.html文件 里面写上 web server1)
web server服务器2:114.116.115.71 (给站点增加一个index.html文件 里面写上 web server2)
注意:为了防止不必要的出错 我们将三台服务器的防火墙都关闭以及关闭setlinux
1、关闭防火墙 centos6系列:service iptables stop centos7系列:systemctl stop firewalld
2、关闭setlinux 命令:setenforce 0
四、开始配置
我们使用nginx 中的upstream模块来实现nginx将跨越单机的限制,完成网络数据的接收、处理和转发。我们主要使用提到的转发功能进行调度分发。
1、119.3.220.26服务器中的nginx.conf配置文件中加入如下配置:
#配置负载均衡请求分发的服务器 连接池(列表) upstream lb { server 111.231.138.248; server 114.116.115.71; } server{ .....#这里省略其它不相关配置. location / { proxy_pass http://lb; #指定代理的连接池,lb是你在上面中upstream后定义的名字 proxy_set_header Host $host; #转发请求头信息 proxy_set_header X-Forward-For $remote_addr; #转发请求IP地址 } }
示例配置截图:
重启119.3.220.26中的nginx
浏览器访问负载均衡服务器IP地址:119.3.220.26 会显示web server1 刷新后会显示web server2 再次刷新又会显示web server1 以此类推下去。。这种分发方式是upstream模块默认的轮询法,每个ip分发一次 就是我们现在的效果 第一次分发给111.231.138.248这台服务器 再次请求的时候就会分发给114.116.115.71服务器 这样一直重复下去。。
2、如果你想让某一台服务器被分发到的概率高一些 那么119.3.220.26服务器中的nginx.conf配置文件中的upstream模块中的每个ip地址可以设置权重(加权轮询法)改成如下配置:
#配置负载均衡请求分发的服务器 连接池(列表) upstream lb { server 111.231.138.248 weight=5; #weight表示权重的意思,数字越大,权重越高,即 会优先分发给权重高的服务器 server 114.116.115.71 weight=2; }
示例配置截图:
我们可以看到多了一个weight关键字,除了weight还有down backup等...... //down: 表示单前的server临时不參与负载. //weight:默认为1 weight越大,负载的权重就越大 //backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求 所以这台机器压力会最轻
这样就简单的实现了负载均衡的搭建
五、负载均衡请求分发算法
轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。(就是我们第一张截图中的配置文件的配置方式)
加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。(就是我们第二张截图中的配置文件的配置方式)
加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
以上相关算法摘自:https://blog.csdn.net/gu_wen_jie/article/details/82149003
PS:有的人可能没有三台服务器 那怎么练习呢? 有一台服务器就行了 然后使用docker来搭建负载均衡也是可以的~~
更多相关知识 可在网上自行查阅相关知识~~~
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。
精彩评论