什么是负载均衡

单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可

负载均衡的优点

简单的来说。可以减少服务器的压力,将原本一台服务器所要承受的访问量分给了多台,并提高了项目的可用性,当一台服务器挂掉的时候也不会导致整个项目瘫痪。

nginx实现负载均衡

nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至服务器。 
nginx负载均衡服务器:192.168.132.135
服务器:192.168.132.139 
服务器:192.168.14.141

我们将两个相同的项目分别放到了139与141服务器中,当我们通过135负载访问项目接口时,nginx会自动将请求轮流分配给139与141来执行。

以vim模式打开135的nginx.conf配置文件

图片8.png

upstream www.test.com{

server 192.168.132.139;
server 192.168.132.141;

}
server {

    listen       80;
    server_name  www.test.com;
    location / {
        proxy_pass http://www.test.com;
    }

}

到139和141服务器上配置项目

图片9.png

完成后实现访问www.test.com

图片10.png

刷新

图片11.png

掌握负载均衡常用的几种算法【round-robin轮询、权重、ip_hash、fair(第三方)、url_hash(第三方)、least-connected(最少连接)】

1、轮询(默认)

    
upstream www.test.com {
            server 192.168.132.139;  
            server 192.168.132.141;  
        }  

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream www.test.com用来指定一个服务器组,该组的名字是www.test.com,包含两台服务器。在指定服务器组里面包含的服务器时以形式“server ip/domain:port”的形式指定,其中80端口可以忽略。然后在接收到请求时通过“proxy_pass http://www.test.com”把对应的请求转发到组www.test.com上。Nginx默认的负载均衡算法就是循环轮询,如上配置我们采用的就是循环轮询,其会把接收到的请求循环的分发给其包含的(当前可用的)服务器。使用如上配置时,Nginx会把第1个请求给192.168.132.139,把第2个请求给192.168.132.141,第3个请求给192.168.132.139,以此类推。

2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream www.test.com { 
      server  192.168.132.139 weight=10; 
      server  192.168.132.141 weight=30; 
} 
  
server{ 
    listen 80; 
    server_name www.test.com; 
    location / { 
        proxy_pass         http://www.test.com; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}

 weighted算法也就是权重算法,会根据每个服务的权重来分发请求,权重大的请求相对会多分发一点,权重小的会少分发一点。这通常应用于多个服务器的性能不一致时。需要使用权重算法时只需要在定义服务器组时在服务器后面指定参数weight,如:

upstream app1 {
        server 10.10.10.1 weight=3;
        server 10.10.10.2;
    }

在如上配置时,Nginx接收到的请求中大概每4个请求中会有3个请求交给10.10.10.1服务器处理,有1个请求交给10.10.10.2处理。

3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream www.test.com { 
    ip_hash;
      server  192.168.132.139 weight=10; 
      server  192.168.132.141 weight=30; 

          ip-hash算法会根据请求的客户端IP地址来决定当前请求应该交给谁。使用ip-hash算法时Nginx会确保来自同一客户端的请求都分发到同一服务器。要使用ip-hash算法时只需要在定义服务器组时加上“ip-hash   ”指令,如:
    upstream app1 {
                   ip_hash;
        server 10.10.10.1;
        server 10.10.10.2;
    }

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5、least-connected

         least-connected算法的中文翻译是最少连接,即每次都找连接数最少的服务器来转发请求。例如Nginx负载中有两台服务器,A和B,当Nginx接收到一个请求时,A正在处理的请求数是10,B正在处理的请求数是20,则Nginx会把当前请求交给A来处理。要启用最少连接负载算法只需要在定义服务器组时加上“least_conn”,如:
  
  upstream app1 {
                   least_conn;
        server 10.10.10.1;
        server 10.10.10.2;
    }

6、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

举例如:
配置Nginx负载均衡
vi /nignx目录/nginx.conf

#添加下面这段 backend可以自由命名
 upstream backend {
 #添加服务器到负载均衡
     server 192.168.1.252;
             server 192.168.1.251 weight=2;#设置该服务器在负载均衡中的权重  默认为1;越高则访问的频次越大
             server 192.168.1.252 down;  #表示down掉这台服务器,不参与负载均衡
             server 192.168.1.247 backup; #备用服务器 当其他服务器很忙或者down掉之后才会启动这台的
         }
 #配置参数
 #max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
 #fail_timeout:max_fails次失败后,暂停的时间。

    server {
            listen       80;
            server_name  localhost;
     
            location / {
                 #反向代理的地址
                 proxy_pass http://backend;     
            }
    }

这样子就已经配置完成了
访问localhost,如果三台服务器能轮询切换就证明配置成功

版权声明:本文为BrokenHeart原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/BrokenHeart/p/10632513.html