阿里雲帳號代開服務 使用負載均衡SLB與ALB將流量分發到多台ECS的保姆級教程

阿里雲國際 / 2026-06-25 13:10:05

前言:你真正要解決的問題

把一個網站或 API 從「一台 ECS 跑到撐不住」升級到「多台 ECS 共同服務」,核心就兩件事:第一,讓外部流量能被平均、可靠地分配;第二,當某台服務異常時,系統要能自動把流量移走。

你會聽到兩個常見選項:SLB 與 ALB。很多新手卡在「兩者差在哪」以及「到底要怎麼配才不會踩雷」。這篇文章會用保姆級的方式,把你從規劃到上線的每一步講清楚,讓你能把設定一次做對,並知道發生問題時怎麼定位。

第一章:先選對工具——SLB 還是 ALB?

在進入設定之前,先搞懂差別,能省下大量返工。

1. SLB 的定位:更偏傳統流量轉發

SLB(Server Load Balancer)通常更擅長做「四層到七層中較偏傳統的負載轉發」。你可以把它理解成:它接收連線,依照策略把請求導到後端 ECS。針對常見的 TCP/UDP 或較簡單的 HTTP/HTTPS 轉發需求,它的使用非常普遍。

阿里雲帳號代開服務 當你的需求是「同一套服務、同一類型流量,做基本的高可用與擴展」,SLB 會很合適。

2. ALB 的定位:更偏應用層的路由與精細規則

ALB(Application Load Balancer)更強調「應用層」的判斷能力。它能依據 URL 路徑、主機名、HTTP Header、Cookie(視功能而定)等做更細的路由規則。

當你有以下狀況,ALB 通常更合適:

  • 同一個網域要把不同路徑分發到不同服務(例如 /api 到 API 服務,/static 到靜態服務)。
  • 你需要依據 Header 或條件做灰度、AB Test(例如依某標頭導到新版本)。
  • 你希望利用應用層健康檢查(更貼近業務可用性)。

3. 常見結論:怎麼快速決策

你可以用一句話決定:如果只是「多台 ECS 做同類服務,平均分流」,優先考慮 SLB;如果你要「依請求內容做分流與路由」,優先考慮 ALB。

但現實是:很多系統會兩者搭配。也有人用 ALB 兼顧所有需求。只要你理解原理,選哪個都能做得穩。

第二章:目標架構先畫出來(不要急著配)

阿里雲帳號代開服務 在任何負載均衡器上線之前,你要先把「流量路徑」想清楚。建議你在紙上或筆記裡畫出這條線:

使用者 →(網際網路/內網)→ SLB/ALB(入口)→ ECS 後端(服務)→ 回應給使用者

1. 你需要的基本元件

  • 負載均衡器:SLB 或 ALB。
  • 阿里雲帳號代開服務 Listener:入口監聽的協定與端口(例如 HTTPS:443)。
  • Rule / Routing:路由規則(SLB 可能偏簡單,ALB 常用應用層規則)。
  • Target Group / 後端組:一組 ECS 目標。
  • Health Check:健康檢查,決定 ECS 是否可收流量。
  • Security Group / 防火牆規則:讓負載均衡器能訪問 ECS。

2. 你要先定義的策略

下面幾件事在上線後才想到通常會很痛,所以建議你先決定:

  • 分流方式:輪詢、最少連線等。
  • 是否需要會話維持(session stickiness)。
  • 健康檢查要檢什麼:只看端口還是看特定 URL。
  • 超時、重試要怎麼設。

第三章:準備後端 ECS(否則你配多少都白搭)

負載均衡器是一個「分流與健康管理」的角色。真正能不能扛住流量,取決於後端 ECS 的服務品質。

1. 多台 ECS 的服務要一致

至少在「對外暴露的接口」要一致:例如都在同一個端口(如 8080)提供相同的 HTTP 路徑(例如 /health)。如果你其中一台服務版本不同、路徑不同,健康檢查就可能導致它被移除,或在實際流量中出錯。

2. 建議你做一個明確的健康檢查端點

不要只讓健康檢查依賴「端口能連上」。更好的做法是提供一個簡單的端點,例如:

  • GET /health:回傳 200(並可包含簡單狀態資訊)。
  • 若你的服務依賴資料庫,/health 可以檢查資料庫是否可用(或至少做基本判斷)。

這樣 ALB/SLB 才知道什麼時候是真正可用,而不是「只要程式沒掛就算健康」。

3. 安全組與網路:務必打通這兩段

