Red Hat Training

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

Load Balancer 管理

Red Hat Enterprise Linux 6

Red Hat Enterprise Linux 的 Load Balancer 外掛程式

版 6

Logo

摘要

建置一部 Load Balancer 外掛程式系統能為生產服務提供高可用性、高擴充性的解決方案,它使用了專屬的 Linux Virtual Server(LVS,Linux 虛擬伺服器)來進行路由並提供負載平衡技術。本書討論了搭配 Red Hat Enterprise Linux(RHEL)的高效能系統與服務,以及 RHEL 6 Load Balancer 外掛程式上的配置。

簡介

本文件提供關於安裝、配置及管理 Load Balancer(負載平衡)外掛程式元件的相關資訊。Load Balancer 外掛程式透過專門的路由技巧,將流量發送至伺服器集區來提供負載平衡。
本文件的目標讀者應擁有 Red Hat Enterprise Linux(簡稱 RHEL)的進階知識,以及叢集、儲存裝置,和伺服器運算上的概念理解。
本文件的內容如下:
欲取得更多有關於 Red Hat Enterprise Linux 6 的相關資訊,請參閱下列資源:
  • Red Hat Enterprise Linux 安裝指南》— 提供關於 Red Hat Enterprise Linux 6 安裝上的相關資訊。
  • Red Hat Enterprise Linux 建置指南》— 提供關於 Red Hat Enterprise Linux 6 的建置、配置和管理上的相關資訊。
欲取得更多有關於 Red Hat Enterprise Linux 6 的 Load Balancer 外掛程式以及相關產品上的資訊,請參閱下列資源:
  • Red Hat Cluster Suite 總覽》— 提供了 High Availability 外掛程式、Resilient Storage 外掛程式,以及 Load Balancer 外掛程式的基礎總覽。
  • 配置和管理 High Availability 外掛程式》提供關於 RHEL 6 上的 High Availability 外掛程式(亦稱為 Red Hat Cluster)的配置與管理資訊。
  • 邏輯卷冊管理程式管理》— 提供了邏輯卷冊管理程式(LVM,Logical Volume Manager)的相關資訊,包括在叢集環境中執行 LVM 的相關說明。
  • 全球檔案系統 2:設定與管理》— 提供安裝、配置與維護 Red Hat Resilient Storage 外掛程式(亦稱為 Red Hat Global File System 2)的相關資訊。
  • DM Multipath》— 提供關於 Red Hat Enterprise Linux 6 Device-Mapper Multipath 功能使用上的相關資訊。
  • 發行公告》— 提供關於最新 Red Hat 產品的相關資訊。
本文件以及其它 Red Hat 文件皆擁有 HTML、PDF 以及 EPUB 版本於 http://access.redhat.com/documentation/docs 網站上。

1. 意見

