對LVS只做了粗淺的了解,LVS的工作模式主要分
- VS-NAT
- VS-DRouting
- VS-IPTunneling
其中用的最多的是NAT模式,下面分別來闡述下
VS-NAT
原理圖

請求到達lvs之后,lvs會重寫數據包的目的地址到real server ip:port,并將請求轉發給real server,real server處理完之后,將請求包反饋給lvs,lvs修改數據包的源地址為vip:port.
假設202.100.1.2:3456是客戶端的地址,202.103.106.5:80是LVS的虛擬地址,172.16.0.3:8000是內網真實server地址。
The incoming packet for web service would has source and destination addresses as:
SOURCE 202.100.1.2:3456 DEST 202.103.106.5:80
The load balancer will choose a real server, e.g. 172.16.0.3:8000. The packet would >be rewritten and forwarded to the server as:SOURCE 202.100.1.2:3456 DEST 172.16.0.3:8000
Replies get back to the load balancer as:SOURCE 172.16.0.3:8000 DEST 202.100.1.2:3456
The packets would be written back to the virtual server address and returned to the client as:SOURCE 202.103.106.5:80 DEST 202.100.1.2:3456
疑問1:對于返回的數據包怎么DEST是202.100.1.2:3456,還是會請求到LVS呢?
解答:這個其實是因為后端的real server沒有獨立的公網IP,在real server上有配置路由規則,LVS是該機器上所有外網請求的網關。
VS-DRouting
原理圖

在dr模式下:
- lvs只是接收client的請求,response是直接由后端的real server返回給client的,相當于lvs只是做了負載均衡。
- 要求所有的real server都必須要有公網IP。
- lvs和real server都需要共享這個虛IP,所以lvs和real server必須要在同一個物理網段下。
疑問1: 為什么lvs和real server必須要在同一個物理網段?因為要共享一個虛擬IP。為什么只有同一個物理網段才能共享同一個虛擬IP呢?
疑問2:這是通過MAC地址轉發嗎,走的數據鏈路層?
流程圖

VS-IPTunneling
原理圖

在ip-tunneling模式下:
- lvs只是接收client的請求,response是直接由后端的real server返回給client的,相當于lvs只是做了負載均衡(與dr模式一致)。
- 這個要求所有的real server都必須要有公網IP(與dr模式一致)。
- real server不需要跟lvs在同一個網段下,也不需要共享一個虛擬IP。
流程圖

疑問1: client請求的時候dest是lvs的外網地址,但接收包的src變成real server的外網地址了,client還會認這個包嗎,不會認為這個是偽造的請求回復包?
疑問2:IP封包技術,走IP層的轉發?對下層透明
其他說明
echo 1 > /proc/sys/net/ipv4/ip_forward
作用?