你至少要確保兩件路徑通得了:

  1. 負載均衡器 → ECS:負載均衡器的安全組或訪問來源,要被 ECS 的安全組允許到服務端口。
  2. 使用者 → 負載均衡器:入口端口(80/443 或你設定的端口)要允許外部存取。

另外,如果你的 ECS 只允許內網,記得負載均衡器放在相同網段/或具備可用的存取路徑。

4. 基本可觀測性:先讓你看得見

建議你在 ECS 上準備:

  • 應用日誌(至少要有請求時間、錯誤碼)。
  • 指標/監控(CPU、記憶體、應用錯誤率、延遲)。
  • 錯誤頁或錯誤回應(至少要回應合理的 HTTP status)。

等負載均衡器上線後,你才知道問題是從分流來,還是從服務來。

第四章:建立後端目標組(Target Group)

Target Group 你可以把它想成「同一類後端服務的集合」。負載均衡器的 Listener 將請求交給它。

1. 設定目標協定與端口

確認你的後端服務是 HTTP 還是 HTTPS,以及應該以哪個端口被訪問。例如後端都在 HTTP:8080,就要在 Target Group 設對應的協定與端口。

2. 指定實例(ECS)並確保它們都可達

把 ECS 實例加入 Target Group。此時你就要用最基本的方法驗證:在負載均衡器所在環境能否連到 ECS 的服務端口與 /health。

如果連不上,後面所有健康檢查結果都會失真。

3. 先別追求複雜:健康檢查從簡開始

建議你先用比較寬鬆的健康檢查策略:

  • 健康檢查路徑使用 /health。
  • 期望回應碼為 200。
  • 合理設定 interval、timeout 與 unhealthy threshold。

等整體穩定後,再依你的業務調整閾值。

第五章:SLB 設定教學(從 0 到可用)

SLB 的設定通常比較直覺。你仍然需要 Listener、後端組、健康檢查與轉發策略。

1. 建立 SLB 與選擇網路類型

建立 SLB 時,確認你選的是正確的網路型態(公網/內網,或 VPC)。同時確認可用區(若你有多 AZ 設計,盡量分散)。

2. 設定 Listener:端口與協定

常見做法是:

  • 80 → 轉發到 8080 或做重導到 443(視你是否啟用 HTTPS)。
  • 443 → HTTPS 對外,後端用 HTTP 或 HTTPS(依需求)。

若你要 HTTPS,記得先準備憑證,並在 Listener 指定。

3. 設定轉發:把流量指到 Target Group

在 Listener 的對應設定中,選擇你建立的 Target Group,並選擇預設轉發規則。

如果你只有一種服務,SLB 的工作到這裡就差不多完成。

4. Health Check:讓 SLB 知道誰真的可用

把健康檢查設定指到後端的 /health(或你指定的端點)。重點是:

  • 健康檢查要能快速反映應用狀態。
  • 不要把 timeout 設太短,否則偶發延遲就會誤判。
  • unhealthy threshold 不要太激進,否則會頻繁上下線。

5. 常見踩雷:返回碼與跨服務差異

你可能遇到 SLB 顯示後端持續不健康。最常見原因包括:

  • /health 沒回 200(回 404 或 500)。
  • 健康檢查走的協定/端口與實際不同(例如檢查走 HTTPS,但後端只有 HTTP)。
  • 安全組沒放行,導致健康檢查其實到不了。

解法通常就是:先在 ECS 上確認端點可用,再確認防火牆,最後才調健康檢查閾值。

第六章:ALB 設定教學(會話與路由是重點)

ALB 相比 SLB,多了「應用層規則」。這也是最容易出錯的地方。

1. 建立 ALB 與選擇 Listener

與 SLB 類似,你先選正確網路。然後建立 Listener(例如 HTTPS:443)。如果你需要把 80 重導到 443,也可以在這裡處理。

2. 建立多個 Target Group(如果你要分流到不同服務)

例如你有兩個後端:

  • API 服務:/api 相關請求
  • 阿里雲帳號代開服務 Web 前端或靜態服務:/、/static

那你就要建立兩個 Target Group:api-tg 與 web-tg,並各自設定健康檢查端點。

3. ALB Rule:用路徑/主機名做精準路由

典型規則:

  • 若 Path starts with /api → 轉發到 api-tg
  • 若 Path starts with /static 或 / → 轉發到 web-tg
  • 阿里雲帳號代開服務 其他未匹配 → 轉發到預設目標(避免 404 漏掉)

