LVS (Linux Virtual Server)
LVS 负载均衡
1.概念:
LVS 是 Linux Virtual Server 的简写 (Linux 虚拟服务器 ), 是由章文嵩博士主导, 它虚拟出一个服务器集群,然后进行负载均衡
的项目, 目前LVS 已经被集成到Linux内核模块中了, 外部请求到达LVS后它会根据不同的调度算法把请求分发到具体的后端真实服务器, 又根据LVS不同的工作模式 后端服务器会选择不同的方式将 响应数据返回, LVS工作模式分为 NAT模式, TUN模式, DR模式
2.思考
为什么有LVS , 当我们有了 nginx的时候 直接把nginx暴露出去不就行了吗, nginx 也是负载均衡器啊??
因为nginx工作在7层而lvs工作在四层效率高,如果你把单个nginx暴露出去单台nginx承受不了压力,需要集群,lvs则充当了Ngin的集群调度者,所有的请求都通过LVS,仅作请求分发用,没有流量,正常不会出现故障。
为什么四册比七层效率高? 四层是TCP层,使用IP+端口四元组的方式。只是修改下IP地址,然后转发给后端服务器,TCP三次握手是直接和后端连接的。只不过在后端机器上看到的都是与代理机的IP的established而已,LVS中没有握手。 7层代理则必须要先和代理机三次握手后,才能得到7层(HTT层)的具体内容,然后再转发。意思就是代理机必须要与client和后端的机器都要建立连接。显然性能不行,但胜在于七层,人工可操作性高,能写更多的转发规则。
nginx 支撑 1w - 10w并发;
lvs 支撑 10w - 50w;
F5 支撑 200w - 1000w;
3.LVS NAT 模式
NAT 模式(即:网络地址映射)其工作原理是:客户端访问LVS时,LVS通过重写请求报文的目标地址,且根据预设的调度算法,将请求分派给后端真实服务器,真实服务器接收到请求处理后,发出响应报文也需要通过LVS返回,返回时需要修改报文的源地址,然后返回给客户,完成整个负载调度过程
DNAT:目标地址转换,改变的是目标地址
SNAT:源地址转换,改变的是源地址
NAT 模式就是使用 SNAT 和 DNAT 技术完成报的转发,NAT 方式可支持任何的操作系统,以及私有网络,并且只需一个 Internet IP 地址,非常节省成本,但是整个系统的性能受到限制。因为NAT模式 响应报文也要经过LVS 会影响LVS 的性能。
LVS NAT 模式搭建环境
LVS 需要2个网卡 一个是对外的 用于作为VIP , 一个是内部网络 和 后端真实IP 一个网段的,我这里用虚拟机模拟 VIP用桥接网卡 , DIP用仅主机网卡即可
配置LVS 的 ipvs模块 (通过ipvsadm配置)
ipvs模块是已经集成到 linux内核了,可以通过ipvsadm 工具去 开启ip_forward , 开启路由转发 # 开启ip_forward echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p #安装LVS管理工具 yum -y install ipvsadm # 可以通过 ipvsadm -Ln 查看虚拟服务, 此时是没有配置的
#使用 ipvsadm 命令设置转发规则 #-A 添加虚拟服务器 #-t 表示 TCP 的服务 VIP:PORT #-s 指定调度算法 rr 表示 round-robin 平均轮循 #-a 表示添加 real server 的地址 #-r 指定 real server 的 IP 地址 #-m 表示 masquerade 也就是 NAT 方式的 LVS #-g 表示 dr模式 后面有机会说 [root@lvs ~] ipvsadm -A -t 172.30.2.151:80 -s rr [root@lvs ~] ipvsadm -a -t 172.30.2.151:80:80 -r 172.16.225.110 -m [root@lvs ~] ipvsadm -a -t 172.30.2.151:80:80 -r 172.16.225.111 -m
再次查看 可以看到配置如下
简单的 curl 测试一下 :
可以看到效果已经出来了 我们访问了 172.30.2.151 这个 vip 轮训路由到后端2台真实服务器的nginx了
ipvsadm -Ln -c # 查看 ipvs 连接请求情况
参考地址:https://mp.weixin.qq.com/s/OeuZxl5nDceizpn3_yYApw
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!