相關概念
- LVS體系結構如圖所示,一組伺服器通過高速的區域網路或者地理分布的廣域網互相連接配接,在它們的前端有一個負載排程器(Load Balancer)。負載排程器能無縫地将網絡請求排程到真實伺服器上,進而使得伺服器叢集的結構對客戶是透明的,客戶通路叢集系統提供的網絡服務就像訪 問一台高性能、高可用的伺服器一樣。客戶程式不受伺服器叢集的影響不需作任何修改。系統的伸縮性通過在服務機群中透明地加入和删除一個節點來達到,通過檢 測節點或服務程序故障和正确地重置系統達到高可用性。由于我們的負載排程技術是在Linux核心中實作的,我們稱之為Linux虛拟伺服器(Linux Virtual Server)。

- LVS負載均衡排程技術是在核心中實作的,我們配置LVS的時候不能直接配置核心中的ipvs,而要通過ipvsadm進行管理,常用的還可以通過keeplived等軟體管理LVS。
- 負載均衡器被簡稱為LB或者Director
- IP的相關命名:
- CIP client ip 用戶端主機的IP
- DIP director ip 負載均衡器的IP
- RIP real ip 叢集下面節點使用的IP
- VIP virtual ip Director用于向用戶端計算機提供的服務IP,一般以别名的方式存在。
- LVS的三種工作模式:
-
Virtual Server via Network Address Translation(VS/NAT)
通過網絡位址轉換,排程器重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真實伺服器;真實伺服器的響應封包通過排程器時,封包的源位址被重寫,再傳回給客戶,完成整個負載排程過程。
-
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術時,由于請求和響應封包都必須經過排程器位址重寫,當客戶請求越來越多時,排程器的處理能力将成為瓶頸。為了解決這個問題,排程器把請求報
文通過IP隧道轉發至真實伺服器,而真實伺服器将響應直接傳回給客戶,是以排程器隻處理請求封包。由于一般網絡服務應答比請求封包大許多,采用
VS/TUN技術後,叢集系統的最大吞吐量可以提高10倍。
-
Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請求封包的MAC位址,将請求發送到真實伺服器,而真實伺服器将響應直接傳回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地
提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協定的要求,但是要求排程器與真實伺服器都有一塊網卡連
在同一實體網段上。
三種方法的優缺點比較:
三種IP負載均衡技術的優缺點歸納在下表中:
_ | VS/NAT | VS/TUN | VS/DR |
Server | any | Tunneling | Non-arp device |
server network | private | LAN/WAN | LAN |
server number | low (10~20) | High (100) | High (100) |
server gateway | load balancer | own router | Own router |
注: 以上三種方法所能支援最大伺服器數目的估計是假設排程器使用100M網卡,排程器的硬體配置與後端伺服器的硬體配置相同,而且是對一般Web服務。使用更 高的硬體配置(如千兆網卡和更快的處理器)作為排程器,排程器所能排程的伺服器數量會相應增加。當應用不同時,伺服器的數目也會相應地改變。是以,以上數 據估計主要是為三種方法的伸縮性進行量化比較。
NAT模式詳解:
VS/NAT的體系結構如圖所示。在一組伺服器前有一個排程器,它們是通過Switch/HUB相連接配接的。這些伺服器 提供相同的網絡服務、相同的内容,即不管請求被發送到哪一台伺服器,執行結果是一樣的。服務的内容可以複制到每台伺服器的本地硬碟上,可以通過網絡檔案系 統(如NFS)共享,也可以通過一個分布式檔案系統來提供。
客 戶通過Virtual IP Address(虛拟服務的IP位址)通路網絡服務時,請求封包到達排程器,排程器根據連接配接排程算法從一組真實伺服器中選出一台伺服器,将封包的目标位址 Virtual IP Address改寫成標明伺服器的位址,封包的目标端口改寫成標明伺服器的相應端口,最後将修改後的封包發送給選出的伺服器。同時,排程器在連接配接Hash 表中記錄這個連接配接,當這個連接配接的下一個封包到達時,從連接配接Hash表中可以得到原標明伺服器的位址和端口,進行同樣的改寫操作,并将封包傳給原標明的服務 器。當來自真實伺服器的響應封包經過排程器時,排程器将封包的源位址和源端口改為Virtual IP Address和相應的端口,再把封包發給使用者。我們在連接配接上引入一個狀态機,不同的封包會使得連接配接處于不同的狀态,不同的狀态有不同的逾時值。在TCP 連接配接中,根據标準的TCP有限狀态機進行狀态遷移,這裡我們不一一叙述,請參見W. Richard Stevens的《TCP/IP Illustrated Volume I》;在UDP中,我們隻設定一個UDP狀态。不同狀态的逾時值是可以設定的,在預設情況下,SYN狀态的逾時為1分鐘,ESTABLISHED狀态的超 時為15分鐘,FIN狀态的逾時為1分鐘;UDP狀态的逾時為5分鐘。當連接配接終止或逾時,排程器将這個連接配接從連接配接Hash表中删除。
這樣,客戶所看到的隻是在Virtual IP Address上提供的服務,而伺服器叢集的結構對使用者是透明的。對改寫後的封包,應用增量調整Checksum的算法調整TCP Checksum的值,避免了掃描整個封包來計算Checksum的開銷。
在 一些網絡服務中,它們将IP位址或者端口号在封包的資料中傳送,若我們隻對封包頭的IP位址和端口号作轉換,這樣就會出現不一緻性,服務會中斷。是以,針 對這些服務,需要編寫相應的應用子產品來轉換封包資料中的IP位址或者端口号。我們所知道有這個問題的網絡服務有FTP、IRC、H.323、 CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。
下面,舉個例子來進一步說明VS/NAT,如圖所示:
VS/NAT 的配置如下表所示,所有到IP位址為202.103.106.5和端口為80的流量都被負載均衡地排程的真實伺服器172.16.0.2:80和 172.16.0.3:8000上。目标位址為202.103.106.5:21的封包被轉移到172.16.0.3:21上。而到其他端口的封包将被拒 絕。
Protocol | Virtual IP Address | Port | Real IP Address | Port | Weight |
TCP | 202.103.106.5 | 80 | 172.16.0.2 | 80 | 1 |
172.16.0.3 | 8000 | 2 | |||
TCP | 202.103.106.5 | 21 | 172.16.0.3 | 21 | 1 |
從以下的例子中,我們可以更詳細地了解封包改寫的流程。
通路Web服務的封包可能有以下的源位址和目标位址:
SOURCE | 202.100.1.2:3456 | DEST | 202.103.106.5:80 |
排程器從排程清單中選出一台伺服器,例如是172.16.0.3:8000。該封包會被改寫為如下位址,并将它發送給選出的伺服器。
SOURCE | 202.100.1.2:3456 | DEST | 172.16.0.3:8000 |
從伺服器傳回到排程器的響應封包如下:
SOURCE | 172.16.0.3:8000 | DEST | 202.100.1.2:3456 |
響應封包的源位址會被改寫為虛拟服務的位址,再将封包發送給客戶:
SOURCE | 202.103.106.5:80 | DEST | 202.100.1.2:3456 |
這樣,客戶認為是從202.103.106.5:80服務得到正确的響應,而不會知道該請求是伺服器172.16.0.2還是伺服器172.16.0.3處理的。
優缺點:
TUN模式詳解
在VS/NAT 的叢集系統中,請求和響應的資料封包都需要通過負載排程器,當真實伺服器的數目在10台和20台之間時,負載排程器将成為整個叢集系統的新瓶頸。大多數 Internet服務都有這樣的特點:請求封包較短而響應封包往往包含大量的資料。如果能将請求和響應分開處理,即在負載排程器中隻負責排程請求而響應直 接傳回給客戶,将極大地提高整個叢集系統的吞吐量。
IP隧道(IP tunneling)是将一個IP封包封裝在另一個IP封包的技術,這可以使得目标為一個IP位址的資料封包能被封裝和轉發到另一個IP位址。IP隧道技 術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用于移動主機和虛拟私有網絡(Virtual Private Network),在其中隧道都是靜态建立的,隧道一端有一個IP位址,另一端也有唯一的IP位址。
我們利用IP隧道技術将請求封包封裝轉 發給後端伺服器,響應封包能從後端伺服器直接傳回給客戶。但在這裡,後端伺服器有一組而非一個,是以我們不可能靜态地建立一一對應的隧道,而是動态地選擇 一台伺服器,将請求封包封裝和轉發給選出的伺服器。這樣,我們可以利用IP隧道的原理将一組伺服器上的網絡服務組成在一個IP位址上的虛拟網絡服務。 VS/TUN的體系結構如圖4所示,各個伺服器将VIP位址配置在自己的IP隧道裝置上。
VS/TUN 的工作流程如圖所示:它的連接配接排程和管理與VS/NAT中的一樣,隻是它的封包轉發方法不同。排程器根據各個伺服器的負載情況,動态地選擇一台伺服器, 将請求封包封裝在另一個IP封包中,再将封裝後的IP封包轉發給選出的伺服器;伺服器收到封包後,先将封包解封獲得原來目标位址為VIP的封包,伺服器發 現VIP位址被配置在本地的IP隧道裝置上,是以就處理這個請求,然後根據路由表将響應封包直接傳回給客戶。
在這裡需要指出,根據預設的TCP/IP協定棧處理,請求封包的目标位址為VIP,響應封包的源位址肯定也為VIP,是以響應封包不需要作任何修改,可以直接傳回給客戶,客戶認為得到正常的服務,而不會知道究竟是哪一台伺服器處理的
DR模式詳解
跟VS/TUN 方法相同,VS/DR利用大多數Internet服務的非對稱特點,負載排程器中隻負責排程請求,而伺服器直接将響應傳回給客戶,可以極大地提高整個叢集 系統的吞吐量。該方法與IBM的NetDispatcher産品中使用的方法類似(其中伺服器上的IP位址配置方法是相似的),但IBM的 NetDispatcher是非常昂貴的商品化産品,我們也不知道它内部所使用的機制,其中有些是IBM的專利。
VS/DR的體系結構如圖 所示:排程器和伺服器組都必須在實體上有一個網卡通過不分斷的區域網路相連,如通過高速的交換機或者HUB相連。VIP位址為排程器和伺服器組共享,排程 器配置的VIP位址是對外可見的,用于接收虛拟服務的請求封包;所有的伺服器把VIP位址配置在各自的Non-ARP網絡裝置上,它對外面是不可見的,隻 是用于處理目标位址為VIP的網絡請求。
VS/DR 的工作流程如圖所示:它的連接配接排程和管理與VS/NAT和VS/TUN中的一樣,它的封包轉發方法又有不同,将封包直接路由給目标伺服器。在VS/DR 中,排程器根據各個伺服器的負載情況,動态地選擇一台伺服器,不修改也不封裝IP封包,而是将資料幀的MAC位址改為選出伺服器的MAC位址,再将修改後 的資料幀在與伺服器組的區域網路上發送。因為資料幀的MAC位址是選出的伺服器,是以伺服器肯定可以收到這個資料幀,從中可以獲得該IP封包。當伺服器發現 封包的目标位址VIP是在本地的網絡裝置上,伺服器處理這個封包,然後根據路由表将響應封包直接傳回給客戶。
在VS/DR中,根據預設的TCP/IP協定棧處理,請求封包的目标位址為VIP,響應封包的源位址肯定也為VIP,是以響應封包不需要作任何修改,可以直接傳回給客戶,客戶認為得到正常的服務,而不會知道是哪一台伺服器處理的。
DR模式的優缺點:
ipvsadm的功能
- 管理叢集服務
添加:-A|E -t|u|f service-address [-s scheduler]
[-p [timeout]] [-M netmask]
-t tcp協定叢集
-u udp協定叢集
-f 防火牆标記 service-adress=Mark Number
service-address: ip:port -s (可以省略,預設為wlc)
輪叫排程 rr (Round Robin)
權重輪叫排程 wrr(Weighted Round Robin)
最少連結排程 lc(Least Connections)
權重最少連結排程 wlc(Weighted Least Connections)
$ipvsadm -A -t 192.168.1.114:80 -s rr
修改: -E
删除: —D
- 管理叢集服務的RS
添加: ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-t|u|f service-address:事先定義好的某叢集服務
[-g|i|m]: LVS的類型
-g: DR (Direct Routing)預設
-i: TUN (Tunneling)
-m: NAT (Network Address Translation)
[-w weight]: 定義伺服器權重
ipvsadm -a -t 192.168.1.114:80 -r 192.168.11.129 -m -w 1
ipvsadm -a -t 192.168.1.114:80 -r 192.168.11.132 -m -w 3
修改: -e
删除: -d
- 檢視
-L|l
-n :數字格式顯示主機位址和端口
--stats:統計資料
--rate: 速率
--timeout:顯示tcp,tcpfin,udp的會話逾時時長
-c:顯示目前的ipvs的連接配接狀況
删除所有叢集服務
-C:清空ipvs的規則
儲存規則
-S
#ipvsadm -S >/path/to/somefile
載入此前規則
-R
#ipvsadm -R >/path/to/somefile(預設:/etc/sysconfig/ipvsadm)
NAT模型:
Linux系統預設是禁止資料包轉發的。所謂轉發即當主機擁有多于一塊的網卡時,其中一塊收到資料包,根據資料包的目的ip位址将包發往本機另一網卡,該網卡根據路由表繼續發送資料包。這通常就是路由器所要實作的功能。
配置Linux系統的ip轉發功能,首先保證硬體連通,然後打開系統的轉發功能
less /proc/sys/net/ipv4/ip_forward,該檔案内容為0,表示禁止資料包轉發,1表示允許,将其修改為1。可使用指令echo "1" > /proc/sys/net/ipv4/ip_forward 修改檔案内容,重新開機網絡服務或主機後效果不再。若要其自動執行,可将指令echo "1" > /proc/sys/net/ipv4/ip_forward 寫入腳本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network腳本中添加 FORWARD_IPV4="YES"
http://blog.sina.com.cn/s/blog_a94d887a01017b01.html
NAT模型
$ipvsadm -A -t 192.168.1.114:80 -s wrr
$ipvsadm -a -t 192.168.1.114:80 -r 192.168.11.129 -m -w 1
$ipvsadm -a -t 192.168.1.114:80 -r 192.168.11.132 -m -w 3
echo "1" > /proc/sys/net/ipv4/ip_forward
192.168.11.129/132指向192.168.11.131
官方參考資料:
http://www.linuxvirtualserver.org/zh/lvs1.html
http://www.linuxvirtualserver.org/zh/lvs2.html
http://www.linuxvirtualserver.org/zh/lvs3.html
http://www.linuxvirtualserver.org/zh/lvs4.html