規則順序通常很重要。優先匹配的條件要放在前面,否則可能被更一般的規則吞掉。

4. 會話維持:你到底需不需要?

很多人一上來就開 session stickiness,最後發現縮不動或分流不均。其實你要看應用是否需要。

  • 如果你的後端是無狀態(stateless):例如 JWT 驗證、把 Session 存在外部(Redis)或不依賴黏著,通常不需要會話維持。
  • 如果你的後端依賴伺服器本地 session:例如用 Cookie 對應到內存 session,且沒外部同步,就可能需要會話維持,否則用戶會被分到不同 ECS 導致登入狀態消失。

較好的長期做法是把 session 移到外部儲存,或改用無狀態架構,降低對負載均衡黏著的依賴。

5. 重試與超時:避免「放大問題」

當後端慢或失敗時,ALB 若對同一請求做重試,可能導致:

  • 同一筆請求被執行多次(尤其是非冪等的 POST)。
  • 延遲被拉長,造成級聯故障。

建議你:

  • 對 POST 等非冪等操作,謹慎設定重試。
  • 確保應用層有適當的超時與錯誤處理。
  • 用合理 timeout,避免把連線卡死。

第七章:兩者通用的關鍵設定(你一定會用到)

不管你選 SLB 還是 ALB,以下幾個設定都是成敗分界線。

1. 健康檢查設計:要反映真實可用性

健康檢查過於「寬鬆」會讓壞的實例還在接流量;過於「嚴苛」又會導致短暫抖動就被移除。

實務建議:

  • 健康檢查時間要略高於你平常的應用延遲。
  • 若你有資料庫依賴,可以把 /health 設計成簡單判斷資料庫連線狀態。
  • 不要把閾值設得太激進,否則會「上下線抖動」。

2. 超時與連線管理:不要讓慢的拖垮快的

負載均衡器通常會有連線超時、讀寫超時等設定。你要讓超時跟你的應用行為一致。

  • 應用本身若有反壓或限流機制,負載均衡超時不宜設得過短,否則還沒回應就被切斷。
  • 若應用容易卡住,應用端要優先修復卡頓原因,而不是靠調超時掩蓋。

3. 請求頭與回源:避免內容錯亂

如果你使用 ALB 的多路由,可能遇到:

  • 不同服務期待的 Host 不同。
  • 某些反向代理配置會影響 URL 或重導。

你可以在應用層確認是否依賴 Host header,並讓健康檢查與正式流量走同一套路徑與 header(至少不要在兩者之間差太多)。

4. 限流與防護:安全比你想的更重要

負載均衡器通常是入口。入口的攻擊、爬蟲、惡意請求會直接打到你的後端。

建議你在入口層或應用層做:

  • 阿里雲帳號代開服務 基本的 WAF/防火牆策略(依平台能力)。
  • API 限流(對單 IP 或 token)。
  • 針對管理端點做 IP 白名單或額外驗證。

第八章:如何驗證「它真的在工作」

設定完成後,你不能只看控制台狀態就下結論。你要做幾輪驗證,確保流量確實被分發,且健康檢查如你所預期。

1. 驗證健康狀態

先看負載均衡器的後端實例狀態:

  • 是否全部標記為 healthy。
  • 如果有 unhealthy,回頭檢查 /health 回應碼與防火牆。

2. 驗證分流是否均勻

你可以在 ECS 上加一個簡單的回應識別,例如回傳主機名或 instance id(只在測試期這樣做,正式上線可移除或限制)。

然後用壓測或反覆請求,確認回應來源分散到多台 ECS,而不是只打到一台。

3. 驗證失效切換

阿里雲帳號代開服務 這一步最能說明高可用是否真實:

  • 暫時停止一台 ECS 的服務,或讓 /health 回非 200。
  • 觀察負載均衡器多久把它移出。
  • 同時確保使用者仍能成功回應(其他 ECS 仍可提供服務)。

注意:這一步的「切換時間」跟你的健康檢查閾值直接相關。你可以把它當作調參的依據。

4. 驗證多路由(ALB)是否命中正確

如果你用 ALB 的規則路由:

  • 阿里雲帳號代開服務 測 /api 給 API 服務。
  • 測 /static 給靜態服務。
  • 測未匹配路徑,看是否落到預設目標或是否回正確錯誤碼。

很多事故來自「規則漏了一種情況」:例如只處理 /api,卻忘了 /api/health 或 /api/v1 開頭,導致部分請求跑去錯誤的後端。

第九章:讓系統更穩的進階做法