若您發現了錯字,或有改善本指南的意見,我們很樂意與您取得聯繫。請在 Bugzilla(http://bugzilla.redhat.com/bugzilla/)中,針對於「Red Hat Enterprise Linux 6」產品的「doc-Load_Balancer_Administration」元件,版本 6.6 提交一份報告。
若您有任何改善文件的意見,請盡可能地進行詳述。若您發現了錯誤,請提供章節號碼以及附近文字,以供我們更容易地找出錯誤所在。

章 1. Load Balancer 外掛程式總覽

注意

自 Red Hat Enterprise Linux(RHEL)6.6 起,除了 Piranha 負載平衡軟體以外,Red Hat 還提供了對 HAProxy 與 keepalived 的支援。欲知搭配 RHEL 系統與 HAProxy 及 keepalived 的資訊,請參閱 RHEL 7 的負載平衡管理文件。
Load Balancer 外掛程式(Load Balancer 外掛程式,Load Balancer Add-On)是一組整合式的軟體元件,它提供了用來在一組真實伺服器(real server)之間,平衡 IP 負載的 LVS(Linux 虛擬伺服器,Linux Virtual Server)。Load Balancer 外掛程式會在一個「active LVS 路由器」(動作中)以及「backup LVS 路由器」(備用)上執行。active LVS 路由器負責兩項工作:
  • 平衡真實伺服器之間的工作負載。
  • 檢查各個真實伺服器上的服務完整性。
backup LVS 路由器會監控 active LVS 路由器,並在 active LVS 路由器失效時接替執行工作。
本章節提供了 Load Balancer 外掛程式元件及功能上的總覽,並包含了下列部分:

1.1. Load Balancer 外掛程式基本配置

圖形 1.1, “Load Balancer 外掛程式基本配置”〉顯示了包含兩個網路層的基本 Load Balancer 外掛程式配置。第一個網路層上包含了一台 active 及一台 backup LVS 路由器。各個 LVS 路由器皆擁有兩張網路介面卡,一張介面卡位於網際網路上,而另一張則位於私有網路上,這能讓它們管理兩個網路之間的流量。在此範例中,active 路由器使用了「網路位址轉譯」(NAT,Network Addrress Tranlation)來將流量由網際網路轉送至第二個網路層上的數個真實伺服器上,並依次提供必要的服務。因此,本範例中的真實伺服器連至了一個專屬的私有網路區段,並透過 active 路由器來回傳送所有的公共流量。以外部的角度來看,這些伺服器會看似單一實體。
Load Balancer 外掛程式基本配置

圖形 1.1. Load Balancer 外掛程式基本配置

抵達 LVS 路由器的服務請求會被指定一組「虛擬 IP」(VIP,Virtual IP)位址。這是網站管理員可以與完整區域名稱(例如 www.example.com)相聯的可公開路由的位址,並且將會指定給一或更多個「虛擬伺服器」(virtual server)。虛擬伺服器是用來監聽特定虛擬 IP 的服務。欲取得更多有關於使用 Piranha Configuration Tool(Piranha 配置工具)來配置虛擬伺服器上的相關資訊,請參閱〈節 4.6, “虛擬伺服器〉。當容錯移轉進行時,VIP 位址會由一台 LVS 路由器上遷移至另一台路由器上,並在該 IP 位址上保留其存在性(亦稱為「浮動 IP 位址」— floating IP address)。
您可為 VIP 位址與將 LVS 路由器連至網路的相同裝置之間建立一組別名。比方說,若是 eth0 連至了網際網路,則多個虛擬伺服器可被命名為 eth0:1 別名。此外,各個虛擬伺服器的各項服務,皆可與個別的裝置相聯。比方說,HTTP 流量可在 eth0:1 上處理,FTP 流量則在 eth0:2 上處理。
一次僅有一台 LVS 路由器會被啟用。active 路由器的任務就是將服務請求由虛擬 IP 位址重定向至真實伺服器。此重定向基於詳述於〈節 1.3, “Load Balancer 外掛程式的排程概覽”〉中的八種負載平衡演算法之一。
active 路由器也會透過 send/expect script 動態監控真實伺服器上,特定服務的整體健康狀況。為了協助偵測需要動態式資料的服務(例如 HTTPS 或 SSL)之健康狀況,管理員亦可調用外部的執行檔。若真實伺服器上的一項服務發生錯誤,active 路由器將會停止傳送工作至該伺服器上,直到它恢復正常運作狀態。
backup 路由器將負責作為備用系統的任務。LVS 路由器會定期透過主要的外部公共介面卡,來交換活動訊號訊息,在進行容錯移轉的情況下,則是透過私有介面卡。若備用節點在一段預期的時段內未接收到活動訊號訊息,它將會啟用容錯移轉,並負責進行 active 路由器的任務。當進行容錯移轉時,backup 路由器會透過一項名為「ARP 欺騙」(ARP spoofing)的技巧來接替失效路由器所服務的 VIP 位址 — backup LVS 路由器會自行宣告成為原本應傳送至失效節點的 IP 封包之目的地。當失效的節點復原後,備用節點便會再次成為線上備份的角色。
使用於〈圖形 1.1, “Load Balancer 外掛程式基本配置”〉中的基本、兩層的配置,適合用來服務不會頻繁遭到改變的資料 — 例如靜態式的網頁 — 因為個別的真實伺服器不會自動同步各個節點之間的資料。

1.1.1. 真實伺服器之間的資料複製與資料共享

因為 Load Balancer 外掛程式中沒有內建元件,好在真實伺服器之間共享相同的資料,因此管理員可使用兩項基本選項:
  • 同步真實伺服器集區之間的資料
  • 新增第三個網路層至拓撲中,以存取共享的資料
對伺服器來說,第一個選項比較適合,因為這不允許大量使用者上傳或更改真實伺服器上的資料。如果配置允許大量使用者修改資料,例如電子商務網站,那麼建議您使用第三層。

1.1.1.1. 配置真實伺服器同步資料

管理者有許多方法可以在真實伺服器集區中同步資料。舉例來說,網站工程師可以透過 shell script 來將更新過的網頁同步發佈到所有伺服器上。同時,系統管理者可以每隔一段時間,使用諸如 rsync 的程式來將修改過的資料複製到所有節點上。
然而,如果使用者常常上傳檔案或發出資料庫交易指令而導致系統負載過大,這種資料同步類型並沒有針對此種情況最佳化。若需要高負載下的配置,「三層式拓樸」(three-tier topology)會是理想的解決方案。

1.2. 三層式拓樸 Load Balancer 外掛程式配置

圖形 1.2, “三層式拓樸 Load Balancer 外掛程式配置”〉顯示了典型的三層式 Load Balancer 外掛程式拓樸。在此範例中,active 的 LVS 路由器會將來自網際網路的路由需求導向到真實伺服器集區。接下來,真實伺服器的每台伺服器會透過網路存取共享的資料來源。
三層式拓樸 Load Balancer 外掛程式配置

圖形 1.2. 三層式拓樸 Load Balancer 外掛程式配置

這項配置適用於繁忙的 FTP 伺服器,要存取的資料都儲存在單一、高可用性的伺服器上,由每個實體伺服器透過 NFS 或 Samba 來存取。這個拓樸也適用於存取單一、高可用性資料庫的網站。除此之外,使用 Load Balancer 外掛程式的「動態-動態」(active-active)設定,使用者可以設定一個高可用性的叢集,為其他類似情形提供服務。
上述範例的第三層並不一定要使用 Load Balancer 外掛程式,但不使用高可用性的解決方案可能會嚐到單點失效的苦果。

1.3. Load Balancer 外掛程式的排程概覽

使用 Load Balancer 外掛程式的好處之一,就是它能在真實伺服器集區上進行靈活、IP 等級的負載平衡。基於管理員能夠在配置 Load Balancer 外掛程式時選擇各種不同的排程機制,因此它才能擁有此高度的靈活性。Load Balancer 外掛程式的負載平衡優於其它靈活性較低的方式(例如「循環 DNS」— Round-Robin DNS),其 DNS 的階級特性與客戶端機器的快取可能會造成負載不平衡。此外,LVS 路由器所使用的低階請求轉送,優於應用程式階級的請求轉送,因為在網路封包階級上進行負載平衡,可大幅減少運算上的額外負載,並且能提供較佳的延展性。
使用排程程式,active 路由器可以負責真實伺服器的活動,並在路由服務需求時,負責管理者所指定的「權重」(weight)因子(選用功能)。使用所指定的權重能給予每台機器不同的優先順序。使用此種排程方式,就可以使用多種硬體與軟體的組合來建立真實伺服器群組,且 active 路由器能平均地將工作分配給每台真實伺服器。
Load Balancer 外掛程式是由多個 kernel 修補程式 - 稱為「IP 虛擬伺服器」(IPVS,IP Virtual Server)模組 - 所提供。這些模組啟用了「第四層」(L4,layer 4)的傳輸層切換功能,能與單一 IP 位址上的多台伺服器運作。
要有效追蹤、路由封包到真實伺服器,IPVS 會在 kernel 中建立「IPVS 表」(IPVS table)。active LVS 路由器會使用這表格將需求從虛擬伺服器位址重新導向到集區中的真實伺服器,並將結果回傳。IPVS 表會由名為 ipvsadm 的工具程式更新 — 根據叢集成員的可用性,加以新增、移除。

1.3.1. 排程演算法

IPVS 表的結構會依據管理者為任何選定的虛擬伺服器所選定的排程演算法則而定。為了讓您有最大的彈性可以使用叢集的服務類型、以及如何排程這些服務,Red Hat Enterprise Linux 提供了以下排程演算法則。欲知如何指定排程演算法則,請參閱〈節 4.6.1, “「虛擬伺服器」子區段”〉。
循環排程法
將需求依序發給集區中的伺服器。使用這演算法則時,所有真實伺服器不管能力為何,都會被視為平等。這排程模式類似循環 DNS(round-robin DNS)法,但更細緻,因為這模式是以網路連線為基礎,而非以主機為基礎。 Load Balancer 外掛程式的循環配置資源排程也不會因為快取了 DNS 的查詢項目而導致不平衡。
加權循環排程法
將需求依序發給集區中的真實伺服器,但把更多工作交給能力較強的電腦。能力的強弱會根據使用者所指定的權重而定,再根據動態負載的資訊來上下調整。欲知調整真實伺服器的權重之資訊,請參閱〈節 1.3.2, “伺服器權重與排程”〉。
如果集區中的真實伺服器之能力相差懸殊,那麼加權循環排程會是較好的選擇。然而,如果需求所需的負載也相差懸殊,那麼權重更大的伺服器就可能會回覆過多的需求。
最少連線排程法
會把需求分散到連線數較少的電腦。因為最少連線法會透過 IPVS 表持續追蹤連至真實伺服器的現有連線,因此這是一種動態排程法則,使其成為需求負載變動高的更佳選擇。如果真實伺服器集區中的成員,都有著差不多的處理能力,那麼這方法就很適用。如果實體伺服器的能力不同,加權的最少連線排程法是更好的選擇。
加權最少連線排程法(預設)
把更多需求送到連線數少的伺服器上,對於連線數多寡的判斷,又與伺服器的能力有關。伺服器能力是以使用者指定的權重為準,權重可以由動態負載資訊來調整。當使用的伺服器配備不一時,增加權重功能可以讓最少連線法則成為理想的方案。欲知更多加權真實伺服器的詳情,請參閱〈節 1.3.2, “伺服器權重與排程”〉。
地區為主的最少連線排程法
有更少現有連線數(相對於目的地 IP 位址)的伺服器,將收到更多需求。這個演算法則是設計用在代理 / 快取伺服器叢集上。它會把送往一個 IP 位址的封包導向到擁有該位址的伺服器上;除非該伺服器已經超載,同時另一台伺服器的負載只有一半,這樣它就會把封包送往負載較輕的實體伺服上去。
本地為主的最少連線排程法加上複製排程法
把更多需求送往與目的 IP 相比,較少連線數的伺服器上。這個演算法則是設計給代理 / 快取伺服器叢集使用。與前述不同的是,它會將目的地 IP 位址對應到實體伺服器節點的子集合裡。需求會被導向到這個集合裡,連線數目最少的伺服器上。如果用有這 IP 位址的所有節點都超載,那麼這演算法會複製新的伺服器到這個目標 IP 位址,方法是從整體伺服器群中,將實體伺服器加入該目標 IP 的伺服器子集合裡。最高負載的節點會從實體伺服器的子集合裡移除,避免過度複製。
目的地雜湊排程法
在靜態雜湊表中查詢目的地 IP 位址,將需求分散到真實伺服器集區中。這演算法則適用於代理快取(proxy-cache)伺服器叢集。
來源雜湊排程法
在靜態雜湊表中查詢來源 IP,把需求分散到真實伺服器集區中。這個演算法則是給多防火牆的 LVS 路由器使用的。

1.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 一樣為止。
要避免這個現象發生,管理者可以讓虛擬伺服器成為「靜默」(quiesce)伺服器,一旦啟用後,上述例子的真實伺服器 C 不會從上述虛擬伺服器表中移除,而是將其權重設為 0,這樣能有效地加以停用。當 C 回復時,就會以原來的權重重新啟用。

1.4. 路由法則

Red Hat Enterprise Linux 的 Load Balancer 外掛程式使用「網路位址轉譯」(NAT,Network Address Translation)或「NAT 路由」(NAT routing)技術,能讓管理者調度可用硬體、整合 Load Balancer 外掛程式至現有網路時,深具彈性。

1.4.1. NAT 路由

圖形 1.3, “以 NAT 路由來實踐 Load Balancer 外掛程式”〉描繪了 Load Balancer 外掛程式使用 NAT 路由,將需求在網際網路與私有網路間移動的樣子。
以 NAT 路由來實踐 Load Balancer 外掛程式

圖形 1.3. 以 NAT 路由來實踐 Load Balancer 外掛程式

在這個例子裡,active LVS 路由器有兩張網路卡。連上網際網路的網路卡有位於 eth0 上的「實際的 IP 位址」,同時有浮動 IP 位址,連到 eth0:1 上。私有網路的網路卡在 eth1 上有實際的 IP 位址,也有浮動的 IP 位址連到 eth1:1 上。在備援情況發生時,網際網路與私有網路的虛擬介面會由備用 LVS 路由器所接手。所以私有網路上的真實伺服器會使用 NAT 路由器的浮動 IP 做為預設路徑,與 active LVS 路由器溝通,這樣真實伺服器回應網際網路上來的需求,就不會有問題。
在這個範例裡,LVS 路由器的公開浮動 IP 位址,與私有 NAT 的浮動 IP 位址是兩張網路卡的別名。因為每個浮動 IP 位址都可能與 LVS 路由器節點的實體裝置相連結,所以並不需要使用超過兩張網路卡。
藉由這種拓樸,啟用中的 LVS 路由器會收到需求,並導向到正確的伺服器上。真實伺服器會處理這些需求,然後傳回給 LVS 路由器,LVS 路由器會使用網路位址轉譯,把封包裡面真實伺服器的位址替代成 LVS 路由器的公開 VIP 位址。這個過程稱為「IP 偽冒」(IP masquerading),因為真實伺服器的位址被隱藏起來,用戶端是看不見的。
使用這種 NAT 路由時,實體伺服器可以是執行多種作業系統的任何電腦。其主要缺點是 LVS 路由器可能會成為大型佈建環境中的瓶頸,因為它必須處理進、出的需求。

1.4.2. 直接路由

跟其它 Load Balancer 外掛程式的網路拓樸比起來,建立使用直接路由的 Load Balancer 外掛程式的效能更好。直接路由能讓實體伺服器直接處理封包,並導向至使用者;而非傳給 LVS 路由器處理。直接路由把 LVS 路由器的工作轉為只處理進入的封包,降低了網路效能降低的可能性。
以直接路由來實踐 Load Balancer 外掛程式

圖形 1.4. 以直接路由來實踐 Load Balancer 外掛程式

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

1.4.2.1. 直接路由與 ARP 的限制

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

1.5. Persistence 和 Firewall Marks

在特定情況下,客戶端可能會需要重複重新連線至相同的真實伺服器,而非透過 Load Balancer 外掛程式的負載平衡演算法,來將其請求傳送至最佳的可用伺服器上。此情況的範例包含了多重畫面的 web 表單、cookies、SSL 和 FTP 連線。在這些情況下,除非交易由相同的伺服器處理以保留資料內容,否則客戶端可能無法正常運作。Load Balancer 外掛程式為此情況提供了兩種不同的處理功能:persistencefirewall marks

1.5.1. Persistence

當啟用時,persistence 會如計時器一般地運作。當客戶端連至一項服務時,Load Balancer 外掛程式會在指定的一段時間內,記住最後的一次連線。若相同的客戶端 IP 在該時段之內再次連線的話,它將會被傳送到先前所連至的相同伺服器上 — 跳過負載平衡演算法。當連線在指定的時段之外發生時,它將會被根據所配置的排程規則處理。
Persistence 亦可讓管理員指定子網路遮罩,以套用至客戶端 IP 位址測試,並作為一項控制哪組位址擁有較高等級持續性的工具,而藉此將連線分組在該子網路中。
對於使用超過一個連接埠來進行通訊的協定(比方說 FTP)來說,為連至不同連接埠的連線分組,有時是非常重要的。 然而,persistence 並非最適合用來將連至不同連接埠的連線分組的方式。在這種情況下,建議使用 firewall marks

1.5.2. Firewall Marks

對於協定或一組相關的協定來說,firewall marks 是一項既容易,又有效率的連接埠分組方式。比方說,若建置了 Load Balancer 外掛程式來執行一個電子商務網站,firewall marks 可被使用來將 port 80 上的 HTTP 連線配套,並確保 port 433 上的 HTTPS 連線安全性。藉由為各項協定的虛擬伺服器指定相同的 firewall mark,交易的狀態資訊將能被保留,因為 LVS 路由器會在連線開啟時,將所有請求轉送至相同的真實伺服器上。
因為其高效率和簡易的使用性,Load Balancer 外掛程式的管理員應盡可能使用 firewall marks 來為連線分組。然而,管理員也應搭配 firewall marks 將 persistence 加入至虛擬伺服器上,以確保客戶端能擁有足夠的時間重新連上相同的伺服器。

1.6. Load Balancer 外掛程式 — 區塊圖表

LVS 路由器使用了一組程式來監控叢集成員與叢集服務。〈圖形 1.5, “Load Balancer 外掛程式元件”〉描述了這些在 active 和 backup LVS 路由器上的各種程式如何搭配運作,以管理叢集。
Load Balancer 外掛程式元件

圖形 1.5. Load Balancer 外掛程式元件

pulse daemon 會在 active 和 passive LVS 路由器上執行。在 backup 路由器上,pulse 會傳送 heartbeat(活動訊號)至 active 路由器的公共介面,以確保 active 路由器依然正常運作。在 active 路由器上,pulse 會啟用 lvs daemon 並回應來自於 backup LVS 路由器的 heartbeat 查詢。
啟用後,lvs daemon 便會調用 ipvsadm 工具程式以配置和維護 kernel 中的IPVS 路由表,並為各個真實伺服器上已配置的各個虛擬伺服器,啟用一項 nanny 程序。nanny 程序會檢查一部真實伺服器上,一項已配置的服務之狀態,並在該真實伺服器上的服務失效時,告知 lvs daemon。若偵測到服務失效的話,lvs daemon 便會指示 ipvsadm 將真實伺服器由 IPVS 路由表中移除。
若 backup 路由器未收到來自於 active 路由器的回應,它會啓動容錯移轉:它會藉由調用 send_arp 來重新將所有虛擬 IP 位址分配給備用節點的 NIC 硬體位址(MAC 位址)、透過公共和私有網路介面卡來傳送一項指令至 active 路由器,以關閉 active 路由器上的 lvs daemon,並啟用備用節點上的 lvs daemon,以接受已配置之虛擬伺服器的請求。

1.6.1. Load Balancer 外掛程式元件

節 1.6.1.1, “pulse〉顯示了 LVS 路由器中的詳細軟體元件清單。

1.6.1.1. pulse

這是開始所有其他與 LVS 路由器的系統程式之控制程序。在開機時,這個系統程式會由 /etc/rc.d/init.d/pulse 程序所啟動。然後它會讀取設定檔 /etc/sysconfig/ha/lvs.cf。在 active 路由器上,pulse 會啟動 LVS 系統程式。在備用的路由器上,pulse 會決定運作中路由器的健康程度,方法是已使用者設定的間隔,送出心跳般的訊息(heartbeat)。如果 active 路由器在這間隔中沒有回應,就會開始備援程序。在備援程序中,backup LVS 路由器上的 pulse 會指示 active 路由器的 pulse 系統程式關閉所有 LVS 服務,啟動 send_arp 程式來重新指定浮動 IP 位址給 backup 路由器的 MAC 位址,並啟動 lvs 系統程式。

1.6.1.2. lvs

當被 pulse 調用時,lvs daemon 便會在 active LVS 路由器上執行。它會讀取 /etc/sysconfig/ha/lvs.cf 配置檔案、調用 ipvsadm 工具程式以建立和維護 IPVS 路由表,並為各項已配置的 Load Balancer 外掛程式服務分配一項 nanny 程序。當 nanny 回報有部真實伺服器失效時, lvs 將會指示 ipvsadm 工具程式將真實伺服器由 IPVS 路由表中移除。

1.6.1.3. ipvsadm

這項服務會更新 kernel 中的 IPVS 路由表。lvs daemon 會藉由調用 ipvsadm 來新增、更改或刪除 IPVS 路由表中的項目,以設定並管理 Load Balancer 外掛程式。

1.6.1.4. nanny

nanny 會監控在 active LVS 路由器上執行的 daemon。active 路由器可透過此 daemon 來評斷各真實伺服器的健康情況,並且亦可選用性監控其工作量。定義於各個真實伺服器上的各項服務,皆會以獨立程序的方式執行。

1.6.1.5. /etc/sysconfig/ha/lvs.cf

這是 Load Balancer 外掛程式的配置檔案。所有 daemon 皆會直接或間接由此檔案取得其配置資訊。

1.6.1.6. Piranha Configuration Tool

這是用來監控、配置和管理 Load Balancer 外掛程式的網站工具。這是個用來維護 /etc/sysconfig/ha/lvs.cf Load Balancer 外掛程式配置檔案的預設工具。

1.6.1.7. send_arp

當浮點 IP 位址在容錯移轉進行的情況下,由一個節點改變為另一個節點時,此程式將會送出 APP 廣播。
章 2, Load Balancer 外掛程式初始配置〉詳述了您在將 Red Hat Enterprise Linux 配置為一個 LVS 路由器之前,所需要進行的重要後續安裝配置步驟。

章 2. Load Balancer 外掛程式初始配置

安裝了 Red Hat Enterprise Linux 之後,您必須進行一些基礎步驟,以設定 LVS 路由器和真實伺服器。本章節詳細涵蓋了這些初始步驟。

注意

當 Load Balancer 外掛程式啟用時,成為啟用節點的 LVS 路由器節點,亦稱為主要節點。當配置 Load Balancer 外掛程式時,請在主要節點上使用 Piranha Configuration Tool

2.1. 在 LVS 路由器上配置服務

Red Hat Enterprise Linux 的安裝程式會安裝設定 Load Balancer 外掛程式所需的所有元件,不過在配置 Load Balancer 外掛程式之前,您必須先啟用一些必要的服務。若要使用 LVS 路由器,請將相應的服務設為在開機時啟用。在 Red Hat Enterprise Linux 下,將服務設定在開機時啟用的可用工具有三種:指令列程式 chkconfig、基於 ncurses 的程式 ntsysv,以及圖形化介面的 Services Configuration Tool。所有這些工具皆需要 root 存取權限。

注意

若要取得 root 存取權限,請開啟一個 shell 提示並使用 su - 指令然後輸入 root 密碼。例如:
$ su - root password
在 LVS 路由器上,有三項須設置為在開機時啟用的服務:
  • piranha-gui 服務(只有主要節點)
  • pulse 服務
  • sshd 服務
若您要將多連接埠的服務納入叢集,或使用防火牆標記的話,您也必須啓用 iptables 服務。
建議將這些服務設置為啟用於 runlevel 3 和 runlevel 5 中。若要使用 chkconfig 來完成這項動作,請為各項服務輸入下列指令:
/sbin/chkconfig --level 35 daemon on
在以上指令中,請將 daemon 替換為您希望啟用的服務之名稱。若要取得系統上的服務清單,以及它們被設定為啟用於哪個 runlevel 上的相關資訊,請輸入下列指令:
/sbin/chkconfig --list

警告

透過 chkconfig 來啟用以上任何一項服務並不會實際啟用 daemon。若要這麼做,請使用 /sbin/service 指令。欲檢視如何使用 /sbin/service 指令的相關範例,請參閱〈節 2.3, “啟用 Piranha Configuration Tool 服務”〉。
欲取得更多有關於 runlevel 以及透過 ntsysvServices Configuration Tool 配置服務的相關資訊,請參閱《Red Hat Enterprise Linux System Administration Guide》中,標題為《控制服務存取權限》的章節。

2.2. 為 Piranha Configuration Tool 設定一組密碼

在主要的 LVS 路由器上第一次使用 Piranha Configuration Tool 之前,您必須藉由建立一組密碼,以限制其存取權限。若要這麼做,請以 root 身份登入,並輸入以下指令:
/usr/sbin/piranha-passwd
在輸入了這項指令後,請在提示出現時,建立管理員密碼。

警告

一組安全的密碼不應包含任何名詞、常用的縮寫,或是任何語言之字典中的字彙。請勿將此密碼以未加密的方式存放在系統的任何位置上。
若要在一項 Piranha Configuration Tool session 進行時修改密碼,管理員將會被提示輸入新的密碼。

2.3. 啟用 Piranha Configuration Tool 服務

在您為 Piranha Configuration Tool 設置了密碼之後,請啟用或重新啟用位於 /etc/rc.d/init.d/piranha-gui 中的 piranha-gui 服務。若要這麼做,請以 root 身份輸入下列指令:
/sbin/service piranha-gui start
或是
/sbin/service piranha-gui restart
輸入這項指令將會皆由調用 /usr/sbin/piranha_gui -> /usr/sbin/httpd 符號連結來啟用一項私密的 Apache HTTP Server session。基於安全性,piranha-gui 版本的 httpd 會在獨立的程序中作為 piranha 使用者執行。piranha-gui 需利用 httpd 服務,即代表:
  1. Apache HTTP Server 必須安裝在系統上。
  2. 透過 service 指令中止或重新啟用 Apache HTTP Server 都會使 piranha-gui 服務中止。

警告

若在 LVS 路由器上輸入 /sbin/service httpd stop 或是 /sbin/service httpd restart,您必須輸入以下指令,以啟用 piranha-gui 服務:
/sbin/service piranha-gui start
只要擁有 piranha-gui 服務,即可開始配置 Load Balancer 外掛程式。然而,若您要遠端配置 Load Balancer 外掛程式的話,您亦需要使用 sshd 服務。您無需啟用 pulse 服務,直到使用 Piranha Configuration Tool 進行的配置完成。欲取得更多有關於啟用 pulse 服務的相關資訊,請參閱〈節 4.8, “啟動 Load Balancer 外掛程式”〉。

2.3.1. 配置 Piranha Configuration Tool 網站伺服器連接埠

Piranha Configuration Tool 就預設值會在連接埠 3636 上執行。若要更改此埠號,請更改 piranha-gui 網站伺服器配置檔案 /etc/sysconfig/ha/conf/httpd.conf 第二部分中的 Listen 3636 一行。
若要使用 Piranha Configuration Tool,您至少需要一個純文字的網站瀏覽器。若您在主要的 LVS 路由器上啟用一個網站瀏覽器,請開啟 http://localhost:3636 這個位址。您可藉由將 localhost 取代為主要 LVS 路由器的主機名稱或是 IP 位址,以隨時隨地透過網站瀏覽器連上 Piranha Configuration Tool
當您的瀏覽器連至 Piranha Configuration Tool 時,您必須登入才能存取配置服務。請在「使用者名稱」欄位中輸入 piranha,並在「密碼」欄位中輸入透過 piranha-passwd 設置的密碼。
現在 Piranha Configuration Tool 已在執行,建議您為此工具設定誰能透過網路進行存取。下個部分將詳述如何完成這項任務。

2.4. 限制 Piranha Configuration Tool 的存取

Piranha Configuration Tool 會提示您輸入一組有效的使用者名稱及密碼組合。然而,因為所有傳送給 Piranha Configuration Tool 的資料皆是純文字,建議您限制只讓信任的網路或本機機器存取。
限制存取最簡單的方式就是藉由編輯 /etc/sysconfig/ha/web/secure/.htaccess,以使用 Apache HTTP Server 的內建存取控制機制。在修改了檔案之後,您無需重新啟用 piranha-gui 服務,因為每當它存取目錄時,伺服器便會檢查 .htaccess 檔案。
就預設值,此目錄的存取控制允許任何人檢視目錄的內容。預設的存取控制會看似:
Order deny,allow
Allow from all
若要限制僅允許本機主機存取 Piranha Configuration Tool,請修改 .htaccess 檔案,以限制只允許來自於 loopback 裝置(127.0.0.1)的存取。欲取得更多有關於 loopback 裝置的相關資訊,請參閱《Red Hat Enterprise Linux Reference Guide》中,標題為《網路 Script》的章節。
Order deny,allow
Deny from all
Allow from 127.0.0.1
您亦可如以下範例一般地允許特定主機或子網路存取:
Order deny,allow
Deny from all
Allow from 192.168.1.100
Allow from 172.16.57
在此範例中,僅有來自於 IP 位址為 192.168.1.100 的機器上的網站瀏覽器,以及 172.16.57/24 網路上的機器能存取 Piranha Configuration Tool

警告

編輯 Piranha Configuration Tool .htaccess 檔案可限制 /etc/sysconfig/ha/web/secure/ 目錄中的配置頁面的存取,不過無法限制 /etc/sysconfig/ha/web/ 中的登入及協助頁面的存取。若要限制此目錄的存取,請在 /etc/sysconfig/ha/web/ 目錄中建立一個 .htaccess 檔案,以及與 /etc/sysconfig/ha/web/secure/.htaccess 相似的 orderallow,和 deny 行列。

2.5. 開啟封包轉送

若要 LVS 路由器正確將網路封包轉送至真實伺服器上,各個 LVS 路由器的節點皆需要在 kernel 中開啟 IP 轉送。請以 root 登入,並將 /etc/sysctl.conf 中的 net.ipv4.ip_forward = 0 一行更改為:
net.ipv4.ip_forward = 1
當您重新啓動系統時,變更便會生效。
若要檢查 IP 轉送是否已開啟,請以 root 身份輸入以下指令:
/sbin/sysctl net.ipv4.ip_forward
若以上指令回傳了 1,即代表 IP 轉送已啟用。若回傳了 0,則您可使用以下指令來手動式啟用它:
/sbin/sysctl -w net.ipv4.ip_forward=1

2.6. 在真實伺服器上配置服務

若真實伺服器為 Red Hat Enterprise Linux 系統,請將相應的伺服器 daemon 設為在開機時啟用。這些 daemon 可包含用於網站服務的 httpd,或是用於 FTP 或 Telnet 服務的 xinetd
有時您可能需要遠端存取真實伺服器,因此您應安裝並執行 sshd daemon。

章 3. 設定 Load Balancer 外掛程式

Load Balancer 外掛程式包含了兩個基本群組:LVS 路由器與真實伺服器。要避免單點失效的問題,每個群組都應該包含至少兩台成員系統。
LVS 路由器群組應該包含兩台完全相同、或非常近似的 Red Hat Enterprise Linux 系統。一台作為 active LVS 路由器,另一台則處於熱待命模式,因此兩台電腦的處理能力應該相仿。
選擇、配置真實伺服器群組之前,請先決定要使用三種 Load Balancer 外掛程式拓樸的哪一種。

3.1. NAT Load Balancer 外掛程式網路

NAT 拓樸能讓使用者大幅使用現有硬體,但限於處理大量負載的能力,因為所有進出集區的封包都會通過 Load Balancer 外掛程式路由器。
網路佈局
從網路佈局的角度來看,使用 NAT 路由的 Load Balancer 外掛程式之拓樸是最容易配置的,因為只需要單點即可存取公開網路。真實伺服器位於私有網路內,會透過 LVS 路由器將所有需求傳回。
硬體
就硬體來說,NAT 拓樸是最有彈性的配置,因為真實伺服器並不一定得是 Linux 伺服器才能正常運作。在 NAT 拓樸中,每台真實伺服器只需要一張網路卡,因為真實伺服器只需要回應 LVS 路由器即可。另一方面,LVS 路由器需要兩張網路卡連接兩組網路。因為這拓樸會在 LVS 路由器上造成網路瓶頸,因此不妨在每台 LVS 路由器上採用 gigabit 乙太網路卡。如果 LVS 路由器用了 gigabit 乙太網路卡,連接真實伺服器與 LVS 路由器的任何交換器,都必須有至少兩組 gigabit 乙太網路連接埠,以有效處理負載。
軟體
因為在某些配置下,NAT 拓樸需要使用 iptables,因此除了 Piranha Configuration Tool 以外,還需要不少軟體配置。尤其是 FTP 服務與使用防火牆標記,需要額外配置 LVS 路由器,路由功能才能正常運作。

3.1.1. 在 Load Balancer 外掛程式搭配 NAT 情境下,配置網路介面

要搭配 NAT 設定 Load Balancer 外掛程式,您必須先為 LVS 路由器的公開與私有網路配置網路介面卡。在此範例中,LVS 路由器的公開介面(eth0)是 192.168.26/24(這不是可路由的 IP 網段,但我們假設這台 LVS 路由器之前有防火牆),而連至真實伺服器的私有介面(eth1)位於 10.11.12/24 網段。

重要

請注意,編輯以下屬於 network 服務與 Load Balancer 外掛程式的檔案,並不相容於 NetworkManager 服務。
在 active LVS 路由節點或「」LVS 路由節點上,公開介面的網路 script /etc/sysconfig/network-scripts/ifcfg-eth0 看起來類似:
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.26.9
NETMASK=255.255.255.0
GATEWAY=192.168.26.254
LVS 路由器上的私有 NAT 介面之檔案 /etc/sysconfig/network-scripts/ifcfg-eth1 則類似:
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
IPADDR=10.11.12.9
NETMASK=255.255.255.0
在此範例中,LVS 路由器介面的虛擬 IP 是 192.168.26.10,NAT 或私有介面的虛擬 IP 則是 10.11.12.10。因此,真實伺服器的路由需求會回到 NAT 介面的虛擬 IP。

重要

本節的乙太網路介面配置之設定值範例,是給 LVS 路由器的真實 IP 位址使用,而「不是」給浮動 IP 位址使用。要配置公開與私有浮動 IP 位址,管理者必須使用 Piranha Configuration Tool,如〈節 4.4, “全域設定〉與〈節 4.6.1, “「虛擬伺服器」子區段”〉所示。
配置主 LVS 路由器節點的網路介面之後,配置備用 LVS 路由器的真實網路介面 — 請注意,不要有任何 IP 位址與網路上的其它 IP 位址相衝突。

重要

確定備用節點上的每個介面,都與主節點上的介面位於同一組網路上。舉例來說,如果 eth0 連接至主節點上的公開網路,那麼也必須連接到備用節點的公開網路上。

3.1.2. 真實伺服器上的路由

在 NAT 拓樸中配置真實伺服器網路介面時,最重要的是設定 LVS 路由器的閘道器之 NAT 浮動 IP 位址。在此範例中,IP 位址為 10.11.12.10。

注意

一旦真實伺服器上的網路介面都已啟動,電腦就無法透過其它方式 ping 或連接至公開網路。這很正常。然而您可以 ping LVS 路由器的私有介面之真實 IP,亦即此範例中的 10.11.12.9。
因此,真實伺服器的 /etc/sysconfig/network-scripts/ifcfg-eth0 檔案看起來類似:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.11.12.1
NETMASK=255.255.255.0
GATEWAY=10.11.12.10

警告

如果真實伺服器有超過一組網路介面配置有 GATEWAY= 一行,那麼第一組出現的會取得閘道器。因此如果 eth0eth1 都已配置,且 eth1 用於 Load Balancer 外掛程式,那麼真實伺服器可能就無法正確處理路由的需求。
最好把多餘的網路介面卡關掉,作法是在 /etc/sysconfig/network-scripts/ 目錄中的網路卡 script 裡,設置 ONBOOT=no,或確定第一張出現的網路卡之閘道器已被正確設定。

3.1.3. 在 LVS 路由器上啟用 NAT 路由設定

在簡易的 NAT Load Balancer 外掛程式配置裡,每個叢集服務都只使用一組連接埠,例如 HTTP 使用連接埠號 80,那麼管理者只需要在 LVS 路由器上啟用封包轉送功能,就可以讓這些需求在外在世界與真實伺服器之間正確地路由。欲知啟用封包轉送功能的資訊,請參閱〈節 2.5, “開啟封包轉送”〉。然而,叢集服務需要使用超過一組連接埠,好在同一個使用者 session 中連接同一台真實伺服器時,就需要額外設定。欲知使用防火牆標記以建立多連接埠服務的資訊,請參閱〈節 3.4, “多連接埠與 Load Balancer 外掛程式”〉。
一旦 LVS 路由器啟用了封包轉送功能,且真實伺服器已經設定完成並執行叢集服務,請使用 Piranha Configuration Tool 配置 Load Balancer 外掛程式,如〈章 4, Piranha Configuration Tool 配置 Load Balancer 外掛程式〉所述。

警告

請勿手動編輯網路 script 或使用網路 script 的編輯程式,來配置 eth0:1eth1:1 的浮動 IP 位址。請使用 Piranha Configuration Tool,如〈節 4.4, “全域設定〉與〈節 4.6.1, “「虛擬伺服器」子區段”〉所示。
完成後,請啟動 pulse 服務,如〈節 4.8, “啟動 Load Balancer 外掛程式”〉。一旦 pulse 啟動並處於執行狀態,active LVS 路由器就會開始將需求路由至真實伺服器集區。

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 外掛程式〉。

3.2.2. 直接路由與 iptables

另一個解決 ARP 問題的方法,是建立 iptables 防火牆規則。要使用 iptables 配置直接路由,您必須新增規則,這規則會建立通透的代理,讓真實伺服器能為發送到這 VIP 位址的封包提供服務,即使這 VIP 位址不存在於系統上也無妨。
配置 iptables 比配置 arptables_jf 更容易。這方法也能完全避免 LVS ARP 問題,因為虛擬 IP 位址只存在於 active LVS 轉發者上。
然而,跟使用 arptables_jf 比起來,使用 iptables 會有效能上的問題,因為每個封包在轉送 / 偽冒時,都會產生負荷。
您也無法使用 iptables 來重新使用連接埠。舉例來說,要執行兩個獨立、使用 80 連接埠的 Apache HTTP Server 服務就是不可能的事情,因為兩者都必須與 INADDR_ANY 綁定,而非虛擬的 IP 位址。
要配置直接路由使用 iptables 法,請執行以下步驟:
  1. 在每一台真實伺服器上,對要提供服務對象的 VIP、連接埠、以及通訊協定(TCP 或 UDP)組合上執行指令:
    iptables -t nat -A PREROUTING -p <tcp|udp> -d <vip> --dport <port> -j REDIRECT
    這指令會讓真實伺服器處理流向 VIP 與連接埠的封包。
  2. 在每台真實伺服器上儲存配置:
    # service iptables save
    # chkconfig --level 2345 iptables on
    上述指令會讓系統在開機時重新載入 iptables 配置 — 在網路啟動之前。

3.3. 把配置放在一起

決定要使用哪種前置路由方法後,硬體應該要透過網路連在一起。

重要

LVS 路由器的介面裝置必須配置好,存取同樣的網路。例如如果 eth0 連接到公開網路,而 eth1 連接到私有網路,那麼 backup LVS 路由器的同樣裝置就必須連上同樣的網路。
同時,開機時出現的第一個介面的閘道器會加入路由表,列在之後出現的其它介面之閘道器會被忽略。這在配置真實伺服器時,尤其重要。
在連上所有硬體之後,請配置主 LVS 與 backup LVS 的網路介面。這可以使用圖形界面的應用程式(例如 system-config-network)來修改,或透過手動編輯網路 script 來達成。欲知更多使用 system-config-network 來新增裝置的詳情,請參閱《Red Hat Enterprise Linux 建置指南網路配置》一章。在本章的其它地方,修改網路介面的範例都是手動完成,或是透過 Piranha Configuration Tool 進行。

3.3.1. Load Balancer 外掛程式的一般網路提示

在使用 Piranha Configuration Tool 配置 Load Balancer 外掛程式之前,請先配置 LVS 路由器上的公開、私有網路之真實 IP 位址。每個拓樸的章節都會提供網路的範例,但需要您輸入實際的網路位址。以下是啟動網路介面或檢查網路介面之狀態的一些有用指令。
啟動真實網路介面卡
要啟動真實網路介面卡,請以 root 身份使用以下指令,並以實際的介面卡數字(eth0eth1)取代 N
/sbin/ifup ethN

警告

請「不要」使用 ifup script 來啟動任何使用 Piranha Configuration Tool 配置的浮動 IP 位址(eth0:1eth1:1)。請使用 service 指令來啟動 pulse(詳情請見〈節 4.8, “啟動 Load Balancer 外掛程式”〉)。
停用真實網路介面卡
要停用真實網路介面卡,請以 root 身份使用以下指令,並以實際的介面卡數字(eth0eth1)取代 N
/sbin/ifdown ethN
檢查網路介面卡的狀態
如果任何時候您想要檢查網路介面的狀態,請輸入:
/sbin/ifconfig
要檢視電腦的路由表,請執行以下指令:
/sbin/route

3.3.1.1. 虛擬 IP 位址的障礙排除

在 active LVS 主機因故障而自動備援到待命主機時,可能會遇到問題。備援時,待命主機的所有虛擬 IP 位址可能沒有啟動。這問題也可能發生在待命主機停止服務、主要主機啟動時。只有當 pulse 服務手動重新啟動時,所有虛擬 IP 位址才會啟動。
要暫時解決這問題,請以 root 身份執行以下指令:

echo 1 > /proc/sys/net/ipv4/conf/all/promote_secondaries
請注意,這只會「暫時」解決這問題。系統重新開機之後,這指令的效用將不復存在。
要永久解決這問題,請開啟 /etc/sysctl.conf 檔案,並新增以下一行:
net.ipv4.conf.all.promote_secondaries = 1

3.4. 多連接埠與 Load Balancer 外掛程式

建立多連接埠的 Load Balancer 外掛程式服務時,任何拓樸下的 LVS 路由器都需要額外的配置。多連接埠服務可以用人工方式創見,方法是透過使用防火牆標記將不同、但相關的通訊協定(例如 HTTP 的 80 連接埠與 HTTPS 的 443 連接埠)放在一起,或當 Load Balancer 外掛程式與真的多連接埠通訊協定(例如 FTP)使用時。不管是哪一種情況,LVS 路由器使用防火牆標記來辨識封包雖然是向不同的連接埠而去,但因為有著同樣的防火牆標記,因此處理方式是一樣的。同時,與持續性相結合時,只要連線處於持續性參數所指定的時間內,防火牆標記會確保來自用戶端機器的連線會導向到同樣的主機。欲知在虛擬伺服器上指定持續性的資訊,請參閱〈節 4.6.1, “「虛擬伺服器」子區段”〉。
不幸的是,用來平衡真實伺服器負載的機制 — IPVS — 會辨識出指定給某個封包的防火牆標記,但自己無法指定防火牆標記。「指定」防火牆標記的工作必須由網路封包篩選程式,亦即 iptables 來進行,而非 Piranha Configuration Tool

3.4.1. 指定防火牆標記

要指定防火牆標記給連往某個特定連接埠的封包,管理者必須使用 iptables
本節的範例描述如何處理 HTTP 與 HTTPS;然而,FTP 是另一個常見的、叢集化的多連接埠通訊協定。如果 Load Balancer 外掛程式用於 FTP 服務上,請參閱〈節 3.5, “配置 FTP”〉以得知配置詳情。
使用防火牆標記的基本規則,是每個在 Piranha Configuration Tool 中使用防火牆標記的每個通訊協定,都有相對應的 iptables 規則,指定標記到網路封包上。
在建立網路封包篩選規則之前,請確定沒有其它規則。要確定這問題,請以 root 身份在終端機中輸入:
/sbin/service iptables status
如果 iptables 不在執行中,終端機會立即出現提示符號。
如果 iptables 處於啟用狀態,那麼系統會顯示一連串的規則。如果出現規則的話,請輸入以下指令:
/sbin/service iptables stop
如果現有的規則很重要,請檢查 /etc/sysconfig/iptables 的內容,並在進行下一步之前,複製任何值得保存的規則到安全的地方。
以下是指定到同樣防火牆標記(80)到向內的交通、目的地為浮動 IP 位址 n.n.n.n(連接埠 80 與 443)的規則。
/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 -m multiport --dports 80,443 -j MARK --set-mark 80
欲知如何指定 VIP 到公開網路介面的指示,請參閱〈節 4.6.1, “「虛擬伺服器」子區段”〉。同時請注意,您必須以 root 身份登入,並在第一次發出規則前載入 iptables 模組。
在上述 iptables 指令中,n.n.n.n 是您 HTTP 與 HTTPS 虛擬伺服器的浮動 IP 位址。這些指令能指定任何送往 VIP、特定連接埠、且擁有防火牆標記 80 的網路交通,接下來會由 IPVS 所辨識、轉送。

警告

上述指令會立即生效,但系統重新開機後就會失效。要確保重新開機後,網路封包篩選設定依然有效,請參閱〈節 3.6, “儲存網路封包篩選設定”〉。

3.5. 配置 FTP

FTP(檔案傳輸通訊協定,File Transport Protocol)是老舊且複雜的多通訊埠通訊協定,對 Load Balancer 外掛程式的環境來說,是項挑戰。要了解這項挑戰的本質,我們必須先了解 FTP 運作時的幾項關鍵。

3.5.1. FTP 如何運作

大部分伺服器與用戶端之間的關係,是用戶端機器會在特定連接埠上,開啟與伺服器之間的連線,然後伺服器會在該連接埠上回應用戶端。當 FTP 用戶端連上 FTP 伺服器時,會透過連接埠 21 開啟連線。然後「用戶端」會告訴 FTP 的「伺服器」端,要以「主動」(active)或「被動」(passive)方式來連接。此處用戶端選擇的連接方式會決定伺服器回應的方式、以及接下來要使用哪些連接埠。
兩種資料連線方式是:
主動連線
建立主動連線後,「伺服器」會開啟通往用戶端的資料連線,連接埠從 20 改為用戶端上的高端連接埠。所有來自伺服器的資料都會通過此連線傳遞。
被動連線
建立被動連線後,「用戶端」會要求 FTP 伺服器建立一個被動連線通訊埠,這可以是 10,000 以上的任何連接埠。伺服器接下來會綁定這個高端連接埠給這個特定的 session 使用,並將這連接埠號傳回給用戶端。然後用戶端會開啟新的綁定連接埠用以傳遞資料。用戶端要求的每個資料都會開啟新的資料連線。現今從伺服器要求資料時,FTP 用戶端多半採取被動連線。

注意

用戶端」— 而非伺服器端 — 會決定連線類型。這表示要有效地將 FTP 叢集化,您必須配置 LVS 路由器處理主動與被動連線。
FTP 這種用戶端與伺服器之間的關係可能會開啟大量 Piranha Configuration Tool 與 IPVS 所不知道的連接埠。

3.5.2. 對 Load Balancer 外掛程式路由的影響

IPVS 封包轉送只會根據能辨識的連接埠號或防火牆標記,允許連線進出叢集。如果叢集外的用戶端試圖開啟 IPVS 並未配置的連接埠,IPVS 就會中斷此連線。同樣地,如果真實伺服器試著開啟 IPVS 所不知道的連線,向外連至網際網路,IPVS 也會中斷此連線。這表示「所有」來自網際網路的 FTP 連線都「必須」擁有同樣的防火牆標記,同時所有來自 FTP 伺服器的連線都「必須」使用網路封包篩選規則,適當地轉送到網際網路上。

注意

要啟用被動 FTP 連線,請確定您已經載入了 ip_vs_ftp kernel 模組,方法是在命令列中以 root 身份執行 modprobe ip_vs_ftp

3.5.3. 建立網路封包篩選規則

在為 FTP 指定任何 iptables 規則之前,請查閱〈節 3.4.1, “指定防火牆標記”〉中關於多連接埠服務、以及檢查現有網路封包篩選規則的技巧。
以下是指定同樣防火牆標記(21)給 FTP 交通的規則。要讓這些規則運作無誤,您也必須使用 Piranha Configuration ToolVIRTUAL SERVER 一節,在「防火牆標記」欄位中,將虛擬伺服器的連接埠設為 21。詳情請見〈節 4.6.1, “「虛擬伺服器」子區段”〉。

3.5.3.1. 主動連線的規則

主動連線的規則會通知 kernel 接受來自「內部」浮動 IP 位址的 20 號連接埠(FTP 資料埠)的連線,並加以轉送。
以下 iptables 指令能允許 LVS 路由器接受來自真實伺服器、且 IPVS 所不知道的向外連線:
/sbin/iptables -t nat -A POSTROUTING -p tcp -s n.n.n.0/24 --sport 20 -j MASQUERADE
iptables 指令中,請以定義於 Piranha Configuration Tool 的「GLOBAL SETTINGS」頁框中的 NAT 網路卡之內部網路介面的浮動 IP 之前三碼來替換 n.n.n

3.5.3.2. 被動連線的規則

被動連線的規則會指定正確的防火牆標記給來自網際網路、連往服務的浮動 IP 之連線到高端連接埠 — 10,000 到 20,000 之間。

警告

如果您想限制被動連線的連接埠範圍,就必須配置 VSFTP 伺服器使用相對應的範圍。這可以透過加入以下幾行到 /etc/vsftpd.conf 檔案中來達成:
pasv_min_port=10000
pasv_max_port=20000
請勿設定 pasv_address 來覆寫真實 FTP 伺服器位址,因為這會由 LVS 更新為虛擬 IP 位址。
欲知如何配置其它 FTP 伺服器,請查閱該產品的文件。
這範圍應該適用大部分情況,然而,您可以擴大這範圍,納入所有可用的非安全性連接埠,方法是將下述指令的 10000:20000 改為 1024:65535
以下 iptables 指令可以指定任何送往浮動 IP、且擁有防火牆標記 21 的網路交通,接下來會由 IPVS 辨識、轉送。
/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp -d n.n.n.n/32 --dport 10000:20000 -j MARK --set-mark 21
iptables 指令中,請以定義於 Piranha Configuration Tool 的「VIRTUAL SERVER」一節中的 FTP 虛擬伺服器之浮動 IP 位址取代 n.n.n.n

警告

上述指令會立即生效,但系統重新開機後就會失效。要確保重新開機後,網路封包篩選設定依然有效,請參閱〈節 3.6, “儲存網路封包篩選設定”〉。
最後,請確定每個 runlevel 都啟動了正確的服務。詳情起參閱〈節 2.1, “在 LVS 路由器上配置服務”〉。

3.6. 儲存網路封包篩選設定

配置好網路封包篩選規則之後,請儲存設定,好在重新開機之後依然適用。如使用的是 iptables,請輸入以下指令:
/sbin/service iptables save
這會將設定儲存在 /etc/sysconfig/iptables 中,開機時會重新載入。
這檔案寫入後,您就可以使用 /sbin/service 指令來啟動、停止、並檢查 iptables/sbin/service 會自動載入正確的模組。欲知如何使用 /sbin/service 指令,請參閱〈節 2.3, “啟用 Piranha Configuration Tool 服務”〉。
最後,請確定每個 runlevel 都啟動了正確的服務。詳情起參閱〈節 2.1, “在 LVS 路由器上配置服務”〉。
下一章會解釋如何使用 Piranha Configuration Tool 來配置 LVS 路由器,並描述啟動Load Balancer 外掛程式的所需步驟。

章 4. 以 Piranha Configuration Tool 配置 Load Balancer 外掛程式

Piranha Configuration Tool 提供了一項結構性的方式,為 Load Balancer 外掛程式建立必要的配置檔案 — /etc/sysconfig/ha/lvs.cf。本章詳述了 Piranha Configuration Tool 的基本操作,和在配置完成時,如何啟用 Load Balancer 外掛程式。

重要

Load Balancer 外掛程式的配置檔案遵循了嚴格的格式規則。Piranha Configuration Tool 是用來避免在 lvs.cf 中發生語法錯誤的最佳方式,這可避免軟體失效的情況發生。

4.1. 必要的軟體

piranha-gui 服務必須在主要的 LVS 路由器上執行,才能使用 Piranha Configuration Tool。若要配置 Load Balancer 外掛程式,您至少需要一個純文字的網站瀏覽器,例如 links。若您要由另一部機器存取 LVS 路由器,您亦需要以 root 身份透過 ssh 連至主要的 LVS 路由器上。
當配置 LVS 路由器時,建議在終端機視窗中維持一項並存的 ssh 連線。此連線可提供一項安全的方式,以重新啟用 pulse 和其它服務、配置網路封包篩選器,並在進行疑難排解時監控 /var/log/messages
接下來的四個部分將詳述 Piranha Configuration Tool 的各個配置網頁,並提供使用它來設定 Load Balancer 外掛程式的相關指示。

4.2. 登入 Piranha Configuration Tool

當配置 Load Balancer 外掛程式時,您應總是先以 Piranha Configuration Tool 配置主要路由器。若要這麼做,請確認 piranha-gui 服務是否有在運作,並已設置了一組管理員密碼(如〈節 2.2, “為 Piranha Configuration Tool 設定一組密碼”〉中所述)。
若您要本機存取此機器,您可在一個網站瀏覽器中開啟 http://localhost:3636,以存取 Piranha Configuration Tool。否則,請輸入伺服器的主機名稱或是真實 IP 位址,並在後方加上 :3636。當瀏覽器連上時,您將會看見〈圖形 4.1, “歡迎面板”〉中顯示的畫面。
歡迎面板

圖形 4.1. 歡迎面板

請按下「登入」按鈕,在「使用者名稱」欄位中輸入 piranha,並在「密碼」欄位中輸入您建立的管理員密碼。
Piranha Configuration Tool 是以四個主要畫面或面板所構成的。此外,「虛擬伺服器」面板包含了四個「子區段」。登入畫面之後所出現的第一個面板為「控制/監控」(CONTROL/MONITORING)面板。

4.3. 控制/監控

控制/監控」面板提供了 Load Balancer 外掛程式的受限 runtime 狀態。它顯示了 pulse daemon 的狀態、LVS 路由表,以及 LVS 所產生的 nanny 程序。

注意

直到您實際啟用 Load Balancer 外掛程式為止,「CURRENT LVS ROUTING TABLE」和「CURRENT LVS PROCESSES」欄位將維持空白,如〈節 4.8, “啟動 Load Balancer 外掛程式”〉中所示。
「控制/監控」面板

圖形 4.2. 「控制/監控」面板

自動更新
顯示在此網頁上的狀態,能依照使用者所配置的時間間隔,自動更新。若要啟用這項功能,請點選「自動更新」核取方塊,並在「更新頻率(秒)」文字方塊中設定您希望使用的更新頻率(預設值為 10 秒)。
不建議您將自動更新頻率設定為小於 10 秒鐘。這麼做可能會使重新配置「自動更新」頻率變的困難,因為網頁的更新頻率將會太高。若您遇上了此問題,點選另一個面板並返回點選「控制/監控」即可。
自動更新」功能並不能搭配所有瀏覽器使用,比方說 Mozilla
馬上更新資訊
您可藉由點選此按鈕,以手動式更新狀態資訊。
更改密碼
點選此按鈕將會帶領您至一個協助畫面中,其中包含了如何更改 Piranha Configuration Tool 管理員密碼的相關資訊。

4.4. 全域設定

您可透過「全域設定」面板,為主要 LVS 路由器的公共與私有網路介面卡定義網路詳細資料。
「全域設定」面板

圖形 4.3. 「全域設定」面板

此面板的上半部分用來設定主要 LVS 路由器的公共與私有網路介面卡。這些是在〈節 3.1.1, “在 Load Balancer 外掛程式搭配 NAT 情境下,配置網路介面”〉中,已配置的介面卡。
主要伺服器公共 IP
請在此欄位中輸入主要 LVS 節點的可公共路由真實 IP 位址。
主要伺服器私有 IP
請輸入主要 LVS 節點上,額外網路介面卡的真實 IP 位址。此位址會被使用來作為備份路由器的專屬額外活動訊號頻道,並且無需與指定於〈節 3.1.1, “在 Load Balancer 外掛程式搭配 NAT 情境下,配置網路介面”〉中的真實私有 IP 相聯。您可將此欄位保留為空白,不過這麼做即代表備份 LVS 路由器將沒有可用的額外活動訊號頻道,因此則可能會產生單點失效的情況。

注意

進行「直接路由」配置時無需私有的 IP 位址,因為所有真實伺服器以及 LVS 路由器皆共享相同的虛擬 IP 位址,因此也應擁有相同的 IP 路由配置。

注意

主要 LVS 路由器的私有 IP,可在任何接受 TCP/IP 的介面卡上配置,無論是乙太網路控制卡或是序列埠。
TCP 逾時
輸入 TCP session 逾時前所需經過的時間(秒)。預設的逾時值為 0。
TCP Fin 逾時
輸入 TCP session 在接收到 FIN 封包之後,逾時前所需經過的時間(秒)。預設的逾時值為 0。
UDP 逾時
輸入 UDP session 逾時前所需經過的時間(秒)。預設的逾時值為 0。
使用網路類型
請點選「NAT」按鈕以選擇 NAT 路由。
請點選「直接路由」按鈕以選擇直接路由。
接下來的三個欄位主要針對連至真實伺服器私有網路的 NAT 路由器虛擬網路介面卡。這些欄位「」適用於直接路由的網路類型。
NAT 路由器 IP
在此文字欄位中輸入私有的浮動 IP。此浮動 IP 應被使用來作為真實伺服器的網路閘道。
NAT 路由器子網路遮罩
若 NAT 路由器的浮動 IP 需要特定網路遮罩的話,請由下拉式選單中進行選擇。
NAT 路由器裝置
使用此文字欄位來定義網路介面卡的裝置名稱,以取得浮動 IP 位址,例如 eth1:1

注意

您應為 NAT 浮動 IP 位址與連至私有網路的乙太網路介面卡,建立一項別名。在此範例中,私有網路位於 eth1 介面卡上,因此 eth1:1 為浮動 IP 位址。

警告

在完成了此網頁之後,請按下「接受」按鈕,以確保當您選擇新的面板時,不會失去您所進行的變更。

4.5. 冗餘

冗餘」(REDUNDANCY)面板能讓您配置備份的 LVS 路由器節點,並設置各項活動訊號的監控選項。

注意

您第一次進入此畫面時,它會顯示一項"未啟用"「備份」的狀態,以及一個「啟用」按鈕。若要配置備份的 LVS 路由器,請按下「啟用」按鈕,以使畫面與〈圖形 4.4, “「備援」面板”〉相符。
「備援」面板

圖形 4.4. 「備援」面板

備援伺服器公共 IP
輸入備份 LVS 路由器節點的公共真實 IP 位址。
備援伺服器私有 IP
在此文字欄位中輸入備份節點的私有真實 IP 位址。
若您看不見「備援伺服器私有 IP」欄位,請返回「全域設定」面板,並輸入一組「主要伺服器私有 IP」位址,並按下「接受」。
面板的下個部分將用來配置活動訊號頻道,它會被備份節點用來監控主要節點,查看是否有發生任何錯誤。
活動訊號間隔(秒)
此欄位可用來設置活動訊號之間的秒數 — 備份節點檢查主要 LVS 節點運作狀態的時間間隔。
在指定時間(秒)經過後假定失效
若主要 LVS 節點在經過了這段時間(秒)後依然無反映,則備份 LVS 路由器將會啟動容錯移轉機制。
活動訊號使用的連接埠
此欄位可設置活動訊號使用哪個連接埠來與主要 LVS 節點進行通訊。若將此欄位保留空白的話,預設值將會是 539。
面板的最後部分可用來啟用和配置選用性的 Sync Daemon(同步 Daemon)以及其諸多選項。Sync Daemon 可啟用 active 和 backup LVS 路由器,以同步 TCP 的狀態。當啟用時,active 路由器會透過網路傳送一項訊息 multicast(包含一項可配置的同步化 ID,亦稱為 syncid)至接收方的 backup 路由器上。

警告

Red Hat Enterprise Linux 6.5 推出了一個同步資訊的通訊協定格式,用來防止備份節點的持續連線之提早逾時導致失效時的不一致狀態,進而導致企業服務中斷。
這個新通訊協定格式與 Red Hat Enterprise Linux 6.4 以前的版本、或是 kernel-2.6.32-406.el6 之前的 kernel 版本,並不相容。請在升級 Red Hat Enterprise Linux 6.5 節點前,先升級備份節點。
要持續使用舊格式來同步訊息(例如您想要在升級備份節點前先升級主節點),請以 root 身份執行 echo 指令,設定 sync_version 的值,如下所示:
echo 0 > /proc/sys/net/ipv4/vs/sync_version
使用 Sync Daemon
若您希望啟用 Sync Daemon,請選取其核取方塊。
Sync Daemon 介面
Sync daemon 將會透過此網路介面卡傳送/接收其 multicast 訊息。此欄位中的預設介面卡為 eth0
Sync daemon id
此欄位會為 multicast sync 訊息設置一組辨識符號(ID)。支援的值為 0 至 255,若欄位保留空白的話,預設值將會是 0。

警告

在此面板中進行了變更後,請記得按下「接受」按鈕,以確保您在選擇新面板時,不會遺失已進行的變更。

4.6. 虛擬伺服器

虛擬伺服器」面板會顯示各個目前已定義之虛擬伺服器的相關資訊。各個表格項目皆顯示了虛擬伺服器的狀態、伺服器名稱、指定給伺服器的虛擬 IP、虛擬 IP 的網路遮罩、服務用來進行通訊的連接埠號、使用的協定,以及虛擬裝置介面卡。
「虛擬伺服器」面板

圖形 4.5. 「虛擬伺服器」面板

各個顯示在「虛擬伺服器」面板中的伺服器,皆能在接下來的畫面或是「子區段」中進行配置。
若要新增一項服務,請按下「新增」按鈕。若要移除一項服務,請點選虛擬伺服器旁的選取鈕,並按下「刪除」按鈕。
若要啟用或停用表格中的虛擬伺服器,請點選其選取鈕,並按下「停用/啟用」按鈕。
在新增了虛擬伺服器後,若希望進行編輯,您可藉由點選它左方的選取鈕,並按下「編輯」按鈕,以顯示「虛擬伺服器」的子區段。

4.6.1. 「虛擬伺服器」子區段

顯示在〈圖形 4.6, “「虛擬伺服器」子區段”〉中的「虛擬伺服器」子區段面板能讓您配置個別的虛擬伺服器。特別與此虛擬伺服器相聯的子區段之連結,位於網頁的上方。不過在配置與此虛擬伺服器相聯的任何子區段之前,請完成此網頁並按下「接受」按鈕。
「虛擬伺服器」子區段

圖形 4.6. 「虛擬伺服器」子區段

名稱
請輸入一組具描述性的名稱,以用來辨識虛擬伺服器。這組名稱「不是」機器的主機名稱,因此請使用清晰易懂的名稱。您甚至可參照虛擬伺服器所使用的協定,例如 HTTP。
應用程式連接埠
輸入服務應用程式將會監聽的連接埠號。因為此範例是針對於 HTTP 服務,因此我們使用了連接埠 80。
協定
在下拉式選單中選擇 UDP 或是 TCP。網站伺服器一般會透過 TCP 協定來進行通訊,因此我們在以上範例中選擇了 TCP。
虛擬 IP 位址
請在此文字欄位中輸入虛擬伺服器的浮動 IP 位址。
虛擬 IP 網路遮罩
以下拉式選單為此虛擬伺服器設定網路遮罩。
防火牆標記
除非您要綁定多連接埠的協定,或是為個別或相聯的協定建立一個多連接埠的虛擬伺服器,否則「請勿」在此欄位中輸入防火牆標記的整數值。在此範例中,以上虛擬伺服器含有一組值為 80 的「防火牆標記」,因為我們要使用值為 80 的防火牆標記將連線綁定至連接埠 80 上的 HTTP,以及連接埠 443 上的 HTTPS。當和「持續性」(persistence)結合時,此技巧將可確保存取不安全與安全網站的使用者,會被路由轉向至相同的真實伺服器上,並保留狀態。

警告

在此欄位中輸入防火牆標記,可讓 IPVS 確保含有此防火牆標記的封包,會被以相同的方式處理,不過您必須在 Piranha Configuration Tool 外進行額外的配置,以實際指定防火牆標記。欲取得有關於建立多連接埠服務的相關資訊,請參閱〈節 3.4, “多連接埠與 Load Balancer 外掛程式”〉,欲建立高可用性的 FTP 虛擬伺服器,請參閱〈節 3.5, “配置 FTP”〉。
裝置
請輸入您希望定義了「虛擬 IP 位址」欄位的浮動 IP 位址綁定至的網路裝置之名稱。
您應為公共浮動 IP 位址與連至公共網路的乙太網路介面卡,建立一項別名。在此範例中,公共網路位於 eth0 介面卡上,因此應輸入 eth0:1 為裝置名稱。
重新加入的時間
輸入一個定義時間長度(秒)的整數值,active LVS 路由器在經過了這段時間後,便會嘗試重新啟用真實伺服器,並將其加回集區中。
服務逾時
輸入一個定義時間長度(秒)的整數值,這段時間經過後,真實伺服器便會被視為完全失效,並由集區中移除。
靜默伺服器
選擇「靜默伺服器」(Quiesce server)選取鈕時,真實伺服器若無法使用,其權重會設為 0。這會馬上停用真實伺服器。如果之後真實伺服器變為可用,真實伺服器就會被重新啟用,並回復到原先的權重。如果停用了「靜默伺服器」,無法使用的真實伺服器就會從伺服器表中移除;之後若此伺服器又變為可用,就會被加入虛擬伺服器列表中。
載入監控工具
LVS 路由器可透過 rupruptime 監控各個真實伺服器上的負載。若您由下拉式選單中選擇了 rup,各個真實伺服器皆必須執行 rstatd 服務。若您選擇了 ruptime 的話,各個真實伺服器則必須執行 rwhod 服務。

警告

負載監控與負載平衡「不同」,並且當與加權排程演算法併用時,可能會造成難以預測的排程行為。此外,若您欲使用負載監控,真實伺服器必須要是 Linux 機器。
排程
請由下拉式選單中選擇您欲使用的排程演算法。預設值為 Weighted least-connection(加權最少連線數)。欲取得更多有關於排程演算法上的相關資訊,請參閱〈節 1.3.1, “排程演算法”〉。
持續性
如果在客戶端交易期間,管理者需要持續連上虛擬伺服器,請在這文字欄位中,輸入連線逾時之前的可允許非動作中之秒數。

重要

如果您在上述的「防火牆標誌」欄位中輸入了值,那麼您也應該輸入持續性的值。同時,請確定如果您同時使用防火牆標誌與持續值,那麼持續值會與每台擁有防火牆標記的虛擬伺服器相同。欲知持續值與防火牆標記的更多資訊,請參閱〈節 1.5, “Persistence 和 Firewall Marks”〉。
持續性網路遮罩
要限制持續性用在特定的子網路上,請從下拉式選單中適當的網路遮罩。

注意

在防火牆標記出現之前,由子網路來限制持續性是透過較原始的綁定連線方式來進行。現在,建議使用者透過防火牆標記來達成一樣的結果。

警告

在此面板中進行了變更後,請記得按下「接受」按鈕,以確保您在選擇新面板時,不會遺失已進行的任何變更。

4.6.2. REAL SERVER 子畫面

按下面板上方的「REAL SERVER」(真實伺服器),會顯示「EDIT REAL SERVER」(編輯真實伺服器)子畫面。它顯示了某個特定虛擬服務的真實伺服器狀態。
REAL SERVER 子畫面

圖形 4.7. REAL SERVER 子畫面

要新增伺服器,請按下「新增」按鈕。要刪除現有伺服器,請選擇該伺服器旁的收音機按鈕,然後點選「刪除」按鈕。請點選「編輯」按鈕,載入「編輯真實伺服器」頁框,如〈圖形 4.8, “「真實伺服器」配置頁框”〉所示。
「真實伺服器」配置頁框

圖形 4.8. 「真實伺服器」配置頁框

這面板包含三個可輸入欄位:
名稱
真實伺服器的描述性語言。

注意

這個名稱「不是」電腦的主機名稱,因此說明詳盡些,可以讓它更容易被辨識。
位址
真實伺服器的 IP 位址。由於聆聽的連接埠已經在相關的虛擬伺服器指定,因此這裡不需要加入連接埠號。
權重
這個整數值是主機相對於其他主機的能力。這個值可以隨意設置,但以相對於集區中的其它真實伺服器之百分比來設定,是個好主意。欲知伺服器權重的更多資訊,請參閱〈節 1.3.2, “伺服器權重與排程”〉。

警告

在此面板中進行了變更後,請記得按下「接受」按鈕,以確保您在選擇新面板時,不會遺失已進行的變更。

4.6.3. 「編輯監控程序檔」子畫面

按下頁面上方的「監控程序檔」連結。「編輯監控程序檔」能讓管理者指定要發出(或預期收到)的文字,來檢查虛擬伺服器的服務在每個真實伺服器上都執行無誤。這部份也是管理者可以自訂程序檔,以檢查服務需要動態變動資料的地方。
「編輯監控程序檔」子畫面

圖形 4.9. 「編輯監控程序檔」子畫面

傳送程式
要進一步驗證服務,您可以使用這個欄位來指定檢查服務的程序檔之路徑。這功能在需要動態變更資料,例如 HTTPS 或 SSL 時,特別有用。
要使用這項功能,您必須撰寫一個程序檔,讓它傳回文字訊息,將其設定為可執行,同時在「發送程式」欄位中輸入路徑。

注意

要確保真實伺服器集區中的每台伺服器都會被檢查到,請在「發送程式」欄位中的程序檔路徑之後,使用特別的 token %h。這 token 會以每台真實伺服器的 IP 位址所取代,因為這程序檔會由 nanny daemon 所呼叫。
以下是撰寫檢查外部伺服器的程序檔之範例:
#!/bin/sh

TEST=`dig -t soa example.com @$1 | grep -c dns.example.com

if [ $TEST != "1" ]; then
	echo "OK
else
	echo "FAIL"
fi

注意

如果您在「發送程式」(Sending Program)欄位裡輸入外部程式,那麼就可以忽略「發送」(Send)欄位。
發送
請輸入 nanny daemon 發給每個真實伺服器的訊息。預設上,這個發送欄位會由 HTTP 來完成。您可以根據需要修改這個值。如果這個欄位留白,那麼 nanny 會試著開啟連接埠,成功開啟的話會假定該服務是在執行中。
這欄位只允許一個發送,也只能包含可列印的 ASCII 字元,以及以下逸出字元:
  • \n 是換行。
  • \r 是回到第一個字元。
  • \t 相當於按下「Tab」鍵。
  • \ 是逸出下一個緊跟著的字元。
預期
輸入伺服器正常運作時,應傳回的文字回應。如果您自行撰寫了發送程式,請輸入您自訂的成功回應。

注意

要了解特定服務要發送的東西,您可以開啟 telnet 連線至真實伺服器的連接埠,看看會傳回什麼。例如 FTP 會在連線時回報 220,因此您可以在「發送」欄位輸入 quit,在「預期」欄位輸入 220

警告

在此面板中進行了變更後,請記得按下「接受」按鈕,以確保您在選擇新面板時,不會遺失已進行的變更。
使用 Piranha Configuration Tool 配置虛擬伺服器之後,您必須複製特定的配置檔到備用的 LVS 路由器上。詳情請參閱〈節 4.7, “同步配置檔案”〉。

4.7. 同步配置檔案

配置了主要的 LVS 路由器後,在您要啟用 Load Balancer 外掛程式之前,您必須先複製數個配置檔案至備份的 LVS 路由器中。
這些檔案包含了:
  • /etc/sysconfig/ha/lvs.cf — LVS 路由器的配置檔案。
  • /etc/sysctl — 除了數項功能之外,還能將 kernel 中的封包轉送啟用的配置檔案。
  • /etc/sysconfig/iptables — 若您要使用防火牆標記的話,您應根據您所使用的網路封包篩選器,同步其中一個檔案。

重要

當您使用 Piranha Configuration Tool 來配置 Load Balancer 外掛程式時,/etc/sysctl.conf/etc/sysconfig/iptables 檔案「不會」受到更改。

4.7.1. 同步 lvs.cf

每當 LVS 配置檔案 /etc/sysconfig/ha/lvs.cf 被建立或更新時,您都必須將它複製至備份的 LVS 路由器節點上。

警告

active 和 backup LVS 路由器節點兩者皆必須擁有相同的 lvs.cf 檔案。LVS 路由器節點之間的 LVS 配置若不相符,可能會導致於容錯移轉無法進行。
最好的方法是使用 scp 指令。

重要

要使用 scp,就必須在備用路由器上執行 sshd。欲知如何妥善地在 LVS 路由器上配置所需服務,請參閱〈節 2.1, “在 LVS 路由器上配置服務”〉。
在主 LVS 路由器上,以 root 身份執行以下指令,好在路由節點間同步 lvs.cf
scp /etc/sysconfig/ha/lvs.cf n.n.n.n:/etc/sysconfig/ha/lvs.cf
在這指令中,請以備用 LVS 路由器的真實 IP 位址取代 n.n.n.n

4.7.2. 同步 sysctl

在大部分情況下,sysctl 檔案只需修改一次。這檔案會在開機期間被讀取,並告訴 kernel 開啟封包轉送功能。

重要

如果您不確定 kernel 是否啟用了封包轉送功能,請參閱〈節 2.5, “開啟封包轉送”〉,以了解如何檢查並視需要啟動這項重要功能。

4.7.3. 同步網路封包篩選規則

如果您使用了 iptables,就需要將配置檔同步至 LVS 路由器上。
如果您修改了任何網路封包篩選規則,請在主 LVS 路由器上以 root 身份輸入以下指令:
scp /etc/sysconfig/iptables n.n.n.n:/etc/sysconfig/
在這指令中,請以備用 LVS 路由器的真實 IP 位址取代 n.n.n.n
接下來請開啟 ssh 連線至備用路由器,或以 root 身份登入該機器,並輸入以下指令:
/sbin/service iptables restart
一旦您複製這些檔案至備用路由器,並啟動需要的服務(欲知啟動服務的詳情,請參閱〈節 2.1, “在 LVS 路由器上配置服務”〉)之後,就可以啟動 Load Balancer 外掛程式。

4.8. 啟動 Load Balancer 外掛程式

要啟動 Load Balancer 外掛程式,最好能同時開啟兩個 root 終端機,或透過 root 使用 ssh 連至主 LVS 路由器。
在一組終端機上,用以下指令監控 kernel 的日誌檔:
tail -f /var/log/messages
然後在另一組終端機上,輸入以下指令,啟動 Load Balancer 外掛程式:
/sbin/service pulse start
請觀察 kernel 日誌記錄的 pulse 服務之啟動過程。當您看到以下訊息時,表示 pulse daemon 已經正常啟動:
gratuitous lvs arps finished
要停止監控 /var/log/messages,請輸入 Ctrl+c
從現在開始,主 LVS 路由器也會是 active LVS 路由器。雖然從現在開始,您可以開始使用 Load Balancer 外掛程式,但您應該在讓 Load Balancer 外掛程式開始服務之前,先啟動備用 LVS 路由器。要達成此目標,只要重複上述用於備用 LVS 路由器節點的過程即可。
完成此最後步驟後,Load Balancer 外掛程式就會啟用,並處於執行狀態。

附錄 A. 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式

您可搭配 High Availability(高可用性)外掛程式使用 Load Balancer 外掛程式,以建置高可用性的電子商務網站,進而提供負載平衡、資料完整性、以及應用程式的可用性。
圖形 A.1, “搭配 High Availability 外掛程式使用 Load Balancer 外掛程式” 裡面顯示的配置代表一台電子商務網站,透過一組網址進行線上交易。用戶端透過此網址發出的需求會透過防火牆至 active LVS load-balancing 路由器,然後將需求轉送至網站伺服器組之一。High Availability 外掛程式的節點會將動態資料傳到網站伺服器,網站伺服器會將此資料轉送至發出需求的用戶端。
搭配 High Availability 外掛程式使用 Load Balancer 外掛程式

圖形 A.1. 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式

透過 Load Balancer 提供動態網頁內容需要三層配置(如 圖形 A.1, “搭配 High Availability 外掛程式使用 Load Balancer 外掛程式” 所示)。結合 Load Balancer 外掛程式與 High Availability 外掛程式可提供一台高整合性、不怕單點失效的電子商務網站。High Availability 外掛程式可以執行一組或一群高可用性的資料庫,讓網站伺服器群透過網路存取。
要提供動態內容需要三層配置。如果網站伺服器提供的是靜態網頁內容(包括少量、不常變動的資料),那麼兩層的 Load Balancer 外掛程式配置便足以應付;但此配置不適用於提供動態網頁內容的網站伺服器。動態內容可能包括產品的存貨數量、購買的申請單、或客戶的資料庫,這些會在網站伺服器上出現的內容都應該保持一致,讓使用者能存取到最新、最正確的資訊。
每一層提供了以下功能:
  • 第一層:LVS 路由器處理負載平衡,以分散網頁需求。
  • 第二層:網站伺服器組為需求提供服務。
  • 第三層:High Availability 外掛程式提供資料給網站伺服器。
在 Load Balancer 外掛程式的配置(如 圖形 A.1, “搭配 High Availability 外掛程式使用 Load Balancer 外掛程式” 所示),用戶端系統在網際網路上發出需求。為了安全理由,這些需求會透過防火牆進入網站伺服器,防火牆可以是足以擔任此一重任的 Linux 系統或專職的防火牆裝置。為了冗餘需求,您可以將防火牆裝置設為容錯配置。在防火牆之後是 LVS 路由器,提供負載平衡功能,可以配置為「active-standby」(啟用-待命)模式。active 負載平衡的路由器會將需求轉送至網站伺服器組。
每台網站伺服器可以獨立處理來自用戶端的 HTTP 需求,並將回應送回到用戶端。Load Balancer 外掛程式能在 LVS 路由器之後增加網站伺服器,讓使用者擴大網站的處理能力。除此之外,如果一台網站伺服器失效,您可以將之移除;Load Balancer 外掛程式會在剩下的網站伺服器中,繼續處理負載平衡。

附錄 B. 修訂記錄

修訂記錄
修訂 1-15.1Thu Apr 30 2015Chester Cheng
翻譯、校閱完成。
修訂 1-15Tue Dec 16 2014Steven Levine
更新以符合 RHEL 6 歡迎頁的排序功能。
修訂 1-13Thu Oct 9 2014Steven Levine
發行 Red Hat Enterprise Linux 6.6 GA
修訂 1-10Tue Nov 19 2013John Ha
Red Hat Enterprise Linux 6.5 GA 發行版
修訂 1-8Fri Sep 27 2013John Ha
Red Hat Enterprise Linux 6.5 Beta 發行版
修訂 1-4Wed Nov 28 2012John Ha
Red Hat Enterprise Linux 6.4 Beta 發行版
修訂 1-3Mon Jun 18 2012John Ha
Red Hat Enterprise Linux 6.3 GA 發行版
修訂 1-2Fri Dec 2 2011John Ha
發行 Red Hat Enterprise Linux 6.2 GA
修訂 1-1 Wed Nov 10 2010Paul Kennedy
Red Hat Enterprise Linux 6 文件初始發行版

索引

符號

/etc/sysconfig/ha/lvs.cf 檔案, /etc/sysconfig/ha/lvs.cf
元件
Load Balancer 外掛程式, Load Balancer 外掛程式元件
加權循環配置資源 (參見 工作排程,Load Balancer 外掛程式)
加權最少連線優先 (參見 工作排程,Load Balancer 外掛程式)
叢集
搭配 High Availability 外掛程式使用 Load Balancer 外掛程式, 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式
同步配置檔案, 同步配置檔案
多連接埠服務, 多連接埠與 Load Balancer 外掛程式
(另參見 Load Balancer 外掛程式)
安全性
Piranha Configuration Tool , 限制 Piranha Configuration Tool 的存取
封包轉送, 開啟封包轉送
(另參見 Load Balancer 外掛程式)
工作排程,Load Balancer 外掛程式, Load Balancer 外掛程式的排程概覽
循環配置資源 (參見 工作排程,Load Balancer 外掛程式)
意見, 意見
排程,工作(Load Balancer 外掛程式), Load Balancer 外掛程式的排程概覽
最少連線優先 (參見 工作排程,Load Balancer 外掛程式)
直接路由
與 arptables_jf, 直接路由與 arptables_jf
真實伺服器
配置服務, 在真實伺服器上配置服務
簡介, 簡介
其它 Red Hat Enterprise Linux 文件, 簡介
網路位址轉譯 (參見 NAT)
路由
Load Balancer 外掛程式的先決條件, 在 Load Balancer 外掛程式搭配 NAT 情境下,配置網路介面

F

FTP, 配置 FTP
(另參見 Load Balancer 外掛程式)

H

High Availability 外掛程式
搭配使用 Load Balancer 外掛程式, 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式
與 Load Balancer 外掛程式, 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式

I

iptables , 在 LVS 路由器上配置服務
ipvsadm 程式, ipvsadm

L

Load Balancer 外掛程式
/etc/sysconfig/ha/lvs.cf 檔案, /etc/sysconfig/ha/lvs.cf
ipvsadm 程式, ipvsadm
LVS 路由器
主要節點, Load Balancer 外掛程式初始配置
必要服務, 在 LVS 路由器上配置服務
配置服務, Load Balancer 外掛程式初始配置
nanny daemon, nanny
NAT 路由
需求,硬體, NAT Load Balancer 外掛程式網路
需求,網路, NAT Load Balancer 外掛程式網路
需求,軟體, NAT Load Balancer 外掛程式網路
Piranha Configuration Tool , Piranha Configuration Tool
pulse daemon, pulse
send_arp 程式, send_arp
三層式
Load Balancer 外掛程式, 三層式拓樸 Load Balancer 外掛程式配置
元件, Load Balancer 外掛程式元件
共享資料, 真實伺服器之間的資料複製與資料共享
初始配置, Load Balancer 外掛程式初始配置
同步配置檔案, 同步配置檔案
啟動 Load Balancer 外掛程式, 啟動 Load Balancer 外掛程式
多連接埠服務, 多連接埠與 Load Balancer 外掛程式
FTP, 配置 FTP
封包轉送, 開啟封包轉送
工作排程, Load Balancer 外掛程式的排程概覽
排程,工作, Load Balancer 外掛程式的排程概覽
搭配 High Availability 外掛程式使用 Load Balancer 外掛程式, 搭配 High Availability 外掛程式使用 Load Balancer 外掛程式
日期複製,真實伺服器, 真實伺服器之間的資料複製與資料共享
直接路由
與 arptables_jf, 直接路由與 arptables_jf
需求,硬體, 直接路由, 透過直接路由使用 Load Balancer 外掛程式
需求,網路, 直接路由, 透過直接路由使用 Load Balancer 外掛程式
需求,軟體, 直接路由, 透過直接路由使用 Load Balancer 外掛程式
路由方法
NAT, 路由法則
路由的先決條件, 在 Load Balancer 外掛程式搭配 NAT 情境下,配置網路介面
LVS
daemon, lvs
lvs daemon, lvs
NAT 路由
啟用, 在 LVS 路由器上啟用 NAT 路由設定
真實伺服器, Load Balancer 外掛程式總覽
總覽, Load Balancer 外掛程式總覽
lvs daemon, lvs

N

nanny daemon, nanny
NAT
啟用, 在 LVS 路由器上啟用 NAT 路由設定
路由方法,Load Balancer 外掛程式, 路由法則

S

send_arp 程式, send_arp
sshd 服務, 在 LVS 路由器上配置服務

法律聲明

Copyright © 2014 Red Hat, Inc.
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.