阿里雲帳號代開服務 使用負載均衡SLB與ALB將流量分發到多台ECS的保姆級教程
前言:你真正要解決的問題
把一個網站或 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. 安全組與網路:務必打通這兩段
你至少要確保兩件路徑通得了:
- 負載均衡器 → ECS:負載均衡器的安全組或訪問來源,要被 ECS 的安全組允許到服務端口。
- 使用者 → 負載均衡器:入口端口(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 的設定拆成更貼近你環境的逐步清單。


