要理解负载均衡,必须先搞清楚正向代理和反向代理。

正向代理与反向代理【总结】

注:

  • 正向代理,代理的是用户。
  • 反向代理,代理的是服务器

什么是负载均衡

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。

负载均衡的几种常用方式

1、轮询(默认) 
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream backserver {server 192.168.0.14;server 192.168.0.15;
}
  • 1
  • 2
  • 3
  • 4

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

upstream backserver {server 192.168.0.14 weight=3;server 192.168.0.15 weight=7;
}
  • 1
  • 2
  • 3
  • 4

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

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

upstream backserver {ip_hash;server 192.168.0.14:88;server 192.168.0.15:80;
}
  • 1
  • 2
  • 3
  • 4
  • 5

4、fair(第三方) 
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {server server1;server server2;fair;
}
  • 1
  • 2
  • 3
  • 4
  • 5

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

upstream backserver {server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载 
2.weight 默认为1.weight越大,负载的权重就越大。 
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误 
4.fail_timeout:max_fails次失败后,暂停的时间。 
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

配置实例:

#user  nobody;
worker_processes  4;
events {# 最大并发数worker_connections  1024;
}
http{# 待选服务器列表upstream myproject{# ip_hash指令,将同一用户引入同一服务器。ip_hash;server 125.219.42.4 fail_timeout=60s;server 172.31.2.183;}server{# 监听端口listen 80;# 根目录下location / {# 选择哪个服务器列表proxy_pass http://myproject;}}
}

【Nginx】实现负载均衡的几种方式相关推荐

  1. nginx实现负载均衡的6种方式

    nginx实现负载均衡的6种方式 一.负载均衡 1.轮询 2.权重 3.ip_hash 4.最少连接least_conn nginx.conf配置文件内容详解 后续更新 一.负载均衡 nginx负载均 ...

  2. 四、Nginx实现负载均衡的7种方式

    1.轮询(Round Robin 默认) 请求在服务器之间均匀分布,并考虑服务器权重.默认情况下使用此方法 upstream backend {# 没有为循环指定负载平衡方法server backen ...

  3. Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n

    负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务 ...

  4. IIS Web负载均衡的几种方式

    Web负载均衡的几种实现方式 摘要: 负载均衡(Load Balance)是集群技术(Cluster)的一种应用.负载均衡可以将工作任务分摊到多个处理单元,从而提高并发处理能力.目前最常见的负载均衡应 ...

  5. SpringCloud集群的搭建,分布式的实现,负载均衡的几种方式,路由,页面监听

    SpringCloud 服务注册与发现--Netflix Eureka 负载均衡: 客户端负载均衡--Netflix Ribbon 服务端负载均衡:--Feign(其也是依赖于Ribbon,只是将调用 ...

  6. nginx负载均衡的五种方式

    文章目录 前言 :负载均衡是什么 一.方式1:轮询 二.方式2:权重 方式3:iphash 方式4:最小连接 方式5:fair 总结:根据这几种方式可以猜测处nginx的底层使用了计数器,从而可以将海 ...

  7. nginx 负载均衡的4种方式

    A)轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器; B)ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器.可以保证来自同一ip的请求被打到固定 ...

  8. 负载均衡的几种方式_负载均衡的几种方式

    负载均衡其实就是任务的分发,使得任务能按照你的预想分配到各个计算单元上,它能提高服务对外的性能,避免单点失效场景.这里要注意的一点是虽说叫负载均衡,但是有时候我们的分配算法就是不是均衡的. 比如配个n ...

  9. nginx配置负载均衡(史上最详细)

    所谓负载均衡就是:就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况. 一:nginx反向代理 实现负载均衡之前我 ...

最新文章

  1. Unix下设计动态库的方法《精通Unix下C语言编程与项目实践》(一)
  2. JSON.stringify()还可以这么用
  3. 数据结构学习之栈求解n皇后问题
  4. Redis整合springboot实现哨兵模式
  5. 怎样在linux系统上安装r,Linux系统之路——如何在CentOS7.2安装R(示例代码)
  6. JS判断UA动态加载CSS的方法
  7. 安卓开发仿微信图片拖拽_Android 仿微信朋友圈发表图片拖拽和删除功能
  8. Windows中更新python模块的命令
  9. Win10磁盘的分区与合并傻瓜教程
  10. 如何将自己写的项目发布到外网上
  11. h5分享微信好友朋友圈
  12. 爬虫基础_01——正则
  13. 集成电路光刻机精密运动台控制方法
  14. android 5.0官方安装包,Android5.0刷机包怎么安装 Android5.0刷机包安装教程
  15. shell中的浮点数运算之bc命令简介
  16. iOS硬编解码相关知识
  17. va_start 用法
  18. 最受欢迎的几大BUG管理系统
  19. 什么是XGS-PON?XGS-PON如何与GPON、XG-PON共存?
  20. discuz论坛首页默认显示单个特定的版块,及自定义论坛首页固定标题

热门文章

  1. CodeIgniter笔记3
  2. JQuery EasyUI之DataGrid列名和数据列分别设置不同对齐方式(转)
  3. 更新MYSQL生成日历表,支持跨年份 存储过程
  4. 揭开中国IDC产业神秘面纱
  5. SpringCloud(二) 生产者、消费者工程搭建与调用(上)
  6. sqlite java_如何在Java中使用Sqlite
  7. gin源码解析(1) - gin 与 net/http 的关系
  8. 从PHPer到Gopher要经历的一些转变
  9. asp+ajax菜单,AJAX_基于asp+ajax和数据库驱动的二级联动菜单,index.asp 页面代码 复制代码 代 - phpStudy...
  10. 【2】Docker数据卷