如何設定 Linux 上的負載均衡 文章首圖

如何設定 Linux 上的負載均衡

如何設定 Linux 上的負載均衡

在現代網路架構中,單一台伺服器往往難以應對高併發的流量請求。當流量增長時,我們不僅需要擴充硬體資源,更需要透過「負載均衡」(Load Balancing)技術,將客戶端的請求分散到多台後端伺服器上,以確保系統的高可用性與效能。

對於中階 Linux 使用者而言,無需立即投入昂貴的商业硬體設備或複雜的雲端服務。在本篇文章中,我們將使用開源的 HAProxy 作為軟體負載均衡器,搭配兩台模擬的後端 Web 伺服器,示範如何在 Ubuntu 22.04 或 Debian 12 環境中快速建立一個基礎的負載均衡架構。

環境準備與架構說明

在開始之前,請確保您有三台已安裝好 Linux 系統的虛擬機或實體機,並具備 sudo 權限。我們的架構如下:

  1. LB Server (負載均衡器):IP 為 192.168.1.10,安裝 HAProxy。
  2. Backend Server 1:IP 為 192.168.1.11,安裝 Nginx。
  3. Backend Server 2:IP 為 192.168.1.12,安裝 Nginx。

這兩台後端伺服器將透過 HAProxy 接收來自客戶端的 HTTP 請求,並根據演算法將流量分配給它們。

第一步:安裝與配置後端 Web 伺服器

首先,我們需要在兩台後端伺服器上安裝 Nginx,並設置簡單的測試頁面,以便後續驗證流量是否成功分發。

Backend Server 1Backend 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.11http://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.cfgglobal 區塊下方添加統計頁面的配置,即可透過瀏覽器訪問 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 網路架構設計的大門。