LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一; lvs的几种模型: 1、NAT模型; 特性: 1、real server中的各服务器rip地址应该使用私有地址,有效隐藏内部服务器; 2、real server中各服务器的网关必须指向dip。rip和dip必须在同一网段内,保证流量经过Director; 3、请求和响应的报文都得经过Directory(SNAT+DNAT); 4、在高负载应用场景中,Directory很可能成为系统性能瓶颈; 5、支持DNAT的端口映射。将80映射到real server中的8080; 6、real server中的各服务器可以使用任意支持集群服务的OS(系统); 注意:该类型适合并发和请求数量不高的场景中; 2、DR模型; 特性: 1、real server可以使用私有地址,但也可以使用公网地址,此时可以直接通过互联网连入real server以实现配置、监控等; 2、real server的网关一定不能指向DIP; 3、real server跟Directory要在同一物理网络内(不能由路由器分离); 4、请求报文经过Directory,但响应报文一定不经过Directory; 5、不支持端口映射; 6、real server可以使用大多数的操作系统; 3、TUN模型; 特性: 1、rip、dip、vip都得是公网地址; 2、real server的网关不能指向也不可能指向dip; 3、请求报文经过Directory,但响应报文一定不经过Directory; 4、不支持端口映射; 5、real server的系统必须得支持隧道功能; 4、FULLNAT模型; 特性: fullnat:在nat模型的基础上,在Directory上将请求的报文(cip+vip),改成(dip+rip)。这样,当real server收到后,将回包的报文为rip+dip,然后再由Directory将报文再次改变成vip+cip即可。保证回程报文经过Directory。 主要由Directory将报文实施转换动作; 优点:Directory和real server可以跨不同的vlan部署。可以不在一个网段; LVS的10种调度方法: 静态调度: rr算法:Round Robin,轮询。轮询real server中的服务器。最简单、易实现; wrr算法:Weighted RR,加权轮询。根据real server的权重比例去调度不同权重的服务器。高权重的被调度的次数就多; sh算法:source hashing,源地址hash。来自同一源ip的请求都发往固定的服务器上去。主要目的是为了实现session绑定的; dh算法:destination hashing,目的地址hash。去往同一目标的客户端请求会话被固定在一个响应服务器上; 缺陷:不会考虑后台real server的负载情况,是不是很忙,只知道根据算法去轮询。比较“傻”; 动态调度: lc算法:Least connection,最小连接。根据服务器的链接数来进行判断和执行调度; 公式:Overhead=Action*256+Inactive 负载=(活动链接数*256+非活动链接数) 计算结果中,最小者胜出成为被调度者。如果值一样,则执行轮询; wlc算法:Weighted LC,权重的最小连接。在最小连接的基础上增加权重; 公式:Overhead=(action*256+非活动链接数)/weight(权重) 计算结果越小者胜出,被执行调度。如果值一样,则之上而下进行轮询; 缺点:可能性能差的服务器刚好被轮询了,而性能好的服务器反而没轮询到; sed算法:Shortest Expect Delay,最短期望延迟。防止挑到性能最差的服务器进行相应。改进版的wlc; 计算结果越小者胜出,被执行调度。永远是权重大的服务器排在最前面被轮询到; 公式:overhead=(active+1)*256/weight ,不考虑非活动连接数; nq算法:Nerver Queue,永不排队。改进了的sed。刚开局之后,所有服务器首先根据sed算法轮询一遍,(第一个请求给权重最大的,第二个、第三个...依次排下去,排一遍)。然后再根据sed算法再重新计算调度; lblc算法:Locality-based least conection,基于本地的最小连接。相当于dh+lc。用的不多; lblcr算法:Replicated and Locality-based least connection,带复制的基于本地的最小连接。用在后端服务器是cache服务器上。用的不多;
缺陷:LVS是无法检测后端real server的健康状况的; LVS的NAT模型的实验: 拓扑: 环境: web1:192.168.12.11 web2:192.168.12.12 directory: 内网ip:192.168.12.1 外网ip:192.168.57.136 用户ip:192.168.57.155 web服务器,基于apache服务器搭建; direcotry,基于lvs; 在web1上: [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:34:DA:E2 inet addr:192.168.12.11 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe34:dae2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4173 errors:0 dropped:0 overruns:0 frame:0 TX packets:3474 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:380871 (371.9 KiB) TX bytes:448376 (437.8 KiB) 在web2上: [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:03:A5:B7 inet addr:192.168.12.12 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe03:a5b7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5181 errors:0 dropped:0 overruns:0 frame:0 TX packets:2500 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:523926 (511.6 KiB) TX bytes:268639 (262.3 KiB) 在directory上: [root@localhost ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:B2:B7:26 inet addr:192.168.57.136 Bcast:192.168.57.255 Mask:255.255.255.128 inet6 addr: fe80::20c:29ff:feb2:b726/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2928 errors:0 dropped:0 overruns:0 frame:0 TX packets:451 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:632507 (617.6 KiB) TX bytes:42962 (41.9 KiB) eth1 Link encap:Ethernet HWaddr 00:0C:29:B2:B7:30 inet addr:192.168.12.1 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feb2:b730/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:928 errors:0 dropped:0 overruns:0 frame:0 TX packets:906 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:79442 (77.5 KiB) TX bytes:87637 (85.5 KiB) 在web1上: [root@localhost ~]# cat /var/www/html/index.html <h1>192.168.12.11-web1</h1> [root@localhost ~]# 在web2上: [root@localhost ~]# cat /var/www/html/index.html <h1>192.168.12.12-web2</h1> [root@localhost ~]# 在directory上: [root@localhost ~]# yum -y install ipvsadm [root@localhost ~]# ipvsadm -A -t 192.168.57.136:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.57.136:80 -r 192.168.12.11 -m [root@localhost ~]# ipvsadm -a -t 192.168.57.136:80 -r 192.168.12.12 -m [root@localhost ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.57.136:80 rr -> 192.168.12.11:80 Masq 1 0 0 -> 192.168.12.12:80 Masq 1 0 0 在windwos客户端上:(验证。不断的刷新,会轮训显示web1和web2) 在web1上: [root@localhost ~]# tail -f /var/log/httpd/access_log 192.168.57.177 - - [08/Jul/2015:19:18:26 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko LBBROWSER" 在web2上: [root@localhost ~]# tail -f /var/log/httpd/access_log 192.168.57.177 - - [08/Jul/2015:19:18:25 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko LBBROWSER" ok,rr的负载均衡的轮询模式就这样完成了; LVS的DR模型的实验: 拓扑: 环境:
web1:192.168.12.11
虚拟ip:192.168.12.100
web2:192.168.12.12
虚拟ip:192.168.12.100
directory:
内网ip:192.168.12.1
虚拟ip:192.168.12.100(用户直接访问的ip)
用户ip:192.168.12.10
web服务器:基于apache服务器搭建;
direcotry:基于lvs;
实际生产环境中,要求虚拟ip必须是公网ip,且能够被直接路由到用户端的;web服务器的ip地址也是公网ip地址,且能被直接路由; 注意:这里只是为了测试效果,ip地址没有区分内网或者公网; 1、基础配置: 在directory上: [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:B2:B7:30 inet addr:192.168.12.1 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feb2:b730/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5499 errors:0 dropped:0 overruns:0 frame:0 TX packets:3875 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:486888 (475.4 KiB) TX bytes:470006 (458.9 KiB) 在web1上: [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:34:DA:E2 inet addr:192.168.12.11 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe34:dae2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3112 errors:0 dropped:0 overruns:0 frame:0 TX packets:1949 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:281203 (274.6 KiB) TX bytes:242480 (236.7 KiB) 在web2上: [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:03:A5:B7 inet addr:192.168.12.12 Bcast:192.168.12.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe03:a5b7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2897 errors:0 dropped:0 overruns:0 frame:0 TX packets:1892 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:265958 (259.7 KiB) TX bytes:215427 (210.3 KiB) 注意:web服务器在配置ip地址时,网关地址不能指向directory上,不然相应数据包会经过directory进行转发,这是我们不想看到的!!! 2、配置虚拟ip地址和路由: 在directory上: [root@localhost ~]# ifconfig eth1:0 192.168.12.100 netmask 255.255.255.255 broadcast 192.168.12.100 [root@localhost ~]# route add -host 192.168.12.100 dev eth1:0 [root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.12.100 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 192.168.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1 在web1上: [root@localhost ~]# ifconfig lo:0 192.168.12.100 netmask 255.255.255.255 broadcast 192.168.12.100 [root@localhost ~]# route add -host 192.168.12.100 dev lo:0 [root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.12.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo 192.168.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1 在web2上: [root@localhost ~]# ifconfig lo:0 192.168.12.100 netmask 255.255.255.255 broadcast 192.168.12.100 [root@localhost ~]# route add -host 192.168.12.100 dev lo:0 [root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.12.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo 192.168.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1 ok,三个节点上都要配置虚拟ip地址及路由; 注意:虚拟ip地址的掩码必须是“255.255.255.255”的!!! 3、配置web服务器内核参数。 (防止虚拟ip地址所在网卡主动外网通告mac地址,防止虚拟ip地址所在网卡主动响应请求。如果不这样做,会导致三个节点上的虚拟ip地址冲突。因此,只能限制web服务器上的虚拟ip地址,而不是directory上的) 在web1和web2上: [root@localhost conf]# pwd /proc/sys/net/ipv4/conf [root@localhost conf]# echo 1 > all/arp_ignore [root@localhost conf]# echo 1 > eth1/arp_ignore [root@localhost conf]# echo 2 > eth1/arp_announce [root@localhost conf]# echo 2 > all/arp_announce 注意:这里为了防止出现意外,我们对所有网卡和物理网卡都进行了通告和响应限制; ipvs规则的创建: 在direcroty上: [root@localhost ~]# ipvsadm -A -t 192.168.12.100:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.11 -g [root@localhost ~]# ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.12 -g [root@localhost ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.12.100:80 rr -> 192.168.12.11:80 Route 1 0 0 -> 192.168.12.12:80 Route 1 0 0 注意:这里因为是DR模型,所以必须是“-g”选项。任然采用均衡的轮询方式处理请求; ok,lvs的DR模型的rr算法调度至此配置完毕; 4、测试: 在windows客户机上:(不断的刷新会出现轮训的现象) 在direcotry上: [root@localhost ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.12.100:80 rr -> 192.168.12.11:80 Route 1 0 16 -> 192.168.12.12:80 Route 1 0 16 :可以看到两台服务器响应连接是均衡的; ok,实验成功! |
转自http://www.iyunv.com/thread-85077-1-1.html
相关推荐
其核心优势在于通过直接路由的方式,在数据链路层实现请求的分发,避免了传统NAT模型下的IP地址转换,从而显著提高了处理速度和整体性能。 **1.1 请求处理流程** - **接收请求**:LVS-DR的前端负载均衡器...
LVS通过不同的工作模式,包括VS/NAT、VS/TUN和VS/DR,实现了负载均衡功能,其中VS/NAT模型是其一种常见的工作方式。 **LVS-NAT模型原理** 在LVS-NAT模型中,LVS调度器(Director)通过修改IP包的源或目标IP地址,...
### LVS 实现负载均衡详解 #### 一、LVS简介与重要性 LVS (Linux Virtual Server) 是一种在 Linux 平台上实现负载...对于希望提升网络服务性能的企业和个人来说,了解并掌握 LVS 的原理和配置方法是非常有价值的。
《Linux Virtual Server Administration》这本书深入探讨了如何在Red Hat Enterprise Linux 5.2环境下构建、配置和管理高可用性及可扩展性的虚拟服务器系统。LVS(Linux Virtual Server)是一种利用特殊的路由和负载...
**负载均衡服务(LVS)详解** 在构建大型、高性能的网络服务时,负载均衡技术是不可或缺的关键组件。...通过深入学习LVS的相关文档,如"LVS.pdf",可以进一步了解其详细配置和使用技巧,提升网络服务的管理能力。
### LVS+Keepalived 实现高可用负载均衡 ...综上所述,通过LVS+Keepalived结合DR模型,可以构建出一套既高效又稳定的高可用负载均衡系统,这对于处理大量并发访问、提高服务可靠性和用户体验至关重要。
LVS 通常使用三种模型来实现负载均衡:NAT 模型、DR 模型和 TUN 模型。本文将详细介绍 NAT 和 DR 模型,并给出具体的配置示例。 #### 三、NAT 模型 NAT (Network Address Translation) 模型是最简单的 LVS 架构之...
- **VS/NAT**(虚拟服务器通过网络地址转换):适合于较小规模的集群,易于实现和管理,但可能增加额外的网络延迟。 - **VS/TUN**(虚拟服务器通过IP隧道):适用于地理位置分散的服务器集群,可以跨越不同的物理...
- **网络地址转换(Network Address Translation, NAT)**:在这种模式下,LVS调度器将请求报文的目标IP地址和端口改为后端服务器的IP地址和端口,然后转发给服务器,返回时再进行反向转换。NAT模式对网络环境的要求较...
LVS 的工作模式主要有 4 种:DR、NAT、TUNNEL 和 Full-NAT。下面我们来简单介绍一下 DR、NAT 和 Full-NAT 模式。 1、DR 模式 请求由 LVS 接受,由真实提供服务的服务器(RealServer, RS)直接迒回给用户,迒回的...
通过合理的架构设计和策略配置,LVS不仅提高了服务的可用性,还提升了系统的伸缩性和性能。结合Java技术,它构建了一个健壮、灵活的电商服务基础设施,确保了淘宝平台的稳定运行,为用户提供无中断的购物体验。
LVS基于OSI模型的第四层——传输层,支持TCP和UDP协议。其转发主要通过两种方式:IP地址修改(NAT模式)和目标MAC地址修改(DR模式)。 **LVS在第四层做负载均衡的原因** 1. **不处理HTTP包**:LVS不解析应用层的...
LVS支持多种工作模式,如:NAT(网络地址转换)、IP Tunneling(IP隧道)、Direct Routing(直接路由)和DR(直接路由)。这些模式可以根据不同的网络环境和需求选择,实现高效的负载分发。LVS手册中文加目录版.doc...
- 对于NAT模型,真实服务器的网关应配置为LVS调度器的内部接口地址。 通过以上知识点的介绍,我们可以看到实现一个基于LVS的HTTP负载调度器不仅需要对LVS及负载均衡原理有深入了解,还需要具备服务器配置、网络参数...
通过对 LVS 和 Keepalived 的深入了解,以及具体的部署步骤和技术细节的学习,可以帮助 IT 人员更好地管理和维护这种类型的系统架构。此外,通过实践操作,还可以进一步探索如何优化和调整该架构以适应不同的应用...
- **NAT(Network Address Translation)方式**:也称为IP伪装,客户端与服务器之间的通信通过LVS节点,LVS节点修改客户端的IP地址和端口号,使得服务器看到的请求源是LVS节点的IP,而真实的服务器IP对客户端是透明...