当前位置:网站首页>负载均衡应用场景
负载均衡应用场景
2022-08-05 10:29:00 【程序员青菜】
一、背景
这两天在盘点IT资产,发现阿里云SLB每天在扣费,这个SLB是以前用来做公众号&小程序服务端负载均衡用的,现在牛奶业务处于维护老客户阶段,ECS只用一台就可以,SLB其实可以释放了。
二、负载均衡概念
负载均衡:对外部请求的流量分发到不同的后端服务器来扩展应用的吞吐能力以及消除单点故障。
DNS轮询负载均衡:DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上。
四层负载均衡:四层指OSI的TCP层,四层负载均衡服务器接受客户端请求后,修改数据包的地址信息(IP+端口)将流量转发到应用服务器,一般可以将一个公网的IP映射成多个内部服务器地址。
七层负载均衡:七层指OSI的应用层,七层负载均衡服务器可以根据客户请求的URL或HTTP报头来做分发。
硬件四/七层负载均衡:通过智能交换机实现,处理能力强,但是很贵,最出名的就是F5,咱也没玩过。
三、DNS轮询配置例子
对同一主机名添加多条A记录,下面是我在35互联上做的一个解析。
将lb.vanmilk.com解析到 118.178.255.158和121.40.77.22,使用dig命令检查发现确实被解析到两个IP地址上了。
这是相对来讲成本最低的一种负载均衡做法,但存在两个很明显的缺点
1、可靠性低:当一台服务器挂了,你必须去DNS去下掉该IP,但DNS有缓存,需要一些时间后才会生效。
2、负载分配不均衡:采用简单轮询算法,不能为性能较好的服务器多分配请求。
四、软件四层负载均衡
最出名的就是LVS,是章文嵩开发的,大神级别的人物,阿里云很多基础设施都是他主导搭建的吧,膜拜一下。
阿里云的SLB:支持TCP/UDP四层负载,强大的四层处理能力,也支持HTTP/HTTPS七层负载但对七层的支持能力较弱,仅支持基于域名和URL转发,单实例连接数可以达500万,如果我没猜错的话这个应该是来源于LVS,更强大的面向应用ALB,咱也还没玩过。
SLB配置方法:
1、创建SLB实例,如果流量比较小,直接用按量付费就可以。
2、DNS解析指向SLB的公网IP。
3、配置监听,指定监听端口,如果是443要配置一下SSL证书,然后配置后端服务器,配置健康检查(当后端服务挂了,它就不会再向该台服务器转发请求)。
4、可以设置每台服务器的权重,应用发布的时候,把权重设置为0,等发布完了再调回去,这样就是不停机发布。
5、SLB配置好了基本就不用管了,然后每年SSL证书有变更,这里需要重新把证书推送上去。
五、Nginx反向代理实现软件七层负载均衡
前端部署Nginx服务器,后端部署Tomcat应用,用户访问时静态资源由Nginx直接返回,动态资源分发到Tomcat服务器,处理完成后返回数据组Nginx,Nginx再返回给浏览器。
Nginx配置负载主要有几下几种方式
1、轮询
实验环境
121.40.77.25 搭建Nginx服务器做负载
121.40.77.25 应用1
118.178.255.158 应用2
为了方便实验,在两台机器用nc -l 9999启动端口在监听,nc的具体应用可以参见 瑞士军刀。
upstream polling{
server 121.40.77.25:9999 weight=1;
server 118.178.255.158:9999 weight=2;
}
server {
listen 80;
server_name 121.40.77.25;
location /{
proxy_pass http://polling;
}
}
默认就是轮询方式,weight不配置按请求时间均匀分配到对应的服务器,如果服务器down掉会自动剔除,这种配置一个问题是同一个客户端每次请求不一定分发到后端同一台服务器。
2、ip_hash
请求按IP 哈希结果分配,这样每个客户请求会被固定到访问某一台服务器,如果后端服务器down掉,需要手工将其标记为down状态,这种配置就不用解决会话同步的问题。
upstream polling{
ip_hash;
server 121.40.77.25:9999;
server 118.178.255.158:9999;
}
3、url_hash
可以将相同的URL映射到后端一台固定服务器,这个是Nginx第三方插件,需要编译时安装该插件。
4、Nginx负载一个案例
我们的Vistablinds网站,当时有一个Php版本和一个Java版本,需要用Java版本替换掉Php版本,但又不能一次性全部切换,当时就用Nginx反向代理来实现,并且做了根据Cookie来保证原来访问Php版本的用户让其继续访问Php版本。
边栏推荐
- [Strong Net Cup 2022] WP-UM
- 多线程(进阶) - 2.5w字总结
- 一个栈的输入序列为1 2 3 4 5 的出站顺序的理解
- STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
- 第六章:activiti流程分流判断之排它网关和并行网关
- NowCoderTOP35-40 - continuous update ing
- 反射修改jsessionid实现Session共享
- js hijacks the array push method
- 阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
- SQL Outer Join Intersection, Union, Difference Query
猜你喜欢
登录功能和退出功能(瑞吉外卖)
In-depth understanding of timeout settings for Istio traffic management
数据可视化(一)
PCB layout must know: teach you to correctly lay out the circuit board of the op amp
The founder of the DFINITY Foundation talks about the ups and downs of the bear market, and where should DeFi projects go?
语音社交软件开发——充分发挥其价值
STM32+ULN2003 drives 28BYJ4 stepper motor (forward and reverse according to the number of turns)
阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
Common operations of oracle under linux and daily accumulation of knowledge points (functions, timed tasks)
Leetcode刷题——623. 在二叉树中增加一行
随机推荐
企业的数字化转型到底是否可以买来?
The fuse: OAuth 2.0 four authorized login methods must read
【OpenCV】-仿射变换
A small test of basic grammar, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, basic grammar of go lang and the use of variables EP02
电竞、便捷、高效、安全,盘点OriginOS功能的关键词
js劫持数组push方法
华为轻量级神经网络架构GhostNet再升级,GPU上大显身手的G-GhostNet(IJCV22)
Latex如何控制表格的宽度和高度
Opencv图像缩放和平移
MySQL transactions
牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02
Header file search rules when compiling with GCC
反射修改jsessionid实现Session共享
Oracle 19.3 restart 环境
SMB + SMB2: Accessing shares return an error after prolonged idle period
Voice-based social software development - making the most of its value
uniapp 连接ibeacon
FPGA:基础入门LED灯闪烁
用户考试分数大于单科科目平均分的查询
如何选币与确定对应策略研究