
目录LVS是什么LVS发展史特点优势是什么LVS负载均衡四种工作模式LVS-NATLVS-DR生产环境最常用LVS-TUNLVS-FullNAT内核2.6.28新增快速记忆特点小口诀LVS基本操作规划安排开始创建集群查看开始增加服务器删除集群及服务器查看规则查看连接情况保存规则真正的保存规则到相应文件清空规则重启自动加载LVS是什么LVS(Linux Virtual Server,linu虚拟服务器)是一个开源的负载均衡软件项目主要用于Linux内核中实现网络服务的负载均衡和高可用性。它由章文嵩博士于 1998 年启动作为一个免费开源项目旨在通过集群技术构建高性能、高可用的服务器系统。LVS的出现是为了解决这些问题通过IP负载均衡技术将流量分发到多个后端服务器从而实现可扩展的网络服务。项目早期聚焦于Layer 4交换传输层负载均衡并逐步集成到Linux内核中成为Red Hat等企业级发行版的标准组件。如今LVS已经被广泛应用于大型网站作为高流量负载均衡器。LVS发展史1998年5月LVS第一个版本发布Linux kernel 2.0 上的第一个patch只支持VS/NAT实现round-robin调度算法。1998年11月实现了VS/IPTunneling机制。1999年5月实现了VS/Direct Routing机制移植到Linux kernel 2.2。2000年5月开始移植到Linux Kernel 2.4。2002年9月份开始移植到 linux kernel 2.5。2003年10月收录到Linux Kernel 2.5开发版。2003年11月Linux Kernel 2.4.23 包含LVS。2003年12月Linux Kernel 2.6.0 包含LVS。2008年11月Google工程师帮着实现了IPv6支持。2010年2月实现了SCTP传输层协议支持。特点优势是什么LVS的核心优势在于其高效、可靠和开源特性主要用于构建大规模、可拓展性的服务器集群适用于需要成本效益高、性能优越的负载均衡场景尤其在云计算和大数据时代它已成为构建弹性基础设施的首选工具。以下是LVS的优势均在均衡和高可用性LVS通过IP负载均衡如NAT、DR和TUN等模式将客户请求分发到多台真实服务器Real servers防止单台服务器过载。同时它支持主备路由器配置确保系统在故障时无缝切换避免服务被断。高性能和可拓展性作为内核级实现LVS处理Layer 4流量时开销低支持数千并发连接适用于Web、邮件、数据库等高负载场景。它能轻松拓展到数据中心级别甚至跨数据中心均衡流量。开源免费且灵活LVS是免费开源软件不需要昂贵的硬件负载均衡器如F5或Cisco可以通过软件配置实现复杂功能。同时它于keepalived等工具结合使用便于监控服务健康状态。安全性于兼容性LVS支持服务健康检查如Pulse能自动剔除故障服务器并兼容多种网络协议和环境如趋势科技的负载均衡配置。LVS负载均衡四种工作模式LVS一共4种工作模式其中前三种最常用。LVS-NAT(network address translation) 地址转换模式使用频率高。LVS-DR(direct routing)直接路由模式使用频率最高。LVS-TUN(IP tunneling) 隧道模式使用频率低。LVS-FullNAT(完全NAT模式)使用频率很低。在理解这四种原理之前我们先了解基础角色术语全称中文含义出现位置作用说明CIPClient IP客户端 IP客户端服务请求的来源地址。VIPVirtual IP虚拟服务 IPLVS 调度器对外外部访问 LVS 的入口 IP代表整个集群服务。VS / LBVirtual Server虚拟服务器LVS 调度器VIP 端口组合LVS 对外暴露的“虚拟服务实例”。DIPDirector IP调度器内网 IPLVS 调度器对内LVS 与真实服务器之间通信的 IP。RIPReal Server IP真实服务器 IPRS 节点RS 接收 LVS 转发请求的 IP。RSReal Server真实服务器应用服务器真正处理业务请求并返回响应。LVS-NAT核心原理数据包进出都经过 VS双向流量都由 VS 转发靠修改 IP 地址实现负载。1.客户端请求 CIP → VIP 到达 VS2.VS 修改目标 IP把 VIP 换成某一台 RIP转发给对应 RS3.RS 收到请求回包时目标 IP 是 CIP源 IP 是 RIP4.回包必须经过 VSVS 修改源 IP把 RIP 换回 VIP再发给客户端。关键特点1.RS 网关必须指向 DIP调度器内网 IP否则回包绕开 VS 直接丢包2.所有流量双向经过 VSVS 网卡带宽是瓶颈3.RS 和 VS 必须在同一网段4.配置简单支持端口映射80→80805.适合中小规模集群并发量不高场景。LVS-DR生产环境最常用核心原理只改二层 MAC 地址三层 IP 全程不变只有入站流量走 VS出站流量 RS 直接回客户端客户端 CIP → VIP 请求到达 VSVS 只修改目标 MAC 地址替换为选中 RS 的 MAC三层 IPCIP/VIP完全不动RS 收到数据包本机配置了 VIPlo 网卡虚拟 IP识别数据包是发给自己RS 直接回包VIP → CIP不经过 VS走内网网关直达客户端。关键约束VS 和 所有 RS必须同网段RS 本地 lo 网卡绑定 VIP且关闭 ARP 响应防止 ARP 冲突客户端 ARP 广播抢到 RS 机器回包不经过 VS彻底解决 VS 带宽瓶颈性能极强不支持端口映射RS 端口必须和 VIP 访问端口一致。LVS-TUN核心原理1.客户端 CIP → VIP 到 VS2.VS 新建 IP 隧道头把原数据包整体封装外层目标 IP 为 RIP转发给 RS3.RS 解封装隧道取出原始请求包CIP→VIP4.RS 直接回复 VIP→CIP不经过 VS。关键特点1.VS 和 RS可以跨网段、跨机房、跨公网2.RS 内核必须开启 IPIP 隧道模块3.RS lo 网卡绑定 VIP关闭 ARP4.仅入站流量过 VS无带宽瓶颈。LVS-FullNAT内核2.6.28新增核心原理双向完整 NAT同时修改源 IP 目标 IP彻底打破同网段限制。1.客户端 CIP→VIP 到达 VS2.VS 修改两处目标 IPVIP → RIP源 IPCIP → DIP调度器内网 IP3.RS 收到请求看到来源是 DIP回包目标为 DIP4.回包回到 VS再次双向转换源 RIP→VIP目标 DIP→CIP发回客户端。关键特点1.VS 与 RS不需要同一网段无网段限制2.双向流量全部经过 VS带宽瓶颈和普通 NAT 一样3.RS 不需要配置 VIP无需处理 ARP配置最简单4.可以做端口映射。快速记忆特点小口诀DR只改MAC同网段性能天花版线上首选NAT:该目标IP双向过调度适合小规模TUNIP包套壳跨机房专用FullNAT双选全改IP无网段限制但性能最差。LVS基本操作规划安排LVS 192.168.57.100/24RS1 192.168.57.101/24 web1RS2 192.168.57.102/24 web2安装LVS操作yum install -y ipvsadmIpvsadm --helpecho hello 57.101 Nginx1 /usr/share/nginx/html/index.htmlecho hello 57.102 Nginx2 /usr/share/nginx/html/index.html两个都启动nginxsystemctl start nginxss -tunlp |grep nginxLVS访问web测试[rootLVS ~]# curl 192.168.57.101hello 57.101 Nginx1[rootLVS ~]# curl 192.168.57.102hello 57.102 Nginx2开始创建集群查看版本信息[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnLVS默认模式DR默认算法WLC,这里换成rr[rootLVS ~]# ipvsadm -A -t 192.168.57.100:80 -s rr查看[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.57.100:80 rr开始增加服务器[rootLVS ~]# ipvsadm --add-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.101:80 --masquerading[rootLVS ~]# ipvsadm --add-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.102:80 --masquerading查看[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.57.100:80 rr- 192.168.57.101:80 Masq 1 0 0- 192.168.57.102:80 Masq 1 0 0删除集群及服务器[rootLVS ~]# ipvsadm -d -t 192.168.57.100:80 -r 192.168.57.101:80[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.57.100:80 rr- 192.168.57.102:80 Masq 1 0 0[rootLVS ~]#或者带全称[rootLVS ~]# ipvsadm --delete-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.102:80查看规则[rootLVS ~]# ipvsadm -Ln还有其他语句但是我没有列出来或者查看文件[rootLVS ~]# cat /proc/net/ip_vsIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP C0A83964:0050 rr- C0A83965:0050 Masq 1 0 0查看连接情况[rootLVS ~]# cat /proc/net/ip_vs_connPro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData保存规则注意默认规则是在内存中重启则清空打印规则不是真的保存展示[rootLVS ~]# ipvsadm-save-A -t LVS:http -s rr-a -t LVS:http -r 192.168.57.101:http -m -w 1-a -t LVS:http -r 192.168.57.102:http -m -w 1[rootLVS ~]# ipvsadm-save -n-A -t 192.168.57.100:80 -s rr-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1真正的保存规则到相应文件[rootLVS ~]# ipvsadm-save -n ipvs1001.rules[rootLVS ~]# lsanaconda-ks.cfg ipvs1001.rules[rootLVS ~]# cat ipvs1001.rules-A -t 192.168.57.100:80 -s rr-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1清空规则[rootLVS ~]# ipvsadm -C[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConn导入规则[rootLVS ~]# ipvsadm-restore -n ipvs1001.rules[rootLVS ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size4096)Prot LocalAddress:Port Scheduler Flags- RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.57.100:80 rr- 192.168.57.101:80 Masq 1 0 0- 192.168.57.102:80 Masq 1 0 0重启自动加载pvsadm服务自身参数配置不存转发规则 /etc/sysconfig/ipvsadm-configipvsadm.service默认读取/写入的配置文件 /etc/sysconfig/ipvsadm 这个文件不会自动生成需要手动执行保存命令否则文件是空 / 不存在[rootLVS ~]# ipvsadm-save -n /etc/sysconfig/ipvsadm[rootLVS ~]# cat /etc/sysconfig/ipvsadm-A -t 192.168.57.100:80 -s rr-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1[rootLVS ~]# cat /etc/sysconfig/ipvsadm-configIPVS_MODULES_UNLOADyesIPVS_SAVE_ON_STOPyesIPVS_SAVE_ON_RESTARTyesIPVS_STATUS_NUMERICyes[rootLVS ~]# echo ipvsadm-restore /etc/sysconfig/ipvsadm /etc/rc.local[rootLVS ~]# chmod x /etc/rc.local