# <center>LoadBalancer</center> >[name=王鵬維] >[time=TUE, NOV 16, 2020 14:09 PM] --- ## Agenda * 起源 * 擴展方式 * 實現原理 * 可能的問題 * 分配演算法 * GCP(LB)實作 --- ## 起源 --- ![](https://i.imgur.com/ICGQfLl.png) 傳統網頁服務模式,通常會碰上流量問題,下面舉飲料店的例子做解釋。 --- ![](https://i.imgur.com/yZUHWXF.png) 左邊為客人右邊為店員,假設這個店員最多能一次做8杯。 --- ![](https://i.imgur.com/rpZtR5F.png) --- ![](https://i.imgur.com/TEpPUGB.png) --- ![](https://i.imgur.com/MI4oSCj.png) 同時有10000個客人點飲料時... --- ![](https://i.imgur.com/cdgejw9.png) 店員就會變成熊大,客人就是兔子,熊大即使被兔子催促也無能為力,早就超出它的能力了..QQ喔~ --- ![](https://i.imgur.com/8RD2dpb.png) 若不想讓店員輕易崩潰,除非把他變成鋼鐵人。 --- ![](https://i.imgur.com/gI4L493.png) 傳統模式的網路服務,一旦伺服器當機,整個服務就會異常,容錯率極低。 --- ## 有哪些擴展方式? * 縱向擴展 * 橫向擴展 --- ## 縱向擴展 ![](https://i.imgur.com/VenR5v6.png) --- ![](https://i.imgur.com/f7Q1uGC.png) --- ## 橫向擴展 ![](https://i.imgur.com/PHOWaTX.png) --- ## 實現的原理為何? --- ![](https://i.imgur.com/i8UYVw2.png) 加上負載平衡器,統一由負載平衡器接收客端請求,再依據演算法分配流量。 --- * 四層負載(L4) * 七層負載(L7) --- ## 四層負載 * LVS/NAT (網域地址修改) * LVS/DR (直接路由模式) --- ### LVS/NAT (網域地址修改) 負載平衡器在接收到封包後,會分別更改封包內的傳輸層接口埠號及網路層的IP地址。 --- ![](https://i.imgur.com/JjLQnwj.png) --- ![](https://i.imgur.com/7j8uPYH.png) --- ![](https://i.imgur.com/U2d90Qv.png) 伺服器回覆client的請求時,響應封包會先到負載平衡器,再由它去回傳給client端。 --- ![](https://i.imgur.com/fhRDNLL.png) <center>客端 -> 負載(LB) -> 伺服器 -> 負載(LB) -> 客端<br> |----------請求-----------|---------響應-----------| </center> --- ### LVS/DR (直接路由模式) 負載平衡器在接收到封包後,直接更改封包內資料連結層的MAC位置,透過MAC位置傳送封包。 --- ![](https://i.imgur.com/Iz8EgJw.png) --- ![](https://i.imgur.com/O8SeEwq.png) --- ![](https://i.imgur.com/GeMfTS7.png) <center>客端 -> 負載(LB) -> 伺服器 -> 客端<br> |-------請求-------|-------響應-------| </center> --- ## 七層負載 --- ![](https://i.imgur.com/t1Y9gqC.png) 先過濾含有惡意元素的封包,並分析客端的請求,依據分析結果再將封包轉送至伺服器處理。 --- ## 四層負載與七層負載差異性 : * 四層負載 : 不需與客戶端連接(握手),效率上會較七層負載高。 * 七層負載 : 會先與客戶端連接(握手),並分析客戶端的請求後,最後才會將請求派給各伺服器處理。這個方式能過濾惡意的封包,但也間接影響負載平衡器的效率。 --- ## 可能會碰到的問題? --- ![](https://i.imgur.com/EFMrAwl.png) 當負載均衡器故障,整個負載均衡系統就無法正常運作。 --- ![](https://i.imgur.com/4r5HiHV.png) 使用一對或數個負載平衡器 --- ## 分配的演算法有哪些? * 輪轉法 * 加權法 * 最小連接法 * 隨機法 * 一致性哈希法 --- ## 輪轉法 ![](https://i.imgur.com/51RS3e5.png) 每台伺服器會輪流接收封包。 --- ## 加權法 ![](https://i.imgur.com/GR3Ug57.png) 依伺服器性能賦予不同權重,依照權重派發封包。 --- ## 最小連接法 ![](https://i.imgur.com/YfUZgRG.png) 優先派發當前最小連接數的伺服器。 --- ## 隨機法 沒有硬性規定,封包會隨機分派。 --- ## 一致性哈希法 --- ![](https://i.imgur.com/RStDTWU.png) 依據客端ip求出客端的雜湊值。 --- ![](https://i.imgur.com/m63zGPK.png) 再依據伺服器ip求出伺服器的雜湊值。 --- ![](https://i.imgur.com/1nGsHAZ.png) 一致性哈希的方式可以大幅提高會話(session)的一致性,當然目前比較常見的方式是直接使用session共享的機制來完成會話一致性的功能。 --- # 實作GCP的LB --- 建立vm。 ![](https://i.imgur.com/JbqVtQ4.png) --- 建立映像檔,並以剛剛建的vm為來源磁碟。 ![](https://i.imgur.com/9CAKHXI.png) --- 建立vm範本,以剛剛建的映像檔為開機磁碟。 ![](https://i.imgur.com/U4bHUb4.png) --- 建立群組,設定2個vm,並以剛才建立的範本建立vm。 ![](https://i.imgur.com/GwnZp18.png) --- 建立lb防火牆的規則。 ![](https://i.imgur.com/rQYGsPS.png) --- 建立lb,並以剛才建立的群組為後端服務。 ![](https://i.imgur.com/znrJEz4.png) --- <center>End</center>
{"metaMigratedAt":"2023-06-15T16:16:06.177Z","metaMigratedFrom":"YAML","title":"LoadBalancer","breaks":true,"contributors":"[{\"id\":\"ff0dfb84-4555-42a5-a11c-2d1b32c63013\",\"add\":3089,\"del\":0}]"}
    343 views
   Owned this note