業務量上來了,一台服務器扛不住了,怎麼辦?加機器是第一反應,但加完之後怎麼把流量合理分配到每台機器上?這就是負載均衡要解決的問題。
一、什麼是負載均衡?
負載均衡(Load Balancing)是將網絡流量分發到多台服務器的技術,目的是:
- 提高可用性:單台服務器故障不影響服務
- 提升性能:多台服務器並行處理,吞吐量更大
- 彈性擴展:根據負載動態增減服務器
二、負載均衡類型
1. 硬件負載均衡
- 專用硬件設備,如F5 BIG-IP
- 性能強勁,價格昂貴
- 適合大型企業
2. 軟件負載均衡
- 運行在普通服務器上的軟件
- 如Nginx、HAProxy、LVS
- 成本低,靈活性高
3. 雲負載均衡
- 雲服務商提供的託管服務
- 無需運維,按需付費
- 如AWS ELB、阿里雲SLB
三、負載均衡算法
1. 輪詢(Round Robin)
請求依次分發到每台服務器。
- 優點:簡單均勻
- 缺點:不考慮服務器性能差異
2. 加權輪詢(Weighted Round Robin)
根據服務器權重分配請求,權重高的服務器接收更多請求。
- 適合服務器配置不同的場景
3. 最少連接(Least Connections)
將請求分發到當前連接數最少的服務器。
- 適合請求處理時間差異大的場景
4. IP哈希(IP Hash)
根據客户端IP計算哈希值,同一IP總是分配到同一服務器。
- 適合需要會話保持的場景
5. URL哈希
根據請求URL計算哈希值,相同URL分配到同一服務器。
- 適合配合緩存使用
四、健康檢查
負載均衡器需要檢測後端服務器的健康狀態:
檢查方式
- TCP檢查:檢測端口是否可連接
- HTTP檢查:檢測特定URL返回是否正常
- 自定義檢查:執行自定義腳本
檢查參數
- 檢查間隔:多久檢查一次
- 超時時間:多久沒響應算失敗
- 失敗閾值:連續失敗幾次標記為不健康
- 恢復閾值:連續成功幾次恢復健康
五、會話保持
有些應用需要同一用户的請求發送到同一服務器:
實現方式
- Cookie方式:在響應中設置Cookie標識
- 源IP方式:根據客户端IP綁定服務器
- Header方式:根據特定HTTP頭綁定
更好的方案
將會話存儲到共享存儲(如Redis),使應用無狀態,避免會話保持的複雜性。
六、Nginx負載均衡配置示例
upstream backend {
# 加權輪詢
server 192.168.1.1:8080 weight=3;
server 192.168.1.2:8080 weight=2;
server 192.168.1.3:8080 weight=1;
# 健康檢查(需要模塊支持)
# health_check interval=5s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
飛盾雲負載均衡
- 多種算法:支持輪詢、加權、最少連接等算法
- 健康檢查:自動檢測故障服務器並摘除
- 會話保持:支持Cookie和IP方式
- 高可用:負載均衡器本身高可用,無單點故障
- 結合CDN:與CDN無縫集成,一站式加速防護
總結
負載均衡是構建高可用系統的基礎設施,選擇合適的負載均衡類型和算法,配合健康檢查機制,可以有效提升系統的可用性和性能。