Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.4. 路由法則

Red Hat Enterprise Linux 會使用網路位址轉譯NAT 路由)或是直接路由來啟用 Keepalived。這能在管理員使用可用硬體與整合 Load Balancer 入一個既有網路中的時候,提供極佳的靈活性。

2.4.1. NAT 路由

圖形 2.3, “實作了 NAT 路由的 Load Balancer”,描述了 Load Balancer 如何利用 NAT 路由來在網際網路與私密網路之間移動請求。
實作了 NAT 路由的 Load Balancer

圖形 2.3. 實作了 NAT 路由的 Load Balancer

在此範例中,active LVS 路由器中有兩張 NIC。連上網際網路的 NIC 有位於 eth0 上的「真實 IP 位址」,同時亦有浮動 IP 位址。連到私有網路介面卡上的 NIC 在 eth1 上含有真實 IP 位址以及浮動 ID 位址。在備援情況發生時,網際網路與私有網路的虛擬介面卡會同時由 backup LVS 路由器所接手。所有位於私有網路上的真實伺服器皆會使用 NAT 路由器的浮動 IP 做為預設路徑,與 active LVS 路由器溝通,如此一來真實伺服器回應來自於網際網路上來的請求,便不會受到影響。
在此範例中,LVS 路由器的公開浮動 IP 位址,與私有 NAT 的浮動 IP 位址已指定給實體 NIC。儘管您能使各個浮動 IP 位址與其 LVS 路由器節點上的實體裝置相聯,不過卻不需要使用到超過兩張 NIC。
藉由此拓樸,active LVS 路由器會收到請求,並將其路由導向至正確的伺服器上。真實伺服器會處理這些請求,然後傳回給 LVS 路由器,LVS 路由器會使用網路位址轉譯,把封包中的真實伺服器位址替代成 LVS 路由器的公開 VIP 位址。這項過程稱為「IP 偽冒」(IP masquerading),因為真實伺服器的位址被隱藏起來,用戶端是看不見的。
使用這種 NAT 路由時,實體伺服器可以是執行多種作業系統的任何電腦。其主要缺點是 LVS 路由器可能會成為大型佈建環境中的瓶頸,因為它必須處理進、出的請求。

2.4.2. 直接路由

跟其它 Load Balancer 的網路拓樸比起來,建立使用直接路由的 Load Balancer 的效能更好。直接路由能讓實體伺服器直接處理封包,並將其路由導向至請求的使用者;而非全部透過 LVS 路由器傳送連外的封包。直接路由透過了將 LVS 路由器的工作轉為僅處理進入的封包,ˇ以減少網路效能降低的可能性。
以直接路由來實作 Load Balancer

圖形 2.4. 以直接路由來實作 Load Balancer

在典型的直接路由 Load Balancer 的設置裡,LVS 路由器能透過虛擬 IP(VIP)收取進來的伺服器請求,使用排程演算法則將這些請求導向至實體伺服器。實體伺服器會處理請求,再將結果直接傳回給用戶端,跳過 LVS 路由器。這路由方式能實現可擴充性,因為實體伺服器可以在不需要增加 LVS 路由器的負擔之下加入,幫忙將連出的封包從實體伺服器送往用戶端;否則的話,這會在高網路負載的情形下,形成瓶頸。

2.4.2.1. 直接路由與 ARP 的限制

雖然在 Load Balancer 中使用直接路由有許多好處,但還是有限制。透過直接路由的 Load Balancer 最常見的問題就是使用「位址解析通訊協定」(ARP,Address Resolution Protocol)。
在一般的情形下,位於網際網路的使用者發送請求到一個 IP 位址。網路路由器會利用 ARP 取得目的地的 MAC 位址,並將 MAC 位址及 IP 位址做上關聯,以發送請求。ARP 會廣播詢問所有連上網路的電腦,擁有正確 IP/MAC 位址的電腦就會收到這封包。IP/MAC 的關聯會儲存在 ARP 快取裡,這快取會定期清除(通常是每十五分鐘),再被重新填入 IP/MAC 的關聯。
直接路由 Load Balancer 設定中的 ARP 請求問題,是因為用戶請求的 IP 必須與 MAC 位址相聯,因此 Load Balancer 系統的虛擬 IP 位址也必須跟某個 MAC 位址相聯。然而,因為 LVS 路由器與實體伺服器的 VIP 是一樣的,ARP 請求會廣播到與此 VIP 相聯的所有節點上。這會造成幾個問題,比方說 VIP 直接與一台實體伺服器相聯並直接處理需求,完全不透過 LVS 路由器,這完全違背了設定 LVS 的用途。
要解決這個問題,請確保所有進來的請求都會發送到 LVS 路由器,而非任何一台真實伺服器。這可以透過使用 arptables_jfiptables 封包篩選工具來達成,理由如下:
  • arptables_jf 會避免 ARP 將 VIP 與真實伺服器建立關連。
  • iptables 法會一開始就配置真實伺服器上的 VIP,完全迴避 ARP 的問題。