關于LVS和FULLNAT的介紹可以看一下 淘寶吳佳明(普空)的視訊 http://blog.aliyun.com/1750 ,
FULLNAT模式很大簡化了LVS的配置和部署,目前淘寶和百度基本上都在使用FULLNAT模式來作為接入側的
負載均衡模式.
百度的LVS叫做BVS, Baidu Virtual Server, 是在LVS基礎上修改的增加了L3 Though 和
SYN Porxy,貌似也是吳佳明(普空)在百度搞的, 類似FULLNAT 項目.
下面的圖來自吳佳明(普空)的PPT, 自己重畫了一遍,關于NAT和FULLNAT的差別如下圖所示:

看完上圖後發現 FULLNAT有一個問題是:RealServer無法獲得使用者IP;淘寶通過叫TOA的方式解決的,
主要原理是:将client address放到了TCP Option裡面帶給後端RealServer,RealServer收到後儲存在socket
的結構體裡并通過toa核心子產品hook了getname函數,這樣當使用者調用getname擷取遠端位址時,傳回的是保
存在socket的TCPOption的IP. 百度的BVS是通過叫ttm子產品實作的,其實作方式跟toa基本一樣,隻是沒有開源.
實作原理圖如下:
lvs側在TCP封包的選項中插入clientip代碼: tcp_fnat_in_handler()
RS側收到建連封包時,取出toa裡面的client ip和port 存放在socket的use_data裡,toa.c
HOOK挂載:
當應用層調用getpeername() 或者 getsocketname() 時,會進入到inet_getname_toa,如果存在toa資訊則将
socket裡存放的真是的clientip 傳回給應用層。
本文轉自Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/1982335,如需轉載請自行聯系原作者