LVS 是 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:
LVS 有4中常用的模式,分别讲一下4中模式的区别:
(1). client 发送一个pv请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,然后把此请求的package 的MAC地址修改为realserver的MAC地址;下面是我们通信的package的基本格式:
在这个通信的Package 有六个主要的字段:src mac 、 dst mac 、 src ip 、 src prot 、 dst ip 、 dst ip ; 现在这个包里面的 dst mac 是LVS VIP的网卡MAC [在TCP 三次握手完成时就只知道dsp ip 和dsp mac了]
同一个网段:用子网掩码来实现的,我们知道我们的网络中有局域网,一个局域网有很多台机器,这些LAN里面的所有机器都公用一个外网IP;我们是怎样界定这个LAN的呢?用的就是网段号;IP只是是32位二进制数表示,这32位分为:网络位 + 主机位;表现在子网掩码是就是:网络位是1,主机位是0;这样网络位 = IP 按位 与 子网掩码;所以,我们在把realserver 挂到LVS上前,需要确认DR模式,且IP 在同一个网段内。
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255 -----> 这个要注意!
LVS DR 工作的基本原理package 的详细信息:http://os.51cto.com/art/201105/264303.htm
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
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
还是按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 发送的包 DST 172.16.0.3:8000
(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】
DR 模式因为只修改 package的 MAC地址通过ARP广播的形势找到realserver,所以 要求LVS 的VIP 和realserver的IP 必须在同一个网段内,也就是在挂载VIP 时先确认LVS的工作模式,如果是DR模式需要先确认这个IP 只是否能挂在这个LVS下面。
其他模式因为都会修改DST ip 为 realserver的IP 地址,所以不需要在同一个网段内
realserver 收到package后会判断dst ip 是否是自己的ip,如果不是就直接丢掉包;因为DR模式dst 没有修改还是LVS的VIP;所以需要在realserver上面绑定VIP;IP TUNNEL 模式只是对package 重新包装一层,realserver解析后的IP包的DST 仍然是 LVS的VIP ;也需要在realserver上面绑定VIP;其他的都不需要
因为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
比如 client 通过LVS VIP 采用长链接方式访问server,即使我们把LVS下面的realserver的status.html文件删除了;本来通过LVS 跟这台realserver 链接的请求也不会被LVS
强制断开;要等到client自己断开连接;【在client主动断开期间;client可以跟这台realserver 正常通信】;这样有个好处时在网络抖动时;LVS不会频繁的流量截断,到不同的RS上面