阿里雲帳號代開服務 當你已經能跑起來,接下來要做的是:讓它在真實流量下更穩、更容易維運。

1. 逐步擴容與縮容(擴到不止「能用」)

你要配合自動擴縮或手動擴縮機制:

  • 負載升高 → 新增 ECS → 加入 Target Group(自動或半自動)。
  • 阿里雲帳號代開服務 負載降低 → 減少 ECS → 先把實例移出再縮容,避免中途斷連。

注意:如果你有會話維持或有正在處理的請求,縮容時要確保正常排空(drain)或合理等待。

2. 灰度發布:ALB 的規則就是你的開關

灰度常見策略:

  • 阿里雲帳號代開服務 新版本目標集(new-tg)只服務少量流量。
  • 依 Header(例如 X-Canary: 1)或依 Cookie 分流。

這比直接把所有流量切到新版本安全得多。你可以先觀察錯誤率與延遲,再擴大流量。

3. 日誌與追蹤:把「分流」與「問題」連在一起

一旦出錯,你希望能回答:「這個失敗的請求到底打到哪台 ECS?」

做法可以很簡單:

  • 後端回應或日誌裡帶上 instance id 或節點名稱。
  • 如果你有分散式追蹤(trace id),把它在入口生成並傳下去。

有這些資訊,你就能快速判斷是某台節點問題、還是整體規則問題。

第十章:故障排查清單(真的能救命)

上線後你一定會遇到問題。以下是最常見的狀況與排查順序。

1. 全部後端都是 unhealthy

  • 先檢查 /health 是否回 200。
  • 確認健康檢查走的端口與協定正確。
  • 確認 ECS 安全組允許負載均衡器的來源到服務端口。
  • 檢查是否有防火牆或應用本身擋掉健康檢查。

2. 有些後端 healthy、有些 unhealthy

  • 通常是某台服務版本/設定差異。
  • 或該台 ECS 上 /health 路徑不同、依賴沒起來。
  • 也可能是磁碟/記憶體壓力導致偶發錯誤。

3. 流量都打到同一台 ECS

  • 檢查是否開啟了會話維持且 session 粘性過強。
  • 如果是 ALB 的多路由,規則可能只命中單一路徑。
  • 阿里雲帳號代開服務 或你在測試時使用了同一連線/同一 cookie,導致黏著。

4. 偶發 502/504 或延遲飆高

  • 後端超時或卡住:應用端檢查慢查詢、鎖競爭或下游依賴。
  • 負載均衡超時設定不匹配:調整並觀察。
  • 重試導致雪崩:先關掉重試或縮小重試條件,再觀察。

第十一章:把它變成可重複的交付流程

你做過一次後,最好把流程固化成團隊可重複交付的方式。否則下一次你仍要重新思考。

1. 建立「標準化表單」

你可以用很簡單的欄位把需求記錄下來:

  • 入口協定:HTTP/HTTPS
  • Listener 端口
  • 健康檢查:路徑、回應碼
  • 後端端口
  • 是否需要多路由(ALB)
  • 會話策略
  • 超時/重試策略

2. 準備一組測試用資料與手動驗證步驟

例如固定幾個 URL:

  • /health
  • /api/test
  • /static/logo.png
  • 未匹配路徑:/unknown

每次部署後都用它們驗證路由與可用性。

3. 監控設定最小化:先確保看得見

不必一開始就做完美儀表板,但至少要能看到:

  • 健康檢查成功率
  • 5xx 錯誤率
  • 延遲(p95/p99 若有)
  • 後端 CPU/記憶體與應用錯誤

只要能看見,你就能更快修問題,且不會因為「不知道發生什麼」而拖延。

阿里雲帳號代開服務 結語:你已經可以把流量分發做成基礎建設

用 SLB 或 ALB 分發流量到多台 ECS,最重要的不是背設定項目,而是理解「入口怎麼判斷後端是否可用、怎麼把請求路由到正確服務、出錯時如何切換」這三件事。

當你能把 Listener、Target Group、Health Check、路由規則、以及安全組串起來,你就真正掌握了負載均衡的核心能力。接下來,你擴容、灰度發布、故障排查都會變得可預期,而不是靠運氣。

阿里雲帳號代開服務 如果你願意,我也可以依你的實際情境(你是偏 HTTP 還是 HTTPS、是否有多路由、後端端口與健康檢查端點、是否需要會話維持)幫你把 SLB 或 ALB 的設定拆成更貼近你環境的逐步清單。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系