1、
Linux Virtual Server概述
Linux Virtual Server (LVS)是一套完整的基於IP的負載均衡的集羣軟件。LVS運行在一對有類似配置的計算機上:一個做爲活動LVS Router(Active LVS Router),一個做爲備份LVS Router(Backup LVS Router)。活動LVS Router服務有兩個角色:
* 均衡負載到真實服務器上。
* 檢查真實服務器提供的服務是否正常。
備份LVS Router用來監控活動的LVS Router,以備活動的LVS Router失敗時由備份LVS Router接管。
Pulse進程運行在活動LVS Router和備份LVS Router上。在備份LVS Router上,pulse發送一個心跳(heartbeat)到活動LVS Router的公網接口上以檢查活動LVS Router是否正常。在活動LVS Router上,pulse啓動lvs進程並響應來自於備份LVS Router的心跳。
lvs進程調用ipvsadm工具去配置和維護IPVS路由表,併爲每個在真實服務器上的虛擬服務啓動一個nanny進程。每個nanny進程去檢查真實服務器上的虛擬服務狀態,並將故障狀況通知lvs進程。假如一個故障被發現,lvs進程通知ipvsadm在IPVS路由表中將此節點刪除。
若是備份LVS Router未收到來自於活動LVS Router的響應,它將調用send_arp將虛擬IP地址再分配到備份LVS Router的公網接口上。並在公網接口和局域網接口上分別發送一個命令去關掉活動LVS Router上的lvs進程。同時啓動本身的lvs進程來調度客戶端請求。
下面是一個兩層結構的LVS架構:
下面是一個三層結構的LVS架構:
兩層結構的LVS架構適合於Real Server上的數據變化不是很頻繁的狀況,若是Real Server上的數據變化很頻繁應該考慮使用三層結構的LVS架構,將數據放到一個共享文件系統(GFS)上供全部的Real Server同時讀寫。
你可使用VS/NAT、VS/TUN和VS/DR來實現IP負載均衡:
* 使用VS/NAT方法:客戶經過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器,調度器根據鏈接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最後將修改後的報文發送給選出的服務器。同時,調度器在鏈接Hash表中記錄這個鏈接,當這個鏈接的下一個報文到達時,從鏈接Hash表中能夠獲得原選定服務器的地址和端口,進行一樣的改寫操做,並將報文傳給原選定的服務器。當來自真實服務器的響應報文通過調度器時,調度器將報文的源地址和源端口改成Virtual IP Address和相應的端口,再把報文發給用戶。當使用VS/NAT方法時,若是有大量的響應數據通過調度器,調度器將成爲整個集羣的瓶頸。
* 使用VS/TUN方法:VS/TUN的鏈接調度和管理與VS/NAT中的同樣,只是它的報文轉發方法不一樣。調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,將請求報文封裝在另外一個IP報文中,再將封裝後的IP報文轉發給選出的服務器;服務器收到報文後,先將報文解封得到原來目標地址爲VIP的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,因此就處理這個請求,而後根據路由表將響應報文直接返回給客戶。
* 使用VS/DR方法:調度器和服務器組都必須在物理上有一個網卡經過不分斷的局域網相連,如經過交換機或者高速的HUB相連。VIP地址爲調度器和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;全部的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用於處理目標地址爲VIP的網絡請求。在VS/DR中,調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改成選出服務器的MAC地址,再將修改後的數據幀在與服務器組的局域網上發送。由於數據幀的MAC地址是選出的服務器,因此服務器確定能夠收到這個數據幀,從中能夠得到該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,而後根據路由表將響應報文直接返回給客戶。