Apache-2.2
在預算上對 Apache 進行負載平衡?
我試圖理解負載平衡的概念,以確保可用性和冗餘,以便在出現問題時讓使用者滿意,而不是為了為數百萬使用者提供極快的速度而進行負載平衡。
我們的預算有限,並試圖堅持有大量可用知識的東西,所以在一些著名的搜尋引擎收購我們之前,在 Ubuntu VPS 上執行 Apache 似乎是一種策略(包括週六的諷刺,請注意)。
至少對我來說,這是一個完整的不同解決方案的叢林。Apaches 自己的 mod_proxy 和 HAproxy 是我們通過快速Google搜尋找到的兩個,但是對於負載平衡的經驗為零,我不知道什麼適合我們的情況,或者我們在選擇解決方案來解決我們的問題時會照顧什麼可用性問題。
對我們來說最好的選擇是什麼?我們應該怎麼做才能在不超出預算的情況下獲得高可用性?
我使用的解決方案,可以通過 VPS 輕鬆實現,如下所示:
- DNS 輪詢 (sp?) 到 6 個不同的有效 IP 地址。
- 我有 3 個具有相同配置的負載均衡器,並使用corosync/pacemaker均勻地分配 6 個 ip 地址(因此每台機器都有 2 個地址)。
- 每個負載均衡器都有一個nginx + varnish配置。Nginx 處理接收連接並進行重寫和一些靜態服務,並將其傳遞回執行負載平衡和記憶體的 Varnish。
根據我的偏見,該拱門具有以下優點:
- corosync/pacemaker 將在其中一個 LB 發生故障時重新分配 IP 地址。
- nginx 可用於直接從文件系統或 NFS 提供 SSL、某些類型的文件,而無需使用記憶體(大影片、音頻或大文件)。
- Varnish 是一個非常好的負載均衡器,支持權重、後端健康檢查,並且在反向代理方面做得非常出色。
- 如果需要更多 LB 來處理流量,只需將更多機器添加到集群中,IP 地址將在所有機器之間重新平衡。您甚至可以自動完成(添加和刪除負載均衡器)。這就是為什麼我為 3 台機器使用 6 ips,以留出一些增長空間。
在您的情況下,物理上分離的 VPS 是一個好主意,但會使 ip 共享更加困難。目標是擁有一個抗故障的冗餘系統,以及一些用於負載平衡/HA 端的配置將其弄亂,添加一個單點故障(如單個負載平衡器來接收所有流量)。
我也知道你問過 apache,但那些日子我們有更適合這項工作的特定工具(如 nginx 和 varnish)。讓 apache 在後端執行應用程序並使用其他工具為其提供服務(並不是說 apache 不能很好地進行負載平衡或反向代理,這只是將工作的不同部分解除安裝到更多服務的問題,因此每個部分都可以做得很好這是分享)。