一文带你读懂Nginx的负载均衡
off999 2025-01-11 16:04 19 浏览 0 评论
一、负载均衡
当一台服务器的访问量越大时,服务器所承受的压力也就越大,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生,因此也就有了负载均衡来分担服务器的压力。 那么究竟什么是负载均衡呢?通俗些讲,就是我们有几十台、几百台甚至更多服务器,将这些服务器组成一个服务器集群,当客户端访问某台设备的数据时,首先发送的请求先到一台中间服务器,并通过中间服务器在服务器集群中平均分摊到其他服务器中,因此,当用户每次所发送的请求都将会保证服务器集群中的设备均与平摊,以此来分担服务器的压力,从而保持服务器集群的整理性能最优,避免出现有崩溃的现象。
二、Nginx负载均衡的作用
- 转发功能:Nginx 会按照一定的算法轮询、权重将客户端发来的请求转发至不同的应用服务器上,同时减轻单台服务器的压力,提高服务器的并发量;
- 故障迁移:当一台服务器出现了故障时,客户端发来的请求将自动发送到其他服务器; * 添加恢复:当故障服务器恢复正常工作时,将自动添加到处理用户请求中;
三、Nginx负载均衡的几种策略方式
1)轮询(默认) 客户端发出的每个请求将按照时间顺序逐一分配到不同的后端服务器,如后端服务器down掉,能自动剔除。
upstream backserver { server 192.168.1.10; server 192.168.1.11; }2)weight
weight 代表权重,默认为1,权重越高被分配的客户端也就越多。 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,也就是说:哪个 server 的连接数少,路由就到哪个 server 中去。
upstream backserver { server 192.168.1.10 weight=3; server 192.168.1.11 weight=7;}3)ip_hash
每个请求按访问 IP 的hash结果分配,每个访客固定访问一个后端服务器,可解决session的问题。
upstream backserver { ip_hash; server 192.168.1.10:80; server 192.168.1.11:88; }4)fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver { server server1; server server2; fair; }5)url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }这里推荐大家可以看看Linux C/C++ 高级开发架构的【免费】课程:
C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
课程内容的话和腾讯C++后台开发T8职级技术栈对标,围绕数据结构与算法、数据库、网络、操作系统、网络编程、分布式架构等方面全面提升,值得学习一波~
资料免费领取地址:正在跳转
四、常见的负载均衡方案有哪些?
将下图进行拆分,其常见互联网分布式架构,主要分为:
- 客户端层
- 反向代理层
- 服务器站点层
- 服务层
- 数据层
因此,可以看出,从一台客户端发出的请求到最终的数据层,上游都可以访问到下游,实现最终的均匀平摊。 第一层:从客户端层到反向代理层 客户端层到反向代理层的负载均衡,通过DNS轮询实现,在DNS服务器上对应的域名配置多个IP,当客户端发出的请求到DNS服务器时,会轮询返回对应域名配置的 IP,保证解析的IP是必须与Nginx服务器的IP是相同的,以此Nginx服务器的请求分配也将是均衡的。
第二层:从反向代理层到服务器站点层 反向代理层到服务器站点层的负载均衡,通过Nginx实现,修改nginx.conf配置文件,实现多种负载均衡策略; PS:这里我们通过nginx.conf配置文件的方式进行实现,其主要实现的方式可参考上述:三、Nginx负载均衡的几种方式(主要包括:轮询、weight、ip_hash、fair(第三方)、url_hash(第三方)的相关描述)
第三层:从服务器站点层到服务层 服务器站点层到服务层的负载均衡,是通过服务连接池实现的,上游连接池会建立与下游服务多个连接,每次请求将会随机选取连接来访问下游服务。
第四层:从服务层到数据层 服务层到数据层时,数据量很大的情况下,数据层(db,cache)会涉及数据的水平切分,所以数据层的负载均衡会更加复杂一些,分为数据的均衡与请求的均衡。
- 数据的均衡:是指水平切分后的每个服务(db,cache),数据量是均匀的。
- 请求的均衡:是指水平切分后的每个服务(db,cache),请求量是均匀的。
常见的水平切分方式有两种: 第一种:按照range水平切分
每一个数据服务,存储一定范围的数据
- user0 服务,存储 uid 范围:1-1kw;
- user1 服务,存储 uid 范围:1kw-2kw;
这个方案的好处是:
- 规则简单,service 只需判断一下 uid 范围就能路由到对应的存储服务;
- 数据均衡性较好;
- 易扩展,可随时加一个 uid [2kw,3kw] 的数据服务;
这个方案的不足是: 请求的负载不一定均衡,对新用户会比老用户更活跃,大 range 的服务请求压力会更大。 第二种:按照 id 哈希水平切分
每一个数据服务,存储某个 key 值 hash 后的部分数据
- user0 服务,存储偶数 uid 数据;
- user1 服务,存储奇数 uid 数据;
这个方案的好处是:
- 规则简单,service 需对 uid 进行 hash 能路由到对应的存储服务;
- 数据均衡性较好;
- 请求均匀性较好;
这个方案的不足是:
- 不易扩展,扩展一个数据服务,hash 方法改变时候,可能需要进行数据迁移。
五、Nginx负载均衡配置实例
1、实现效果 在浏览器地址栏中输入http://192.168.1.10/abc/20200320.html,负载均衡效果平均到端口号8080和8081中。 2、准备工作 1) 准备两台Tomcat服务器,一台服务器为8080,另一台服务器为8081。 2) 分别在两台Tomcat服务器中的webapps目录中,创建名称是abc文件夹,在abc文件夹中创建页面20200320.html,进行测试。 在上一篇文章中,我们对其两台Tomcat服务创建好了8080和8081,所以这里我们就无需在创建了,并且分别查看8080和8081服务下webapps目录中是否都存在测试页面文件,如没有可自行创建即可。
Tomcat8080
# cat /root/tomcat8080/apache-tomcat-7.0.70/webapps/abc/20200320.html<h1>welcome to tomcat 8080!</h1>Tomcat8081
# cd /root/tomcat8081/apache-tomcat-7.0.70/webapps/# mkdir abc# cd abc/# vim 20200320.html<h1>welcome to tomcat 8081!</h1>切换到/root/tomcat8081/apache-tomcat-7.0.70/bin/目录下,启动8081的Tomcat服务。
# ./startup.sh Using CATALINA_BASE: /root/tomcat8081/apache-tomcat-7.0.70Using CATALINA_HOME: /root/tomcat8081/apache-tomcat-7.0.70Using CATALINA_TMPDIR: /root/tomcat8081/apache-tomcat-7.0.70/tempUsing JRE_HOME: /usrUsing CLASSPATH: /root/tomcat8081/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/tomcat8081/apache-tomcat-7.0.70/bin/tomcat-juli.jarTomcat started.测试验证 在客户端浏览器中分别测试Tomcat8080:http://192.168.1.10/abc/20200320.html和Tomcat8081:http://192.168.1.10:8081/abc/20200320.html进行验证。
Tomcat8080
Tomcat8081 3) 在 Nginx 的配置文件中进行负载均衡的配置; 在http模块下添加upstream myserver配置、server_name 由原来的localhost改为Nginx服务器地址,在location下添加proxy_pass http://myserver;即可;
# vim /usr/local/nginx/conf/nginx.conf 17 http { 18 ...... 34 upstream myserver { 35 server 192.168.1.10:8080; 36 server 192.168.1.10:8081; 37 } 38 39 server { 40 listen 80; 41 server_name 192.168.1.10; 42 43 #charset koi8-r; 44 45 #access_log logs/host.access.log main; 46 47 location / { 48 proxy_pass http://myserver; 49 root html; 50 index index.html index.htm; 51 } 52 ......操作完 Nginx 文件的负载均衡的配置后,重启Nginx服务,出现如下问题:
# ./nginx -s stopnginx: [warn] conflicting server name "192.168.1.10" on 0.0.0.0:80, ignored# ./nginx意思是重复绑定了server name,该警告不会影响到服务器运行。而且,这个重复绑定的意思是现在运行的Nginx服务和将要加载的新配置中的重复,所以,这个警告其实是不必的。 测试验证 在客户端浏览器中输入:http://192.168.1.10/abc/20200320.html,不断刷新,观察变化,这就是在将客户端发出的请求分担到不同的Tomcat服务中去,也就是所谓负载均衡的一个效果。
负载均衡所实现的效果 总结 通过本篇文章介绍了什么的负载均衡、Nginx负载均衡的作用、Nginx负载均衡的几种策略方式、常见的负载均衡方案、Nginx负载均衡配置实例等;负载均衡是分布式系统架构设计中必须考虑的因素之一,通常是指:将请求/数据均匀分摊到多个操作单元上执行,其的关键在于均匀:
- 反向代理层的负载均衡,是通过DNS轮询实现;
- 服务器站点层的负载均衡,是通过Nginx实现;
- 服务层的负载均衡,是通过服务连接池实现;
- 数据层的负载均衡,要考虑数据的均衡与请求的均衡两点,其常见的方式有按照范围水平切分与hash水平切分
作者:杰哥的IT之旅 链接:https://juejin.cn/post/6969332977989845028 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关推荐
- 电脑桌面啥都没有了怎么回事
-
1、如果我们桌面上什么东西都没有,可以先打开任务管理器,然后顶级左上方的文件,随后新建任务,在打开的界面中输入explorer,点击确认之后,等个几秒钟左右就可以看见桌面上的图标了。 2、另一个方法...
- 如何将电脑恢复出厂设置win7
-
1.首先我们打开电脑找到“计算机”点击打开。2.进入页面然后我们点击“Windows7(C:)”打开C盘。3.我们在C盘界面找到Windows7并点击打开。4.进入到Win7文件夹中找到并双击“Sys...
- u盘存在但是读不出来(u盘显示有内容但读不出来怎么办)
-
u盘能识别,不能读取可能是你关闭了u盘自动读取,取消后即可。步骤:1、在电脑桌面右键点击“计算机”,在出现的菜单中选择“管理”选项2、在弹出的计算机管理窗口,依次打开“计算机管理-服务和应用程序-服务...
- win8家庭中文版下载(windows家庭中文版下载)
-
可以按照以下步骤在Win8上下载和安装Word:1.通过微软官网下载购买,或者通过MicrosoftStore应用商店进行购买和下载。2.下载完成后,打开文件夹,双击setup进行安装。3.安...
- 教大家强制退出苹果id账号(教大家强制退出苹果id账号ipad)
-
1.首先将手机强制关机,并在电脑端安装iTunes并打开。2.用数据线将手机与电脑连接起来,长按手机电源键。3.当出现苹果标志时不要松开电源键,接着按Home键。4.直到屏幕黑屏,松开电源键。5.继续...
- 惠普官网驱动下载官网(惠普驱动官方)
-
在惠普官网下载系统驱动方法如下访问HP官网:www.hp.com找到支持与驱动页面(通常在顶部导航栏的支持或下载中)输入你的HP产品的序列号或选择产品类型和型号选择你的操作系统,然后下载相关的驱动。安...
- 电脑公司取名字大全(电脑行业公司取名)
-
动感网络IT狂人行鱼雷IT网PC宝宝网外有鱼超导技术网PC技术网加点分吧,不然想不出太多,呵呵绿苑计算机协会绿色代表生命,有起航的意义,苑是一个范畴,有地域的意思,是给你们一片天地的意思...
- wifi怎么设置网速快(手机测wifi网速怎么测)
-
wifi加速设置方法步骤如下。1设置网速:浏览器中输入终端地址,输入账号和密码。找到连接设备数目并进行更改,找到信道宽度,选择更快的网速。2提高WiFi网速:进入设置中心,点击WLAN选项。点击高级设...
- 华硕驱动软件叫什么(华硕自带驱动管理软件)
-
q-installer驱动啥意思?华硕q-installer驱动能让用户更加方便地管理各种文件。将会同时显示4个Windows资源管理器的窗口,这样能让用户更加简单地对文件进行一些操作,例如复制,粘贴...
- 懂行的人建议买华为还是惠普电脑
-
华为电脑好。华为笔记本电脑主打的就是轻薄,质感,多屏协同生态,面向商务人群和学生党。目前在售的机型并不多,但每一台机子本身都不错,不过因为被制裁的缘故,定价过高,性价比打折扣。惠普笔记本好,惠普除了家...
- 如何把win系统换成安卓(怎么把系统改为win10)
-
方法/步骤分步:1首先点击打开酷安应用市场;2点击打开位于屏幕右下方的“应用游戏”选项;3选择想要下载的软件或者游戏app,点击进入;4选择“下载”按钮,点击开始下载;5APP下载完成后,系统会自动跳...
-
- 如何复制粘贴(如何复制粘贴excel表格内容)
-
需要复制文字的时候只要先选中文字,然后同时按住Ctrl+C键,然后松手就已经复制了文字,在需要粘贴的地方同时按住:Ctrl+V就可以看到文字被粘贴了,非常的方便。扩展资料:Alt键,这个键叫做改变,很多快捷键都需要使用到这个键,矩形...
-
2025-11-14 05:51 off999
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
