Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
1.8. Linux 虛擬伺服器
Linux 虛擬伺服器(LVS,Linux Virtual Server)是一組整合軟體元件,可以在一群實體伺服器間,平衡 IP 負載。LVS 會在一對設定相同的電腦上執行:一是啟用中的 LVS 路由器,另一個則是備用的 LVS 路由器。前者有兩個角色:
- 在實體伺服器之間,平衡負載。
- 檢查每個實體伺服器的服務之完整性。
備用 LVS 路由器會監控啟用中的 LVS 路由器,如果它失效的話,就會接手工作。
圖形 1.19, “Components of a Running LVS Cluster” provides an overview of the LVS components and their interrelationship.

圖形 1.19. Components of a Running LVS Cluster
pulse
系統程式會在兩種 LVS 路由器上執行。在備用的 LVS 路由器上,pulse
會發送 heartbeat(心跳) 到啟用中路由器的公共介面,以確定啟用中的路由器運作正常。在啟用中的 LVS 路由器上,pulse
會啟動 lvs
系統程式,回報來自備用 LVS 路由器的 heartbeat 查詢。
lvs
系統程式執行以後,會呼叫 ipvsadm
工具程式,設定、維護核心裡的 IPVS(IP 虛擬伺服器,IP Virtual Server)路由表,並為每台實體伺服器上每個設定好的虛擬伺服器,啟動 nanny
程序。每個 nanny
程序會檢查實體伺服器上已設定好的服務之狀態,然後告訴 lvs
系統程式任何異常之處。如果偵測到異常,lvs
系統程式會告訴 ipvsadm
從 IPVS 路由表移除該實體伺服器。
如果備用 LVS 路由器沒有收到啟用中的 LVS 路由器傳來的回應,它會開始備援程序,方法是呼叫
send_arp
,重新指定所有虛擬 IP 位址到備用 LVS 路由器的網路卡硬體位址(MAC 位址),透過公開與私有網路介面發送指令到啟用中的 LVS 路由器,關閉上面的 lvs
系統程式,並啟動備用 LVS 路由器上的 lvs
系統程式,接受設定好的虛擬機器之需求。
對存取主機服務(例如網站或資料庫應用程式)的外在使用者來說,LVS 就像一台伺服器一樣。然而,使用者真正存取的,是 LVS 路由器之後的實體伺服器。
因為 LVS 沒有內建元件來共享實體伺服器的資料,所以您有兩種基本選項:
- 在所有實體伺服器裡面同步資料。
- 在拓樸中加入第三層,分享資料存取。
對伺服器來說,第一個選項比較適合,因為這不允許大量使用者上傳或更改實體伺服器上的資料。如果實體伺服器允許大量使用者修改資料,例如電子商務網站,那麼建議您使用第三層。
在實體伺服器之間同步資料的方法很多。舉例來說,您可以使用 shell 程序來把更新的網頁同步發佈到實體伺服器上。同時,您也可以使用像
rsync
的程式,每隔一陣子複製更新過的資料到所有節點上。然而,在使用者常常上傳資料或進行資料庫交易的環境下,使用程序檔或 rsync
指令的效果並不好。因此,對於高上傳、資料庫交易、或類似交通量的環境,三層式拓樸(three-tiered topology)會更適用於資料同步。
1.8.1. Two-Tier LVS Topology
圖形 1.20, “Two-Tier LVS Topology” shows a simple LVS configuration consisting of two tiers: LVS routers and real servers. The LVS-router tier consists of one active LVS router and one backup LVS router. The real-server tier consists of real servers connected to the private network. Each LVS router has two network interfaces: one connected to a public network (Internet) and one connected to a private network. A network interface connected to each network allows the LVS routers to regulate traffic between clients on the public network and the real servers on the private network. In 圖形 1.20, “Two-Tier LVS Topology”, the active LVS router uses Network Address Translation (NAT) to direct traffic from the public network to real servers on the private network, which in turn provide services as requested. The real servers pass all public traffic through the active LVS router. From the perspective of clients on the public network, the LVS router appears as one entity.

