多层负载均衡实现

news/2024/7/10 2:35:48 标签: 负载均衡, nginx

1、单节点负载均衡

在这里插入图片描述
1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的nginx来做反向代理
2)nginx将http请求分发给后端多个web-server

优点:
1)DNS-server不需要动
2)负载均衡:通过nginx来保证
3)只暴露一个外网ip,nginx->tomcat之间使用内网访问
4)扩容实时:nginx内部可控,随时增加web-server随时实时扩容
5)能够保证站点层的可用性:任何一台tomcat挂了,nginx可以将流量迁移到其他tomcat

缺点:
1)延时增加+架构更复杂了:中间多加了一个反向代理层
2)反向代理层成了单点,非高可用

2、双机主从负载均衡

在这里插入图片描述
1)两台nginx组成一个集群,分别部署上keepalived,设置成相同的虚IP,保证nginx的高可用
2)当一台nginx挂了,keepalived能够探测到,并将流量自动迁移到另一台nginx上,整个过程对调用方透明

优点:相比单节点负载,解决了高可用的问题

缺点:
1)资源利用率只有50%
2)nginx仍然是接入单点

3、双主模式负载均衡(4+7层级负载)

LVS是一种集群(Cluster)技术:采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。工作在四层,在内核空间工作,基于ipvs模块,不占用流量。LVS主要用来做四层负载均衡
在这里插入图片描述
特点:
1)可以通过lvs来扩展多个nginx
2)通过keepalived+VIP+LVS的方案可以保证可用性

使用两台负载均衡服务器,互为主备,且都处于活动状态(这样达到不浪费服务器),同时各自绑定一个公网虚拟IP,提供负载均衡服务;当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP(这时由非故障机器一台负担所有的请求)。

原理描述:
四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡

四层通过虚拟 IP + 端口接收请求,然后再分配到真实的服务器,七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。

方案配置参考网址:https://blog.csdn.net/tladagio/article/details/106380996


http://www.niftyadmin.cn/n/5276839.html

相关文章

优维科技荣获第二届中国赛宝信息技术应用创新优秀解决方案三等奖

近日,“第二届中国赛宝信息技术应用创新优秀解决方案”评选活动圆满结束。优维科技所提交的《Hyperlnsight超融合持续观测解决方案》、《EasyOps一体化运维平台》从全国近300份申报方案中脱颖而出,荣获2023中国赛宝信息技术应用创新优秀解决方案奖。 本…

netty源码:(29)ChannelInboundHandlerAdapter

它实现的方法都有一个ChannelHandlerContext参数,它的方法都是直接调用ChannelHandlerContext参数对应的方法,该方法会调用下一个handler对应的方法。 可以继承这个类,重写感兴趣的方法,比如channelRead. 这个类有个子类:SimpleC…

java获取时间相差8小时的各种情况

1:三种时间差错情况 1-1:java的new date()获取的时间和本地时间相差8小时,解决方法 //可以main启动方法设置 TimeZone.setDefault(TimeZone.getTimeZone("GMT8"));1-2:存入mysql数据库的时候时间…

Electron训练笔记

终端乱码解决办法:更改编号下载卡住解决办法:Electron RequestError: connect ETIMEDOUT 20.205.243.166:443electron本质是一个依赖库,改依赖库提供了部分对象,可以实现对于window的调用。electron有一个主进程,多个渲…

Docker Swarm集群的深度总结

swarm集群操作命令 TCP协议端口 2377 :集群管理端口 TCP协议端口 7946 :节点之间通讯端口(不开放则会负载均衡失效) UDP协议端口 4789 :overlay网络通讯端口 1.防火墙关闭 查看firewalld防火墙状态 systemctl statu…

Git 中 rebase、reset、revert 有什么区别?

在Git中,rebase、reset和revert是三个常用的操作命令,它们用于处理合并分支、回退版本、撤销更改。 区别: 1、rebase(变基):git rebase命令用于将一个分支的提交应用到另一个分支上,从而重新组…

Promise.all()和Promise.race()

参考文章 Promise.all() Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 const p Promise.all([p1, p2, p3]);上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例,如果…

etcd是什么

目录 1.关于etcd2.应用场景 本文主要介绍etcd 概念和基本应用场景。 1.关于etcd etcd是一个开源的、分布式的键值存储系统,用于共享配置和服务发现。它是由CoreOS团队开发的,主要用于实现分布式系统的配置管理和服务发现。 etcd的主要特性包括&#x…