集群中的應用伺服器(節點)通常被設計成無狀態,使用者可以請求任何乙個節點。
負載均衡器會根據集群中每個節點的負載情況,將使用者請求**到合適的節點上。
負載均衡器可以用來實現高可用以及伸縮性:
負載均衡器執行過程包含兩個部分:
根據負載均衡演算法得到**的節點;
進行**。
1. 輪詢(round robin)
輪詢演算法把每個請求輪流傳送到每個伺服器上。
下圖中,一共有 6 個客戶端產生了 6 個請求,這 6 個請求按 (1, 2, 3, 4, 5, 6) 的順序傳送。(1, 3, 5) 的請求會被傳送到伺服器 1,(2, 4, 6) 的請求會被傳送到伺服器 2。
該演算法比較適合每個伺服器的效能差不多的場景,如果有效能存在差異的情況下,那麼效能較差的伺服器可能無法承擔過大的負載(下圖的 server 2)。
2. 加權輪詢(weighted round robbin)
加權輪詢是在輪詢的基礎上,根據伺服器的效能差異,為伺服器賦予一定的權值,效能高的伺服器分配更高的權值。
例如下圖中,伺服器 1 被賦予的權值為 5,伺服器 2 被賦予的權值為 1,那麼 (1, 2, 3, 4, 5) 請求會被傳送到伺服器 1,(6) 請求會被傳送到伺服器 2。
3. 最少連線(least connections)
由於每個請求的連線時間不一樣,使用輪詢或者加權輪詢演算法的話,可能會讓一台伺服器當前連線數過大,而另一台伺服器的連線過小,造成負載不均衡。
例如下圖中,(1, 3, 5) 請求會被傳送到伺服器 1,但是 (1, 3) 很快就斷開連線,此時只有 (5) 請求連線伺服器 1;(2, 4, 6) 請求被傳送到伺服器 2,只有 (2) 的連線斷開,此時 (6, 4) 請求連線伺服器 2。該系統繼續執行時,伺服器 2 會承擔過大的負載。
最少連線演算法就是將請求傳送給當前最少連線數的伺服器上。
例如下圖中,伺服器 1 當前連線數最小,那麼新到來的請求 6 就會被傳送到伺服器 1 上。
4. 加權最少連線(weighted least connection)
在最少連線的基礎上,根據伺服器的效能為每台伺服器分配權重,再根據權重計算出每台伺服器能處理的連線數。
5. 隨機演算法(random)
把請求隨機傳送到伺服器上。
和輪詢演算法類似,該演算法比較適合伺服器效能差不多的場景。
6. 源位址雜湊法 (ip hash)
源位址雜湊通過對客戶端 ip 計算雜湊值之後,再對伺服器數量取模得到目標伺服器的序號。
可以保證同一 ip 的客戶端的請求會**到同一臺伺服器上,用來實現會話粘滯(sticky session)
1. http 重定向
http 重定向負載均衡伺服器使用某種負載均衡演算法計算得到伺服器的 ip 位址之後,將該位址寫入 http 重定向報文中,狀態碼為 302。客戶端收到重定向報文之後,需要重新向伺服器發起請求。
缺點:該負載均衡**的缺點比較明顯,實際場景中很少使用它。
2. dns 網域名稱解析
在 dns 解析網域名稱的同時使用負載均衡演算法計算伺服器 ip 位址。
優點:缺點:
3. 反向**伺服器
反向**伺服器位於源伺服器前面,使用者的請求需要先經過反向**伺服器才能到達源伺服器。反向**可以用來進行快取、日誌記錄等,同時也可以用來做為負載均衡伺服器。
在這種負載均衡**方式下,客戶端不直接請求源伺服器,因此源伺服器不需要外部 ip 位址,而反向**需要配置內部和外部兩套 ip 位址。
優點:缺點:
4. 網路層
在作業系統核心程序獲取網路資料報,根據負載均衡演算法計算源伺服器的 ip 位址,並修改請求資料報的目的 ip 位址,最後進行**。
源伺服器返回的響應也需要經過負載均衡伺服器,通常是讓負載均衡伺服器同時作為集群的閘道器伺服器來實現。
優點:缺點:
5. 鏈路層
在鏈路層根據負載均衡演算法計算源伺服器的 mac 位址,並修改請求資料報的目的 mac 位址,並進行**。
通過配置源伺服器的虛擬 ip 位址和負載均衡伺服器的 ip 位址一致,從而不需要修改 ip 位址就可以進行**。也正因為 ip 位址一樣,所以源伺服器的響應不需要**回負載均衡伺服器,可以直接**給客戶端,避免了負載均衡伺服器的成為瓶頸。
這是目前大型**使用最廣負載均衡**方式,在 linux 平台可以使用的負載均衡伺服器為 lvs(linux virtual server)。
參考:乙個使用者的 session 資訊如果儲存在乙個伺服器上,那麼當負載均衡器把使用者的下乙個請求**到另乙個伺服器,由於伺服器沒有使用者的 session 資訊,那麼該使用者就需要重新進行登入等操作。
需要配置負載均衡器,使得乙個使用者的所有請求都路由到同乙個伺服器,這樣就可以把使用者的 session 存放在該伺服器中。
缺點:
在伺服器之間進行 session 同步操作,每個伺服器都有所有使用者的 session 資訊,因此使用者可以向任何乙個伺服器進行請求。
缺點:
使用乙個單獨的伺服器儲存 session 資料,可以使用傳統的 mysql,也使用 redis 或者 memcached 這種記憶體型資料庫。
優點:缺點:
參考:
負載均衡基礎概念
一 負載均衡 負載均衡的目的就是讓請求到達不同的伺服器上。一次請求到伺服器之間,有那麼多環節,因此可以實現的方法有很多種,實際應用中不外乎以下幾種方式。1.http重定向負載均衡 http重定向負載均衡有一台重定向伺服器,它也是一台普通的伺服器,其唯一的功能就是根據使用者的http請求計算一台應用集...
Apache tomcat集群(負載均衡)
本次實踐我是在windows系統的環境下進行的,apache是2.2.21版本,tomcat是7.0.16和7.0.23兩個版本 集群中tomcat不能既有tomcat6又有tomcat7,否則雖能夠負載均衡,但不能進行session複製 2.配置tomcat 1 首先講講tomcat需要配置的檔案...
集群與負載均衡
集群是一組協同工作的服務實體。當客戶請求到來時,集群內部的負載均衡器會比較均衡的把很多客戶的請求分布到集群環境下的計算和網路資源,也就是說,負載均衡是集群的乙個重要特性。集群的另外乙個特性就是錯誤恢復的能力,當乙個實體中的資源不能工作,另乙個實體中的資源透明的繼續完成任務的過程叫做錯誤恢復。集群實體...