在pfsense的網關和伺服器中有兩種類型的負載平衡功能。網關負載平衡可以通過多個WAN連接配接分發Internet綁定的流量。伺服器負載平衡管理傳入流量,是以它利用多個内部伺服器進行負載配置設定和備援,伺服器負載平衡允許流量在多個内部伺服器之間配置設定,它最常用于Web伺服器和SMTP伺服器。下面我們就以執行個體來介紹伺服器負載平衡的設定。
下面介紹如何通過pfsense2.32配置Web伺服器的負載平衡。
伺服器負載平衡示例網絡環境
上圖為示例網絡環境。它由單個防火牆組成,使用其WAN IP位址池,DMZ段上有兩個Web伺服器。
導航到 Services > Load Balancer
單擊Pools 标簽
單擊 添加一個新的位址池
如圖所示,使用以下設定:
Name:
<code>WebServers</code>
Mode:
Load Balance
Description:
<code>Web server Pool</code>
Port:
<code>80</code>
Retry:
<code>5</code>
Pool Members:
添加兩個Web伺服器 (<code>10.6.0.11</code> 和<code>10.6.0.12</code>)
單擊Save
位址池配置
虛拟伺服器配置
單擊Virtual Servers标簽
單擊 添加一個新的虛拟伺服器
如圖所示,使用以下設定:
<code>WebVirtualServer</code>
<code>Web Server</code>
IP Address:
The firewall’s WAN IP address, <code>198.51.100.6</code>
Virtual Server Pool:
WebServers
Fall Back Pool:
None
單擊 Submit(送出)
單擊 Apply Changes(應用更改)
注意
在這個示例中,如果兩個池伺服器都關閉,則虛拟伺服器無法通路。 如果沒有配置虛拟伺服器,防火牆将會起作用。 如果防火牆上的某些應用綁定到80端口,那麼用戶端就會直達綁定了這個端口的應用。 這可能包括通過端口80通路内置Web GUI,是以應該在System > Advanced > Admin Access 頁籤上禁用或采用其他端口。
防火牆規則必須配置為允許通路池中的伺服器。 規則必須允許流量使用内部IP位址和端口,并且對虛拟伺服器配置中使用的外部IP位址和端口不需要任何規則限制。
建立一個包含池中所有伺服器的别名,是以可以使用單個防火牆規則進行通路。
導航到Firewall > Aliases
單擊 添加 一個别名
<code>www_servers</code>
Type:
Hosts
Hosts:
兩個Web伺服器IP位址: <code>10.6.0.11</code> 和 <code>10.6.0.12</code>
單擊 Save
圖中的“Name”顯示了用于此示例配置的别名,其中包含兩個Web伺服器。
Web 伺服器别名設定
下一步,用這個别名建立一個防火牆規則: 導航到Firewall > Rules ,切換到外部連接配接通路的接口(例如WAN), 單擊 在頂部添加一條新規則,設定如下:
Interface: WAN Protocol: TCP Source: any Destination Type: Single Host or Alias Destination Address: Destination Port Range: HTTP <code>Allow to Web Server</code>
下圖為Web伺服器設定的防火牆規則,未顯示的選項保留預設值。
為Web伺服器添加防火牆規則
清單中顯示的規則。
Web 伺服器防火牆規則
現在已經配置了負載平衡器,要檢視其狀态,請浏覽到Status > Load Balancer,然後單擊“Virtual Servers”頁籤。此頁面顯示整個伺服器的狀态,通常列為“Active(聯機)”或“Down(脫機)”。
Pools頁籤顯示池的每個成員的單獨狀态(如圖池狀态)。如果伺服器處于聯機狀态,伺服器的行為綠色,如果伺服器處于脫機狀态,則為紅色。
此外,池中的每個伺服器都有一個複選框。 已檢查的伺服器在池中處于活動狀态,池中已禁用未選中的伺服器,與在池編輯頁面上啟用和禁用清單之間移動的伺服器相同。 要禁用伺服器:取消選中它,然後單擊儲存。
池狀态
如果在其中一個伺服器上停止了Web伺服器服務,或者如果使用ICMP螢幕将伺服器完全從網絡中删除,則狀态将更新為“脫機”,并将伺服器從池中删除。
在該指令中,将198.51.100.6替換為站點的IP位址或主機名。 這必須從網絡外部進行測試(例如,從WAN上的遠端網絡或用戶端)。 例如,在外網用curl進行測試:
測試負載平衡時,設定每個伺服器傳回指定其主機名、IP位址或兩者,是以明确哪個伺服器響應該請求。 如果未啟用粘性連接配接,則不同的伺服器将響應每個請求。
不能連接配接到負載平衡
不能連接配接到負載平衡器通常是使用測試方法不當造成的,這通常是HTTP特有的。 Web浏覽器通常會保持與Web伺服器建立的連接配接,并且點選重新整理會重新使用現有的連接配接。 單個連接配接将永遠不會更改為另一個平衡伺服器。 另一個常見的問題是網絡浏覽器緩存,浏覽器隻從緩存讀取資料,未真正再次重新整理頁面。 最好使用諸如curl等指令行工具來測試,因為它確定測試不受Web浏覽器測試中固有問題的影響。curl沒有緩存,并在每次運作時都會重建立立與伺服器的新連接配接。
如果啟用了粘性連接配接,請確定從多個源IP位址執行測試。來自單個源IP位址的測試将轉到單個伺服器,除非連接配接嘗試之間經過了較長的時間。
如果伺服器關閉但沒有标記為脫機,那是因為負載平衡守護程式執行的監視信号仍然處于啟動狀态。 如果使用TCP螢幕,TCP端口必須仍然接受連接配接。 該端口上的服務可以以多種方式斷開,仍然可以回複TCP連接配接。 對于ICMP螢幕,這個問題更加嚴重,因為伺服器可以挂起或故障,沒有任何監聽服務,仍然可以回答ping。
如果伺服器線上,但沒有标記為線上,那是因為從負載平衡守護程式螢幕的角度來看,它不是聯機的。 伺服器必須在所使用的TCP端口上回答或響應來自最靠近伺服器的防火牆接口IP位址的ping。
例如,如果伺服器在LAN上,則伺服器必須應答從防火牆的LAN IP位址發起的請求。 要驗證ICMP螢幕,請導航到到Diagnostics > Ping,并使用伺服器所在的接口Ping伺服器IP位址。
對于TCP螢幕,請使用“Diagnostics > Test Port”,并選擇防火牆的LAN接口作為源,将Web伺服器的IP位址和端口作為目标。
另一種測試方法是使用防火牆的shell提示符,使用console或ssh菜單選項<code>8</code>和<code>nc</code>指令:
上面是一個失敗的例子。
下面是一個成功連接配接的例子:
如果連接配接失敗,請在Web伺服器上進一步進行故障排除。
與池伺服器在同一子網中的用戶端系統将無法使用此負載平衡方法正确連接配接。 relayd将連接配接轉發到具有用戶端源位址的Web伺服器。然後,伺服器将嘗試直接響應用戶端。如果伺服器具有到用戶端的直接路徑,例如通過同一子網中的本地連接配接的NIC,它将不會正常通過防火牆回流,用戶端将從伺服器的本地IP位址收到回複,而不會在relayd中收到該IP位址。然後,由于從用戶端的角度看,伺服器IP位址不正确,連接配接被丢棄為無效。
這樣做的一個方法是使用手動出站NAT和制定手動出站NAT規則,以便從LAN子網到達Web伺服器的内部接口(LAN)的流量轉換為LAN的接口位址。這樣,流量似乎源于防火牆,伺服器将響應到防火牆,然後防火牆将該流量中繼到用戶端使用的預期位址。原始的用戶端源IP位址在該過程中丢失,最佳的解決方案是将伺服器移動到不同的網段。
本文轉自 鐵血男兒 51CTO部落格,原文連結:http://blog.51cto.com/fxn2025/1967084,如需轉載請自行聯系原作者