LVS 是 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:前端
a. 负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上 执行,而client端认为是返回来一个同一个IP【一般把这个IP 称为虚拟IP/VIP】web
b. 服务器池(server pool):一组真正执行client 请求的服务器,通常是咱们的web服务器;除了web,还有FTP,MAIL,DNS算法
c. 共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相 同的服务服务器
共有4中模式:LVS-DR,LVS-NAT,LVS-FULLNAT,LVS-TUN负载均衡
client发送一个请求到VIP,LVS服务器根据VIP选择对应的realServer的pool,根据算法,在pool中选择一台realServer,将包广播到vip的局域网,同时LVS在hash表中记录该次链接,realServer收到包以后,处理完请求,把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,将属于这次链接的请求直接发到刚才选择的realServer上;当链接停止或者超时,hash表中的记录将被删除。运维
假设client,director,vip,realServer的ip及mac地址以下性能
client | director | vip | realServer | |
IP | 192.168.138.20 | 192.168.143.231 | 192.168.143.122 | 192.168.143.82 |
MAC | X:X:X:X:X:5d | X:X:X:X:X:96 | X:X:X:X:X:96 | X:X:X:X:X:82 |
第一步:client向vip发起请求,director接收到请求,ip包头的信息以下spa
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:5d | X:X:X:X:X:96 | ... | 192.168.138.20 | 192.168.143.122 | ... |
第二步:LVS根据负载均衡算法,选择一台realServer,修改dst mac地址为realServer的mac地址,将数据包转发到局域网,此时ip包头信息以下orm
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:96 | X:X:X:X:X:82 | ... | 192.168.138.20 | 192.168.143.122 | ... |
第三步:realServer接收到包,拆开后发现目标IP(VIP)与本地匹配,因而处理这个报文。随后从新封装报文,发送到局域网,IP包头及数据帧头信息以下server
source mac | dst mac | ... | source ip | dst ip | ... |
X:X:X:X:X:82 | X:X:X:X:X:5d | ... | 192.168.143.122 | 192.168.138.20 | ... |
第四步:若是,经过路由将包路由到client
a. LVS必须与realServer在同一个局域网,由于LVS收到数据包后,只修改了dst mac地址,而后广播出去,若是LVS与realServer不在统一网段,realServer永远收不到数据包
b. LVS-DR不须要路由转发,同一局域网内,不通过路由
c. realServer需呀配置 vip
假设client,vip,realServer的ip地址以下
client | vip | realServer | |
IP | 192.168.138.20 | 192.168.143.122 | 192.168.143.82 |
第一步:client 发送包到LVS服务器的VIP上
... | source ip | dst ip | ... |
... | 192.168.138.20 | 192.168.143.122 | ... |
第二步:VIP选择一个realServer,并记录链接信息到hash表中,而后修改client的request的目的IP地址为realServer的地址,将请求发给realServer
... | source ip | dst ip | ... |
... | 192.168.138.20 | 192.168.143.82 | ... |
第三步:realServer收到请求包后,发现目的IP是本身的IP,因而处理请求,而后发送reply给LVS,回复包以下
... | source ip | dst ip | ... |
... | 192.168.143.82 | 192.168.138.20 | ... |
第四步:LVS收到reply包后,修改reply包的的源地址为VIP,发送给client;之后从client来的属于本次链接的包,查hash表,而后发给对应的realServer
... | source ip | dst ip | ... |
... | 192.168.143.122 | 192.168.138.20 | ... |
a. NAT修改的是dst ip,不须要vip与realserver在同一个网段内
b. NAT模式包的进出都须要通过LVS ;所以LVS 的可能会成为一个系统瓶颈问题
LVS-FULLNAT在client请求VIP 时,不只替换了数据包的dst ip,还替换了数据包的 source ip;但VIP 返回给client时也替换了source ip
假设client,vip,realServer的ip地址以下
client vip realServer
IP 192.168.138.20 192.168.143.122 192.168.143.82
第一步:client 发送包到LVS服务器的VIP上
... source ip dst ip ...
... 192.168.138.20192.168.143.122 ...
第二步:VIP 收到数据包后,会根据LVS设置的LB算法选择一个合适的realserver,而后把数据包的dst ip修改成realserver的ip;把sorce ip 改为 LVS的vip
... source ip dst ip ...
... 192.168.143.122 192.168.143.82 ...
第三步: realserver 收到这个数据包后判断dst ip 是本身,处理完后把这个包发送给LVS VIP
... source ip dst ip ...
... 192.168.143.82 192.168.143.122 ...
第四步: LVS 收到这个数据包后把sorce ip改为VIP的IP,dst ip改为 client ip而后发送给client
... source ip dst ip ...
... 192.168.143.122 192.168.138.20 ...
3.2 注意事项
a. FULLNAT修改的是dst ip,不须要vip与realserver在同一个网段内
b. FULLNAT能保证回包必定能回到LVS
c. 由于FULLNAT要更新sorce ip 因此性能NAT模式低
假设client,vip,realServer的ip地址以下
client vip realServer
IP 192.168.138.20 192.168.143.122 192.168.143.82
第一步:client 发送包到LVS服务器的VIP上
... source ip dst ip ...
... 192.168.138.20 192.168.143.122 ...
第二步:VIP 收到数据包后,会根据LVS设置的LB算法选择一个合适的realserver;并把client发送的数据包包装到一个新的IP包里面;新的IP包的dst是realserver的IP
... source ip dst ip ...
... 192.168.143.122 192.168.143.82 ...
第三步: realserver 收到这个数据包后判断dst ip 是本身,而后解析出来的数据包的dst是VIP;会检测网卡上是否帮了VIP的ip地址;若是帮了就会处理这个包,若是没有直接丢掉。 通常在realserver上面 lo:0 绑定了VIP的ip地址,就能够处理。处理完成后,直回给client
... source ip dst ip ...
... 192.168.143.82 192.168.138.20 ...
a. TUN模式必须在全部的realserver机器上面绑定VIP的IP地址
b. TUN模式的包通讯经过TUN模式,无论是内网和外网都能通讯,因此不须要lvsvip跟realserver 在同一个网段内
c. TUN模式 realserver会把数据包直接发给client 不会给lvs了
d. TUN模式走的隧道模式,因此运维起来比较难,因此通常不用