如何設定 Linux 上的負載均衡
在現代網路架構中,單一台伺服器往往難以應對高併發的流量請求。當流量增長時,我們不僅需要擴充硬體資源,更需要透過「負載均衡」(Load Balancing)技術,將客戶端的請求分散到多台後端伺服器上,以確保系統的高可用性與效能。
對於中階 Linux 使用者而言,無需立即投入昂貴的商业硬體設備或複雜的雲端服務。在本篇文章中,我們將使用開源的 HAProxy 作為軟體負載均衡器,搭配兩台模擬的後端 Web 伺服器,示範如何在 Ubuntu 22.04 或 Debian 12 環境中快速建立一個基礎的負載均衡架構。
環境準備與架構說明
在開始之前,請確保您有三台已安裝好 Linux 系統的虛擬機或實體機,並具備 sudo 權限。我們的架構如下:
- LB Server (負載均衡器):IP 為
192.168.1.10,安裝 HAProxy。 - Backend Server 1:IP 為
192.168.1.11,安裝 Nginx。 - Backend Server 2:IP 為
192.168.1.12,安裝 Nginx。
這兩台後端伺服器將透過 HAProxy 接收來自客戶端的 HTTP 請求,並根據演算法將流量分配給它們。
第一步:安裝與配置後端 Web 伺服器
首先,我們需要在兩台後端伺服器上安裝 Nginx,並設置簡單的測試頁面,以便後續驗證流量是否成功分發。
在 Backend Server 1 和 Backend Server 2 上執行以下指令:
# 更新套件清單並安裝 Nginx
sudo apt update
sudo apt install nginx -y
# 創建一個簡單的測試頁面,用於識別是哪台伺服器回應
sudo bash -c 'echo "Hello from Backend Server 1" > /var/www/html/index.html'
# 注意:請在 Server 2 上將 "Backend Server 1" 改為 "Backend Server 2"
# 啟動 Nginx 並設定開機自動啟動
sudo systemctl start nginx
sudo systemctl enable nginx
確認 Nginx 運作正常後,您可以透過瀏覽器分別訪問 http://192.168.1.11 和 http://192.168.1.12,確認頁面內容正確顯示。
第二步:安裝與配置 HAProxy
接下來,將焦點轉移到 LB Server。HAProxy 是業界最廣泛使用的開源 TCP/HTTP 負載均衡器,以其穩定性和效能著稱。
# 安裝 HAProxy
sudo apt update
sudo apt install haproxy -y
安裝完成後,主要配置文件位於 /etc/haproxy/haproxy.cfg。我們需要編輯該文件來定義我們的負載均衡規則。
sudo nano /etc/haproxy/haproxy.cfg
在文件的末尾,添加以下區塊。這段配置告訴 HAProxy 監聽埠 80,並將 HTTP 流量輪流分發給後端伺服器。
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
option httpchk GET /
http-check expect status 200
server backend1 192.168.1.11:80 check
server backend2 192.168.1.12:80 check
這裡的參數說明如下:
- bind *:80:監聽所有網卡埠 80 的 HTTP 流量。
- balance roundrobin:使用輪詢演算法,依序將請求分配給後端伺服器。
- option httpchk:啟用健康檢查,定期請求後端伺服器的根路徑
/。 - server ... check:定義後端伺服器 IP,並啟用健康檢查機制。若伺服器無回應,HAProxy 會自動將其標記為不可用。
保存並退出編輯器後,重新啟動 HAProxy 以套用配置:
sudo systemctl restart haproxy
sudo systemctl enable haproxy
第三步:驗證負載均衡效果
現在,我們可以從客戶端機器或直接在 LB Server 上進行測試。我們將使用 curl 指令連續發送請求,觀察回應內容是否在兩台後端伺服器之間交替。
# 連續發送 4 次請求
curl http://192.168.1.10
curl http://192.168.1.10
curl http://192.168.1.10
curl http://192.168.1.10
預期結果: 您應該會看到回應內容交替顯示 "Hello from Backend Server 1" 和 "Hello from Backend Server 2"。這證明 HAProxy 已經成功將流量均勻地分發到了兩台後端伺服器。
此外,您可以透過查看 HAProxy 的統計頁面來監控狀態。在 haproxy.cfg 的 global 區塊下方添加統計頁面的配置,即可透過瀏覽器訪問 http://192.168.1.10:8404/stats 來查看即時流量圖表。
常見問題與排除
1. 後端伺服器無法被 HAProxy 訪問? 這通常是由於防火牆阻擋了流量。請確保後端伺服器的防火牆允許來自 HAProxy IP 的 HTTP 連接。
# 在後端伺服器上執行
sudo ufw allow from 192.168.1.10 to any port 80 proto tcp
2. 健康檢查失敗,伺服器被標記為 DOWN? 如果後端伺服器啟動較慢或 Nginx 配置錯誤,HAProxy 可能會認為伺服器不可用。您可以檢查 HAProxy 的日誌來確認原因:
sudo tail -f /var/log/haproxy.log
確保後端伺服器的 / 路徑確實返回 HTTP 200 狀態碼。
小結
透過本篇教學,我們成功在 Linux 環境中部署了一個基於 HAProxy 的基礎負載均衡系統。這種架構不僅能提升系統的容錯能力,還能有效分散單一伺服器的壓力。
對於初學者而言,roundrobin 演算法是最簡單且實用的起點。隨著業務需求增長,您可以進一步探索 leastconn(最少連線數)或 uri 等更進階的演算法,並結合 Keepalived 實現 HAProxy 本身的高可用性(HA)。希望這篇文章能為您開啟 Linux 網路架構設計的大門。