Red Hat Training

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

3.2. 透過直接路由使用 Load Balancer 外掛程式

如〈節 1.4.2, “直接路由”〉所示,直接路由能允許真實伺服器直接處理、將封包路由至發出需求的使用者,而不是透過 LVS 路由器傳輸向外的封包。直接路由需要真實伺服器連接至 LVS 路由器的所屬網路區段,並也能夠處理、導向向外的封包。
網路佈局
在直接路由的 Load Balancer 外掛程式設定中,LVS 路由器需要收取進來的需求,並將這些需求路由到適當的真實伺服器上以供處理。接下來真實伺服器就需要「直接」將回應路由至用戶端。因此,舉例來說,如果用戶端位於網際網路上,並透過 LVS 路由器發送封包到真實伺服器,那麼真實伺服器就必須透過網際網路直接連上用戶端。這可以透過為真實伺服器配置閘道器,將封包轉送到網際網路上來達成。集區中的每台真實伺服器都可以擁有自己的閘道器(並各自連上網際網路),提供最大的吞吐量與擴充性。然而,對於典型的 Load Balancer 外掛程式來說,真實伺服器可以透過單一的閘道器(也就是單一網路連線)來通訊。

重要

我們「並不建議」使用 LVS 路由器作為真實伺服器的閘道器,因為這會增加 LVS 路由器設定上的非必要複雜度與網路負載,這在 NAT 路由中,會成為網路的瓶頸。
硬體
使用直接路由的 Load Balancer 外掛程式系統之硬體需求跟其它用於 Load Balancer 外掛程式的拓樸類似。LVS 路由器需要執行 Red Hat Enterprise Linux 來處理進來的需求、並為真實伺服器進行負載平衡,而真實伺服器就不一定要是 Linux 機器才能正常運作。LVS 路由器需要 1 或 2 張網路卡(端視有沒有備用路由器而定)。您可以在每個配置中使用兩張網路卡,明確地分開網路交通 — 進來的需求由一張網路卡處理,路由封包則交給另一張網路卡處理。
因為真實伺服器會繞過 LVS 路由器,並直接發送向外的封包給用戶端,因此需要連往網際網路的閘道器。欲求最大效能與可用性,每台真實伺服器可以連上自己的獨立閘道器,透過專屬的連線連上用戶端所屬的網路(例如網際網路或企業內部網路)。
軟體
Piranha Configuration Tool 以外還有一些配置工作要做,尤其是透過直接路由使用 Load Balancer 外掛程式,遇到 ARP 問題時。詳情請參閱〈節 3.2.1, “直接路由與 arptables_jf〉或〈節 3.2.2, “直接路由與 iptables〉。

3.2.1. 直接路由與 arptables_jf

為了要使用 arptables_jf 配置直接路由,每台真實伺服器都必須配有虛擬 IP 位址,藉以直接路由封包。真實伺服器會忽視 VIP 的 ARP 需求,同時任何可能含有 VIP 的 ARP 封包都會被修改,以包含真實伺服器的 IP 位址,而非 VIP。
應用程式使用 arptables_jf 這方法就可以綁定到真實伺服器所服務的每個獨立 VIP 或連接埠。舉例來說,arptables_jf 方法能讓 Apache HTTP Server 的多個 instance 直接綁定在系統上的多個 VIP 上執行。使用 arptables_jf 而不是 iptables 指令,還有效能上的顯著好處。
然而,使用 arptables_jf 法,VIP 就不能透過標準的 Red Hat Enterprise Linux 系統配置工具,好在系統開機時啟動。
要配置每台真實伺服器忽略每個虛擬 IP 位址的 ARP 需求,請進行以下步驟:
  1. 在每台真實伺服器上,為每個虛擬 IP 位址建立 ARP 表的條目(real_ip 是導向程式用來與真實伺服器溝通的 IP 位址;通常這是 eth0 的 IP 位址):
    arptables -A IN -d <virtual_ip> -j DROP
    arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>
    這會導致真實伺服器忽略虛擬 IP 位址的所有 ARP 需求,並改變任何向外、可能包含虛擬 IP 位址(而非伺服器的真實 IP 位址)的 ARP 回應。唯一應該回應任何 VIP 的 ARP 需求之節點,是目前的 active LVS 節點。
  2. 在每台真實伺服器完成這項工作後,在每台真實伺服器上執行以下指令,以儲存 ARP 表的條目:
    service arptables_jf save
    chkconfig --level 2345 arptables_jf on
    chkconfig 指令會讓系統在開機時重新載入 arptables 的配置 — 在網路啟動之前。
  3. 使用 ifconfig 建立 IP 別名,在所有真實伺服器上配置虛擬 IP 位址。例如:
    # ifconfig eth0:1 192.168.76.24 netmask 255.255.252.0 broadcast 192.168.79.255 up
    或使用 iproute2 工具程式的 ip 指令,例如:
    # ip addr add 192.168.76.24 dev eth0
    如前所述,Red Hat 系統的配置工具無法配置虛擬 IP 位址在開機時啟動。解決方法是將這些指令放在 /etc/rc.d/rc.local 中。
  4. 配置 Piranha 使用直接路由。詳情請參閱〈章 4, Piranha Configuration Tool 配置 Load Balancer 外掛程式〉。