本章內容:
1.HTTP重定向
2.DNS域名解析
3.反向代理服務器
4.網絡層
5.鏈路層
上一章節講述了負載均衡時如何選擇目的轉發服務器IP地址,這章主要講述如何實現轉發。
一、HTTP重定向
HTTP 重定向負載均衡服務器使用某種負載均衡算法計算得到服務器的 IP 地址之后,將該地址寫入 HTTP 重定向報文中,狀態碼為 302。客戶端收到重定向報文之后,需要重新向服務器發起請求。
缺點:
- 需要兩次請求,因此訪問延遲比較高;
- HTTP 負載均衡器處理能力有限,會限制集群的規模。
該負載均衡轉發的缺點比較明顯,實際場景中很少使用它。
二、DNS域名解析
在 DNS 解析域名的同時使用負載均衡算法計算服務器 IP 地址。
優點:
- DNS 能夠根據地理位置進行域名解析,返回離用戶最近的服務器 IP 地址。
缺點:
- 由於 DNS 具有多級結構,每一級的域名記錄都可能被緩存,當下線一台服務器需要修改 DNS 記錄時,需要過很長一段時間才能生效。大型網站基本使用了 DNS 做為第一級負載均衡手段,然后在內部使用其它方式做第二級負載均衡。也就是說,域名解析的結果為內部的負載均衡服務器 IP 地址。
三、反向代理服務器
反向代理服務器位於源服務器前面,用戶的請求需要先經過反向代理服務器才能到達源服務器。反向代理可以用來進行緩存、日志記錄等,同時也可以用來做為負載均衡服務器。
在這種負載均衡轉發方式下,客戶端不直接請求源服務器,因此源服務器不需要外部 IP 地址,而反向代理需要配置內部和外部兩套 IP 地址。
優點:
- 與其它功能集成在一起,部署簡單。
缺點:
- 所有請求和響應都需要經過反向代理服務器,它可能會成為性能瓶頸。
四、網絡層
在操作系統內核進程獲取網絡數據包,根據負載均衡算法計算源服務器的 IP 地址,並修改請求數據包的目的 IP 地址,最后進行轉發。
源服務器返回的響應也需要經過負載均衡服務器,通常是讓負載均衡服務器同時作為集群的網關服務器來實現。
優點:
- 在內核進程中進行處理,性能比較高。
缺點:
- 和反向代理一樣,所有的請求和響應都經過負載均衡服務器,會成為性能瓶頸。
五、鏈路層
在鏈路層根據負載均衡算法計算源服務器的 MAC 地址,並修改請求數據包的目的 MAC 地址,並進行轉發。
通過配置源服務器的虛擬 IP 地址和負載均衡服務器的 IP 地址一致,從而不需要修改 IP 地址就可以進行轉發。也正因為 IP 地址一樣,所以源服務器的響應不需要轉發回負載均衡服務器,可以直接轉發給客戶端,避免了負載均衡服務器的成為瓶頸。
這是一種三角傳輸模式,被稱為直接路由。對於提供下載和視頻服務的網站來說,直接路由避免了大量的網絡傳輸數據經過負載均衡服務器。
這是目前大型網站使用最廣負載均衡轉發方式,在 Linux 平台可以使用的負載均衡服務器為 LVS(Linux Virtual Server)。