07.08 LVS+Keepalived+Nginx高可用負載均衡方案

負載均衡的基本思想是把單臺服務器的訪問分流到多臺服務器,避免系統崩潰。以下是幾種常見的解決方案。

1. Nginx反向代理

Nginx通過反向代理技術實現分流,可以按照設定的訪問規則將請求轉發給相應的後臺服務器。

反向代理是指當用戶訪問網絡上某個服務的時候,訪問到的實際上是代理服務器,代理服務器轉發用戶請求到真正處理該業務的後臺服務器,最後轉發結果回來給用戶。後臺服務器被代理了,對用戶不可見。

相比較的,正向代理則是指我們通常的翻牆過程。用戶訪問代理服務器,代理服務器轉發請求給目標服務器,目標服務器返回結果給代理服務器,再轉發回給用戶。用戶被代理了,對目標服務器不可見。

Nginx支持幾種常見的負載調度算法:輪詢、加權輪詢、ip hash、fair、url hash。一致性哈希算法可保證同一個IP的請求落在同一臺後端服務器,其他算法須解決不同服務器的Session共享問題。

Nginx支持健康檢查,實現後端服務器的自動上下線,可以提高系統的請求成功率。如果一個服務器請求失敗,可立即切換到其他服務器,直到請求成功或者最後一臺服務器失敗為止。

2. Keepalived+Nginx實現雙機熱備

當使用一臺Nginx作為反向代理服務器時,這臺服務器就變得異常重要,須避免出現單點故障。Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障。

使用Keepalived可以輕量級地實現Nginx的雙機熱備。即前端使用兩臺服務器,當其中一臺服務器發生故障時,另一臺服務器接管故障機的公網虛擬IP,繼續提供負載均衡服務。

3. LVS+Keepalived+Nginx增加吞吐量和穩定性

Nginx的請求轉發是基於HTTP層的,所有流量都要經過Nginx。當後端服務器規模龐大時,Nginx的網絡帶寬就會成為一個瓶頸。

這時可引入LVS負責第一層負載,通過LVS將請求路由到後端若干臺Nginx上,Nginx再轉發給內部其中一臺應用服務器進行處理,最後Nginx直接將結果轉發給用戶,無需再經過LVS服務器。

以上過程實際上用到的是LVS/DR(Linux Virtual Server via Direct Routing)技術,它通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。

LVS還提供的另外兩種IP負載均衡技術是:VS/NAT(Virtual Server via Network Address Translation)和VS/TUN(Virtual Server via IP Tunneling)。

LVS通過MAC地址改寫和網絡地址轉換等方式來同步轉發請求,主要是基於網絡層和鏈路層,因而效率非常高。

引入LVS後,Nginx變成了集群,Keepalived主要用來保證LVS的高可用,建立LVS雙機熱備。LVS 可以對後端Nginx進行健康檢查(不能重新發送請求)。LVS也支持多種負載調度算法,如:RR, WRR, LC, WLC, LBLC, LBLCR, DH, SH。

4. DNS和CDN網絡優化

DNS(Domain Name System)中一個域名可對應多個IP,因而可通過DNS輪詢來實現負載均衡。同時DNS智能解釋可保證返回給用戶的IP離用戶儘可能的近。

還可以進一步按照業務系統拆分二級域名,對於每一個業務系統建立獨立的負載均衡層。

CDN(Content Delivery Network)主要用於緩存圖片、多媒體文件等各種靜態文件資源。將這些靜態資源保存到離用戶更近的各個網絡節點,可以大大提高用戶訪問效率和節省服務器外網出口帶寬。

LVS+Keepalived+Nginx高可用負載均衡方案


分享到:


相關文章: