高可用与负载均衡(6)之聊聊LVS的三种模式
LVS的赘述
- IPVS,ipvs ,ip_vs是负载均衡器中的内核代码
- LVS是完整的负载均衡器+后端服务器。这些组件组成了虚拟服务器。
LVS是一个4层负载均衡方案,标准的客户端-服务器网络语义也被保留下来了。每个客户端都认为直接连接到了后端服务器,同时后端服务器也认为直接连接到了客户端。客户端和后端服务器没有办法获知负载均衡器干预了网络连接。负载均衡器不会检查包的内容,不能够根据包的内容做出负载均衡的判断(例如包里面包含了cookie),LVS不是一个高性能计算集群或者分布式集群,后端服务器之间互相感知不到,不能够协同工作。
为什么要有LVS?
- 为了更高的吞吐量。在LVS里面,添加后端服务器的成本是线性的,但是如果采用替换替换为更高端单一的服务器达到相同的效果,成本会高很多,前者是横向扩展(scale out),后者是纵向扩展(scale up)
- 为了冗余。后端服务器可以从LVS上被管理员提出,然后做其他相关的服务器操作。
- 为了适应性。如果吞吐量被评为逐步增加的,或者事件性陡增,后端服务器的增加可以对用户透明。
LVS的三中各模式
LVS有三种模式:LVS-NAT,LVS-DR,LVS-TUN。下面对说说每个模式。
LVS-NAT
NAT是LVS软件实现第一种转发模式,搭建一个LVS集群DR模式的话,是最简单的,因为不需要对后端服务器做任何设置上的变更。LVS-NAT其实也是基于NAT技术的,网络数据流如下:
- LB收到client的请求后,改写目的IP地址为后端服务器真实IP和端口号,转发给后端服务器。
- 后端服务器处理完成后,回复给负载均衡器。
- 负载均衡服务器改写源IP为虚拟IP(其实就是LVS的ip),发送给客户端。
如图所示:
lvs在nat模式中,是有1个内网IP,还有1个外网IP的。所有后端服务器的网关都指向LVS的内网IP。
LVS-DR
DR是direct Routing的缩写,是直连路由的。
请求流程如下:
- client首先发起Arp 广播,请求LVS1的MAC地址,LVS回复client,告诉它自己的MAC地址。此时arp广播,所以mac地址都是0
- Client连接lvs的80端口,发送TCP SYN。此时数据包的目标mac地址是lvs1,目的IP也是lvs1的外网IP。
- 负载均衡器转发报文,在转发之前修改mac地址,把目标mac地址由LVS的改为后端服务器WEB1的。
- web服务器处理client的请求,此时MAC地址为web服务器的,目标IP也是。
- web服务器处理完请求,回包的给client,此时回包的目的MAC是client的mac,目的IP也是client,回包不需要经过lvs服务器了。
LVS-DR模式简要概括就是:client发起请求经过lvs调度后,后端服务器响应数据直接发回给客户端,不再经过LVS了。
流程图如下:
LVS-Tun
这是LVS原创的一种转发模式,基于LVS-DR。LVS把原始的包(源客户端IP到虚拟IP)封装成ipip包,目的IP地址就是后端服务器的真实IP,然后进入OUTPUT链,并路由到后端服务器。后端服务器解封ipip包并处理,以源地址虚拟IP,目的地址客户端IP直接回复给客户端。这种模式就是为了解决服务器和负载均衡器不在同一个物理区域设计的(也就是跨网段)
3种模式对比
- 从后端服务器要求来看,LVS-NAT只需要把后端服务器网关指向负载均衡器的内网地址,无任何其它的要求;LVS-DR模式要求后端服务器禁用对虚拟IP的arp响应。后端服务器的网关不指向LVS;LVS-Tun要求后端服务器支持ipip解封包,部分操作系统不支持。
- 从吞吐量上来看,LVS-DR最高,LVS-NAT最低。
- 从配置项来看,LVS-NAT最简单,其他两个比较复杂。
分类:
负载均衡与高可用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构