转自http://blog.csdn.net/caoshuming_500/article/details/8291940
LVS 简介
LVS 是 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:html
- 负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【一般把这个IP 称为虚拟IP/VIP】
- 服务器池(server pool):一组真正执行client 请求的服务器,通常是咱们的web服务器;除了web,还有FTP,MAIL,DNS
- 共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务[不是很理解]
LVS 有4中经常使用的模式,分别讲一下4中模式的区别:前端
LVS DR 模式
-
DR(Direct Routing)模式的网络结构:

2. 工做的基本原理:
(1). client 发送一个pv请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,而后把此请求的package 的MAC地址修改成realserver的MAC地址;下面是咱们通讯的package的基本格式:web

在这个通讯的Package 有六个主要的字段:src mac 、 dst mac 、 src ip 、 src prot 、 dst ip 、 dst ip ; 如今这个包里面的 dst mac 是LVS VIP的网卡MAC [在TCP 三次握手完成时就只知道dsp ip 和dsp mac了]算法
- DR 模式会把packet 里面的dst mac 改为 realserver的MAC 地址;而后VIP会把这个包广播到当前的这个LAN里面;因此,要提早保证VIP 和 全部的realserver 在同一个网段,也就是在用过LAN里面。
同一个网段:用子网掩码来实现的,咱们知道咱们的网络中有局域网,一个局域网有不少台机器,这些LAN里面的全部机器都公用一个外网IP;咱们是怎样界定这个LAN的呢?用的就是网段号;IP只是是32位二进制数表示,这32位分为:网络位 + 主机位;表如今子网掩码是就是:网络位是1,主机位是0;这样网络位 = IP 按位 与 子网掩码;因此,咱们在把realserver 挂到LVS上前,须要确认DR模式,且IP 在同一个网段内。安全
- ARP协议会把这个包发送给真正的realserver【根据MAC 找到机器】
- 把这个src ip----->realserver 的mac 地址创建一个hash表;这这次链接未断开前,同一个client发送的请求经过查询hash表,在次发送到这台realserver上面;
- realserver 收到这个pachet后,首先判断dst ip 是不是本身的IP地址;若是不是就丢掉包;若是是就处理这个包。因此,DR模式还要在全部的realserver 的机器上面绑定VIP的ip地址:
- /sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255 -----> 这个要注意!
- 这样realserver 发现package 的dst 本身能识别【绑定了2个IP】,会处理这个包,处理完后把package的src mac dst mac src ip dst ip 都修改后再经过ARP 发送给VIP,经过VIP 发送给client。 realserver 发送给 VIP的package的格式:

- realserver 处理这个包后,会跟dst 为client ip 直接发送给 client ip;不通过lvs ;这样虽然效率比较高,可是有安全漏洞。
LVS DR 工做的基本原理package 的详细信息:http://os.51cto.com/art/201105/264303.htm服务器
3. LVS DR模式的注意状况:
- LVS 的VIP 和 realserver 必须在同一个网段,否则广播后全部的包都会丢掉: 提早确认LVS/硬件LB 是什么模式,是否须要在同一个网段
- 全部的realserver 都必须绑定VIP的IP地址,不然realserver 收到package后发现dst 不是本身的I怕,全部包都会丢掉。
- realserver·处理完包后直接把package 经过dst IP 发送给 client ,不经过LVS/迎接IP 了这样的LVS /VIP 效率会更高一点。【经过把realserver的ip暴漏给外界,不是很安全】
LVS NAT 模式
-
LVS NAT 模式的网络结构:

2. NAT 模式的基本原理:

- client:202.100.1.2
VIP: 202.103.106.5
realserver : 172.16.0.2 172.16.0.3 分别提供http 和ftp服务网络
(1). 首先client 发送请求[package] 给VIP;框架
- #client 发送给VIP的package:
- SOURCE 202.100.1.2:3478 EDST 202.103.106.5:80
(2). VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,而后把package 的DST IP 修改成realserver: 运维
- # VIP 发送给realserver的package:
- SOURCE 202.100.1.2:3478 EDST 172.16.0.3:8000
(3). realserver 收到这个package后判断dst ip 是本身,就处理这个package ,处理完后把这个包发送给LVS VIP:性能
- # realserver 处理完成后发送给VIP的package:
- SOURCE 172.16.0.3:8000 EDST 202.100.1.2:3478 # lvs 收到这个package 后发现dst ip 不是本身的会不会丢掉?感受有错误
(4). LVS 收到这个package 后把sorce ip改为VIP的IP,dst ip改为 client ip而后发送给client:
- #VIP收到package 后修改sourceip 发送给client的包:
- SOURCE 202.103.106.5.80:80 EDST 202.100.1.2:3478
3. NAT 模式的注意事项:
- NAT 模式修改的是dst IP,直接走 switch 或pub 不须要修改MAC 因此,不须要VIP 和realserver 同在一个网段内。
- NAT 模式 package in 和package out 都须要通过LVS ;所以LVS 的可能会成为一个系统瓶颈问题。
LVS FULL NAT 模式
-
FULL NATT的基本原理:
FULL NAT 在client请求VIP 时,不只替换了package 的dst ip,还替换了package的 src ip;但VIP 返回给client时也替换了src ip;仍是经过上面NAT 模式的工做缘由的图进行分析 FULL NAT 的工做原理:
(1). 首先client 发送请求[package] 给VIP;
- #client 发送给VIP的package:
- SOURCE 202.100.1.2:3478 EDST 202.103.106.5:80
(2). VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,而后把package 的DST IP 修改成realserver;把sorce ip 改为 lvs 集群的LB IP
- # VIP 发送给realserver的package:
- SOURCE 172.24.101.135[lb ip] EDST 172.16.0.3:8000
(3). realserver 收到这个package后判断dst ip 是本身,就处理这个package ,处理完后把这个包发送给LVS VIP:
- # realserver 处理完成后发送给VIP的package:
- SOURCE 172.16.0.3:8000 EDST 172.24.101.135[这个ip是 LVS VIP 集群的一太机器]
(4). LVS 收到这个package 后把sorce ip改为VIP的IP,dst ip改为 client ip而后发送给client:
- #VIP收到package 后修改sourceip 发送给client的包:
- SOURCE 202.103.106.5.80:80 EDST 202.100.1.2:3478
2. FULL NAT 模式的注意事项:
- FULL NAT 模式也不须要 LBIP 和realserver ip 在同一个网段;
- full nat 跟nat 相比的优势是:保证RS回包必定可以回到LVS;由于源地址就是LVS--> 不肯定
- full nat 由于要更新sorce ip 因此性能正常比nat 模式降低 10%
LVS IP TUNNEL 模式
-
IP TUNNEL 模式的网络结构图:

2. IP TUNNEL 模式的基本原理:
仍是按NAT 模式的基本框架来讲明TUNNEL 模式的基本原理:
(1). 首先client 发送请求[package] 给VIP;
- #client 发送给VIP的package:
- SOURCE 202.100.1.2:3478 DST 202.103.106.5:80
(2). VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver;并把client发送的package 包装到一个新的IP包里面;新的IP包的dst是realserver的IP
- # VIP 发送给realserver的package:
- client 发送的包 <strong>DST 172.16.0.3:8000</strong>
(3). realserver 收到这个package后判断dst ip 是本身,而后解析出来的package的dst是VIP;会检测咱们的网卡上是否帮了VIP的ip地址;若是帮了就会处理这个包,若是没有直接丢掉。 咱们通常在realserver上面 lo:0 绑定了VIP的ip地址,就能够处理
- # realserver 处理完成后直接发送给client响应包:
- SOURCE 172.16.0.3:8000 DST 202.100.1.2:3478 【client ip】
3. IP TUNNEL 模式的注意:
- TUNNEL 模式必须在全部的realserver 机器上面绑定VIP的IP地址
- TUNNEL 模式的vip ------>realserver 的包通讯经过TUNNEL 模式,不论是内网和外网都能通讯,因此不须要lvs vip跟realserver 在同一个网段内
- TUNNEL 模式 realserver会把packet 直接发给client 不会给lvs了
- TUNNEL 模式走的隧道模式,因此运维起来比较难,因此通常不用
LVS DR、NAT、FULL NAT、IP TUNNEL 模式的区别:
-
是否须要lvs vip跟realserver 在同一个网段:
DR 模式由于只修改 package的 MAC地址经过ARP广播的形势找到realserver,因此 要求LVS 的VIP 和realserver的IP 必须在同一个网段内,也就是在挂载VIP 时先确认LVS的工做模式,若是是DR模式须要先确认这个IP 只是否能挂在这个LVS下面。
其余模式由于都会修改DST ip 为 realserver的IP 地址,因此不须要在同一个网段内
2. 是否须要在realserver 绑定LVS vip 的IP 地址:
realserver 收到package后会判断dst ip 是不是本身的ip,若是不是就直接丢掉包;由于DR模式dst 没有修改仍是LVS的VIP;因此须要在realserver上面绑定VIP;IP TUNNEL 模式只是对package 从新包装一层,realserver解析后的IP包的DST 仍然是 LVS的VIP ;也须要在realserver上面绑定VIP;其余的都不须要
3. 四种模式的性能比较:
由于DR模式 TP TUNELL 模式都是在package in 时通过LVS ;在package out是直接返回给client;因此两者的性能比NAT 模式高;但IP TUNNEL 由于是TUNNEL 模式比较复杂,其性能不如DR模式;FULL NAT 模式由于不只要更换 DST IP 还更换 SOURCE IP 因此性能比NAT 降低10%
因此,4中模式的性能以下:DR --> IP TUNNEL --->NAT ----->FULL NAT
LVS 实践中的积累
1. lvs 不会主动断开链接
好比 client 经过LVS VIP 采用长连接方式访问server,即便咱们把LVS下面的realserver的status.html文件删除了;原本经过LVS 跟这台realserver 连接的请求也不会被LVS
强制断开;要等到client本身断开链接;【在client主动断开期间;client能够跟这台realserver 正常通讯】;这样有个好处时在网络抖动时;LVS不会频繁的流量截断,到不一样的RS上面