圖形 1.20. Two-Tier LVS Topology
送抵 LVS 路由器的需求會送往虛擬 IP 位址,簡稱 VIP。這是公開、可路由的位址,也是管理者將這機器與網域名稱(例如 www.example.com)將關聯的位址,它會被指定到一或多台虛擬伺服器[1]上。請注意,發生備援時,一台 LVS 路由器的 VIP 位址會轉移到另一台機器上,這樣就可以維持住這組 IP 位址,這也稱為「浮動 IP 位址」。
VIP 位址可以是將 LVS 路由器連到公開網路的裝置之別名。舉例來說,如果
eth0
連到網際網路,那麼多個虛擬伺服器的別名可以是 eth0:1
。要不,每個虛擬伺服器都可以與個別的裝置與服務相關連。例如 HTTP 可以由 eth0:1
來處理,FTP 可以由 eth0:2
來處理。 >
一次只有一台 LVS 路由器會被設為啟用中。啟用中的 LVS 路由器的角色是把從虛擬 IP 位址的服務需求導向到實體伺服器上。這種導向是根據八種負載平衡的驗算法則之一而來:
- 循環(round-robin)排程 — 依照順序,把每個需求分配到一群實體伺服器上。這演算法則把所有實體伺服器視為一樣,不管這些伺服器的配備或負載為何。
- 加權循環排程 — 跟循環排程一樣,但會把更多工作分派給功能較好的電腦。判別功能好壞的方法,在於使用者所給予的權重,權重可以由動態負載資訊來調整。如果實體伺服器之間有顯著差異,我們建議使用這方法。然而,如果負載需求的變化非常大,那麼權重高的伺服器可能會收到過多需求。
- 最少連線 — 會把需求分散到連線數較少的電腦。這是一種動態排程法則,使其成為需求負載變動高的更佳選擇。如果實體伺服器的能力不同,加權的最少連線排程法是更好的選擇。
- 加權最少連線法(預設)— 把更多需求送到連線數少的伺服器上,對於連線數多寡的判斷,又與伺服器的能力有關。伺服器能力是以使用者指定的權重為準,權重可以由動態負載資訊來調整。當使用的伺服器配備不一時,增加權重功能可以讓最少連線法則成為理想的方案。
- 本地為主的最少連線法 — 將更多的連往伺服器需求分散到與其目的 IP 位址比起來,更少連線數量的電腦上。這個演算法則適合用在代理 / 快取伺服器叢集上。它會把送往一個 IP 位址的封包導向到擁有該位址的伺服器上;除非該伺服器已經超載,同時另一台伺服器的負載只有一半,這樣它就會把封包送往負載較輕的實體伺服上去。
- 本地為主的最少連線法加上複製排程 — 把更多需求送往與目的 IP 相比,較少連線數的伺服器上。這個演算法則也可以用來給代理 / 快取伺服器叢集使用。與前述不同的是,它會將目的地 IP 位址對應到實體伺服器節點的子集合裡。需求會被導向到這個集合裡,連線數目最少的伺服器上。如果用有這 IP 位址的所有節點都超載,那麼這演算法會複製新的伺服器到這個目標 IP 位址,方法是從整體伺服器群中,將實體伺服器加入該目標 IP 的伺服器子集合裡。最高負載的節點會從實體伺服器的子集合裡移除,避免過度複製。
- 來源雜湊排程 — 在靜態雜湊表中尋找來源 IP,把需求分散到伺服器中。這個演算法則是給多防火牆的 LVS 路由器使用的。
同時,啟用中的 LVS 路由器會動態監控實體伺服器的特定服務之整體健康狀態,方法是透過 send/expect scripts(發送 / 預期回應的程序檔)。要幫忙偵測服務的健康狀態所需的動態資料,例如 HTTPS 或 SSL,您可以呼叫外部可執行檔。如果實體伺服器上的服務無法運作,啟用中的 LVS 路由器就會停止發送工作到該伺服器,直到它回歸正常為止。
備用 LVS 路由器會扮演待命系統的角色。LVS 路由器會定期透過主要的外部公開介面,交換 heartbeat 訊息,同時在備援情況發生時,透過私有介面交換訊息。如果備用 LVS 路由器在一定時間內收不到 heartbeat 訊息,它會開始備援,並成為啟用中的 LVS 路由器。在備援過程中,備用 LVS 路由器會使用 ARP spoofing 技術,接手失效路由器的 VIP 位址。藉由這技術,備用 LVS 路由器會宣佈它自己是送往失效節點 IP 封包位址的目的地。當失效節點又開始啟動服務時,備用 LVS 路由器會回到它備援的角色。
The simple, two-tier configuration in 圖形 1.20, “Two-Tier LVS Topology” is suited best for clusters serving data that does not change very frequently — such as static web pages — because the individual real servers do not automatically synchronize data among themselves.
[1]
虛擬伺服器(virtual server)是設定用來聆聽特定虛擬 IP 的服務。