Skip to content

About

使用 Windows Server IIS 與 NLB 建立高可用 Web 叢集,並透過 k6 進行流量分流、節點故障與恢復驗證。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Windows IIS NLB 建置與服務可用性驗證

個人實作專案:使用 Windows Server IIS 與 Network Load Balancing(NLB)服務建置高可用 Web Service,並自行設計測試情境驗證流量分配、節點故障與節點恢復行為。

📌 專案簡介與目標

本專案旨在解決企業 Web 服務的單點故障(SPOF)問題。透過部署多節點 Windows IIS NLB 叢集,並客製化 k6 壓力測試腳本,驗證以下三大情境:

  • 正常分流:驗證流量是否依預設權重分配至各節點。
  • 節點故障:模擬 Node 離線,驗證 NLB 自動摘除故障節點與服務不中斷能力。
  • 節點恢復:模擬 Node 重啟,驗證 NLB 心跳機制與重新加入叢集的分流行為。

🏗️ 系統架構

System Architecture

文字架構圖

graph LR
    Client[Client] -- HTTP Request --> VIP[Cluster VIP<br/>192.168.25.119]

    subgraph Cluster["IIS NLB Cluster"]
        Node1["IIS Node 01<br/>Header: Node-01"]
        Node2["IIS Node 02<br/>Header: Node-02"]
        Node3["IIS Node 03<br/>Header: Node-03"]
    end

    VIP -- "50%" --> Node1
    VIP -- "25%" --> Node2
    VIP -- "25%" --> Node3
Loading

架構說明

  • Client:即網站使用者,向 NLB Cluster 的 Virtual IP 發送 Request。
  • NLB Cluster:接收 Client 流量並根據 hash 將 Request 分配至 Cluster 中的 Node。
  • IIS Node 1 / Node 2 / Node 3:提供 Web Service。
  • k6:產生測試流量,用於觀察 NLB 的實際流量分配與節點狀態變化。

實作設定 & 成果相關截圖

  1. 設定完成圖

  2. 叢集細節參數設定

  3. 負載權重設定範例

node1 權重

node2 權重

node3 權重

🧪 測試驗證與結果總結

透過為每個 IIS 站台設定識別 Header(Node-01, Node-02, Node-03),並搭配 k6 模擬大量虛擬使用者(VU)發送請求進行驗證。

測試架構

  1. 使用 k6 壓力測試工具來模擬大量使用者對網站進行訪問

k6 模擬大量使用者發起請求

  1. 為每一個 IIS service 站台設定辨識用的 header 以此來判斷實際請求的走向 k6 根據收到的回應來判斷實際流量走向

測試情境概覽

三大測試情境

結果彙整

測試情境 測試參數 驗證重點與行為觀察 測試結果
正常分流 100 VU / 10s 驗證所有 Node 正常時,請求是否依 50% / 25% / 25% 權重分配。 成功(符合預期分流)
節點故障 100 VU / 30s 測試期間手動關閉 Node 01,觀察流量轉移與服務是否中斷。 成功(自動摘除故障 Node)
節點恢復 100 VU / 60s 從單節點離線狀態將 Node 開機,觀察重新加入 Cluster 的行為。 成功(自動重新納入分流)

🎬 測試過程影片紀錄

  1. 網頁正常回應 (http + https)

    http.mp4
    https.mp4

  2. 正常分流測試

    _.mp4

  3. 節點故障測試

    _.mp4

  4. 節點恢復測試

    _.mp4

🛠️ 使用技術

  • OS / Service: Windows Server (hyper-v), IIS, Network Load Balancing (NLB)
  • Testing / Tools: k6 (Load Testing), HTTP Header Inspection
  • Architecture: High Availability (HA), Load Balancing

🚀 測試執行 (Quick Start)

K6 腳本執行方式

前置準備

  1. 安裝 k6 測試工具。
  2. 於根目錄設定 .env 環境變數(設定目標 VIP、VU 人數與持續時間)。

執行腳本

  • source .env && K6_WEB_DASHBOARD=true K6_WEB_DASHBOARD_EXPORT=report.html k6 run script.js
    • 產出 report 的參數可以省略

📁 專案結構

.
├── README.md
│
├── demo/
│   ├── 測試一_正常分流.mp4
│   ├── 測試二_節點恢復.mp4
│   └── 測試三_節點故障.mp4
│
├── docs/
│   ├── architecture.png
│   └── presentation.pdf
│
├── k6/
│   └── script.js
│
└── screenshots/
    ├── settings 1.png
    ├── settings 2.png
    └── settings 3.png

📚 背景與專案狀態

  • 專案狀態:Completed
  • 背景說明:本專案為「雲端網路與資安工程師就業養成班」期中整合應用專題,整合 Windows Server NLB 叢集 & IIS 角色

About

使用 Windows Server IIS 與 NLB 建立高可用 Web 叢集,並透過 k6 進行流量分流、節點故障與恢復驗證。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages