負載均衡 (Load Balancing) 負載均衡建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
nginx 可以按照
輪詢、ip哈希、url哈希、權重等多種方式對後端服務器做負載均衡,負載均衡可以自動剔除掛掉的服務器。
nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(默認)每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
2)、指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
3)、每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
4)、fair(第三方)按後端服務器的響應時間來分配請求,響應時間短的優先分配。
5)、url_hash(第三方)
配置:
#在http節點裏添加
#定義負載均衡設備的 Ip及設備狀態
upstream www.abc.com{
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
proxy_pass www.abc.com
upstream 每個設備的狀態:
down 表示單前的server暫時不參與負載
weight 默認爲1.weight越大,負載的權重就越大。
max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
fail_timeout:max_fails 次失敗後,暫停的時間。
backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
負載均衡中實現多臺服務器之間的session的共享:
1、不使用session,使用cookie;因爲session的數據的存放在服務端,而cookie的數據存在客戶端的web瀏覽器
2、服務器間自動實現共享,例如將session保存在數據庫,但是會都數據庫造成一定的壓力。
3、用memcached來保存,memcached是高性能的分佈式內存緩存服務器。 一般的使用目的是,通過緩存數據庫查詢結果,減少數據庫訪問次數,以提高動態Web應用的速度、 提高可擴展性。
4、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器。ip_hash僅僅是根據ip來分配後端服務器,所以必須滿足以下的條件:a、naginx必須是最前端的服務器;b、nginx的後端不存在其他方式的負載均衡。不然很有可能客戶端不能定位到同一臺服務器,從而導致共享session失敗。
5、url_hash
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器。