【整理總結】負載均衡淺析

運營研發團隊 施洪寶html

一. 基礎知識

1.1 基礎

  1. 什麼是負載均衡?
當單機提供的併發量不能知足需求時,咱們須要多臺服務器同時服務。當客戶請求到達時,如何爲客戶選擇最合適的服務器?這個問題就是負載均衡問題。
  1. 負載均衡主要須要解決的問題是哪些?
  • 從客戶端的角度上看,客戶須要最快速的獲得服務器的相應,負載均衡時須要找出能最快相應客戶需求的服務器進行服務。
  • 從服務端來看如何使得每臺服務器都能達到較高的利用率,最大限制的爲用戶提供快速、可靠的服務是服務端須要考慮的主要問題。

1.2 負載均衡分類

  1. 硬件
  • F5
  1. 軟件
  • dns負載均衡
  • LVS負載均衡(4層)
  • nginx, haproxy(7層)

二. F5負載均衡

  1. F5是一家美國的公司,該公司生產一些硬件設備能夠做爲負載均衡器使用(例如:big-ip), 本文後續部分所說的F5是指其負載均衡器產品。
  2. 不一樣的產品實現的功能不一致,具體狀況須要根據產品說明書。
  3. F5能夠在4-7層內作負載均衡,用戶能夠根據需求進行配置。
  4. 因爲F5能夠作7層負載均衡,故而能夠實現會話管理,http處理等。

2.1 數據轉發模式

  1. standard類型, 這種模式下,客戶端與F5服務器創建鏈接,F5服務器與真實服務器創建鏈接,F5服務器將客戶需求轉發給真實服務器,並將真實服務器的相應轉發給客戶端,此時F5能夠查看請求和相應的全部信息。
  2. 四層轉發模式(performance L4), 這種模式下,F5只處理4層如下的數據。客戶端將數據發送給F5, F5僅將數據轉發給真實服務器,包括TCP的握手數據包以及揮手數據包,真實服務器須要先將數據發送給F5服務器,F5將其轉發給客戶端。
  3. 路由模式, 這種模式與LVS的DR模式相似。
  4. ...

2.2 負載均衡算法

  1. 輪詢,加權輪詢。
  2. 源地址哈希
  3. ...

2.3 小結

F5的優點在於功能強大,併發量高,能知足客戶的大多數需求,但其成本較高,通常大型國企可能會使用。nginx

2.4 參考

三. dns負載均衡

  1. dns負載均衡由dns服務提供廠商提供。
  2. 最初的dns負載均衡提供簡單輪詢,不能根據客戶端或者服務端狀態進行選擇。
  3. 目前,有些dns服務廠商能夠提供智能dns服務,用戶能夠設置負載均衡方案,例如:根據客戶端ip地址,選擇就近的服務器。
  4. 對於目前大多數的公司而言,爲了更好的服務用戶,一般會使用dns負載均衡,將用戶按照就近原則,分配到某個集羣服務器上。以後,集羣內再採用其餘的負載均衡方案。

四. Linux Virtual Server(LVS)

  1. LVS經過修改數據包Ip地址,Mac地址實現負載均衡。
  2. LVS由ipvs(內核中), ipvsadm(用戶態)組成。LVS須要理解tcp,ip頭部。
  3. 當tcp握手信號,SYN數據包達到時,ipvs選擇一個後端服務器,將數據包進行轉發。在此以後,全部包含相同的ip,tcp頭部的數據包都會被轉發到以前選擇的服務器上。很明顯,ipvs沒法感知數據包內容。

4.1 分類

  • LVS-NAT
  • LVS-DR
  • LVS-TUN

4.2 基本原理

4.2.1 LVS-DR

LVS-DR模式的基本原理以下圖所示:
image算法

4.2.2 LVS-NAT

LVS-NAT模式的基本原理以下圖所示:
image後端

4.3 負載均衡算法

4.3.1 靜態算法

  1. 輪詢(Round Robin, RR)
  2. 加權輪詢(Weight Round Robin, WRR)
  3. 源地址Hash(Source Hash, SH)
  4. 目的地址Hash(Destination Hash, DH), 能夠設置多個VIP

4.3.2 動態算法

  1. 最少鏈接(Least Connections, LC),找出當前鏈接數最小的服務器
  2. 加權最少鏈接(Weighted Least Connections, WLC)
  3. 最短時間望延遲(Shortest Expected Delay Scheduling, SED) 基於WLC。例如: 現有A, B, C三臺服務器,權重分別爲100,200,300,當前的鏈接數分別爲1,2,3,下一個鏈接到達時,經過計算指望時延選擇服務器(1+1)/100, (2+1)/200, (3+1)/300, 故而選擇C服務器。
  4. 永不排隊(Never Queue Scheduling, NQ), 改進的sed, 若是某臺服務器鏈接數爲0,直接鏈接過去,不在進行sed計算。
  5. 基於局部性的最少鏈接(locality-Based Least Connections, LBLC),根據目標ip, 找出目標ip最近使用的服務器,若是服務器存在而且負載沒有大於一個閾值,則將新的鏈接分配到這個服務器上,不然按照最少鏈接找出一個服務器處理該請求。
  6. 帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication, LBLCR),根據目標ip,維護一個服務器組,每次從組中挑選服務器,若是服務器不能夠處理,則從全部服務器中按照最少鏈接挑選出一臺服務器,並將其加入到目標ip的處理組服務器中。

4.3 參考

五. Nginx Load Balance

  1. nginx負載均衡工做在7層,它會與client、upstream分別創建tcp鏈接,nginx須要維護這兩個鏈接的狀態。
  2. nginx的stream模塊能夠用於4層負載均衡,但通常不多使用。

5.1 基本原理

nginx作7層負載均衡的基本原理以下圖所示:
image服務器

5.2 負載均衡算法

  1. 輪詢(默認)
  2. 加權輪詢
  3. 源ip哈希
  4. 響應時間
  5. url 哈希
相關文章
相關標籤/搜索