Show Table of Contents
2.3. keepalived 排程總覽
使用 Keepalived 能在真實伺服器之間以極佳的靈活性分配流量,這也是所幸於各種受支援的排程演算法則。負載平衡優於其它靈活性較低的方式(例如 Round-Robin DNS,其 DNS 的階級特性與客戶端機器的快取可能會造成負載不平衡。此外, LVS 路由器所使用的低階請求轉送,優於應用程式階級的請求轉送,因為在網路封包階級上進行負載平衡,可大幅減少運算上的額外負載,並且能提供較佳的延展性。
使用指定的權重能為個別機器提供任意的優先權。若使用這種類型的排程方式,您亦可透過各種硬體和軟體組合來建立一組真實伺服器,並且主動式的路由器將可平均分配各個真實伺服器的負載。
Keepalived 的排程機制是由多個 kernel 修補程式 - 稱為「IP 虛擬伺服器」(IPVS,IP Virtual Server)模組 - 所提供。這些模組啟用了「第四層」(L4,layer 4)的傳輸層切換功能,能與單一 IP 位址上的多台伺服器運作。
為了更有效率地追蹤和路由轉送封包至真實伺服器,IPVS 會在 kernel 中建立一個 IPVS 表格。此表格會被 active LVS 路由器使用來將一個來自於虛擬伺服器位址的請求重定向至集區中的真實伺服器上,以及重定向來自於真實伺服器的請求。
2.3.1. Keepalived 排程演算法則
IPVS 表格的結構會依據管理者為任何選定的虛擬伺服器所選定的排程演算法則而定。為了讓您有最大的彈性可以使用叢集的服務類型、以及如何排程這些服務,Keepalived 支援以下列出的排程演算法則。
- 循環排程法
- 將請求依序發給集區中的伺服器。使用這演算法則時,所有真實伺服器不管能力為何,都會被視為平等。此排程模式類似循環 DNS(round-robin DNS)法,但更為細緻,因為這模式是以網路連線為基礎,而非以主機為基礎。 Load Balancer 的循環配置資源排程也不會因為快取了 DNS 的查詢項目而導致不平衡。
- 加權循環排程法
- 將請求依序發給集區中的真實伺服器,但把更多工作交給能力較強的電腦。能力的強弱會根據使用者所指定的權重而定,再根據動態負載的資訊來上下調整。如果集區中的真實伺服器之能力相差懸殊,那麼加權循環排程會是較好的選擇。然而,如果請求所需的負載也相差懸殊,那麼權重更大的伺服器就可能會回覆過多的請求。
- 最少連線排程法
- 會把請求分散到連線數較少的電腦。因為最少連線法會透過 IPVS 表持續追蹤連至真實伺服器的現有連線,因此這是一種動態排程法則,使其成為請求負載變動高的更佳選擇。如果真實伺服器集區中的成員,都有著差不多的處理能力,那麼這方法就很適用。如果實體伺服器的能力不同,加權的最少連線排程法是更好的選擇。
- 加權最少連線排程法
- 把更多請求送到連線數少的伺服器上,對於連線數多寡的判斷,又與伺服器的能力有關。伺服器能力是以使用者指定的權重為準,權重可以由動態負載資訊來調整。當使用的伺服器配備不一時,權重功能可使最少連線法則成為理想的方案。
- 地區為主的最少連線排程法
- 有更少現有連線數(相對於目的地 IP 位址)的伺服器,將收到更多請求。這個演算法則是設計用在代理 / 快取伺服器叢集上。它會把送往一個 IP 位址的封包導向到擁有該位址的伺服器上;除非該伺服器已經超載,同時另一台伺服器的負載只有一半,這樣它就會把封包送往負載較輕的實體伺服上去。
- 本地為主的最少連線排程法加上複製排程法
- 把更多請求送往與目的 IP 相比,較少連線數的伺服器上。這個演算法則是設計給代理 / 快取伺服器叢集使用。與前述不同的是,它會將目的地 IP 位址對應到實體伺服器節點的子集合裡。請求會被導向到這個集合裡,連線數目最少的伺服器上。如果用有這 IP 位址的所有節點都超載,那麼這演算法會複製新的伺服器到這個目標 IP 位址,方法是從整體伺服器群中,將實體伺服器加入該目標 IP 的伺服器子集合裡。最高負載的節點會從實體伺服器的子集合裡移除,避免過度複製。
- 目的地雜湊排程法
- 在靜態雜湊表中查詢目的地 IP 位址,將請求分散到真實伺服器集區中。這演算法則適用於代理快取(proxy-cache)伺服器叢集。
- 來源雜湊排程法
- 在靜態雜湊表中查詢來源 IP,把請求分散到真實伺服器集區中。這個演算法則是給多防火牆的 LVS 路由器使用的。
- 最短預期延遲
- 根據特定伺服器的連線除以其被分配的權重,來將連線請求發佈至預期延時最短的伺服器上。
- 永不排入佇列
- 一個雙叉的排程器,首先會尋找並傳送連線請求至一個閒置或無連線的伺服器上。若沒有閒置的伺服器,排程器就預設值會如最短預期延時(Shortest Expected Delay)一般將請求傳送至一個擁有最低延時的伺服器上。
2.3.2. 伺服器權重與排程
Load Balancer 的管理者可以對真實伺服器集區中的每個節點設定「權重」(weight)。權重是個整數值,用於任何「需要權重」的排程演算法則(例如加權最少連線法),並有助 LVS 路由器更平均地裝載擁有不同能力的硬體。
權重是以相對方式來運作。舉例來說,如果一台真實伺服器的權重為 1,另一台為 5,那麼前者每取得 1 個請求時,後者就會取得 5 個。真實伺服器的權重之預設值為 1。
雖然針對真實伺服器集區中的不同硬體配置加入權重,能更有效率地平衡叢集的負載,但虛擬伺服器使用加權最少連線法來排程時,一台真實伺服器加入集區會短暫地導致負載不平衡。舉例來說,假設真實伺服器集區中有 3 台伺服器。伺服器 A 與 B 的權重為 1,而伺服器 C 為 2。如果 C 因故離線,其負載會平均分配給 A 與 B。然而,一旦 C 回復了,那麼 LVS 路由器會視 C 為 0 個連線,然後會把接下來的請求全部塞給 C,直到它的負載水準與 A 及 B 一樣為止。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.