協議支援
nginx工作在網路的7層,可以針對http應用本身來做分流策略。支援七層http、https協議的負載均衡。對四層協議的支援需要第三方外掛程式-yaoweibin的ngx_tcp_proxy_module實現了tcp upstream。
此外,nginx本身也逐漸在完善對其他協議的支援:
nginx 1.3.13 開發版支援websocket**。
nginx 1.3.15開發版支援spdy。 2.2 均衡策略 nginx的負載均衡策略可以劃分為兩大類:內建策略和擴充套件策略。內建策略包含加權輪詢和ip hash,在預設情況下這兩種策略會編譯進nginx核心,只需在nginx配置中指明引數即可。擴充套件策略有很多,如fair、通用hash、 consistent hash等,預設不編譯進nginx核心。 加權輪詢(weighted round robin) 輪詢的原理很簡單,首先我們介紹一下輪詢的基本流程。如下是處理一次請求的流程圖: nginx負載均衡 圖中有兩點需要注意,第一,如果可以把加權輪詢演算法分為先深搜尋和先廣搜尋,那麼nginx採用的是先深搜尋演算法,即將首先將請求都分給高權重的機器,直 到該機器的權值降到了比其他機器低,才開始將請求分給下乙個高權重的機器;第二,當所有後端機器都down掉時,nginx會立即將所有機器的標誌位清成 初始狀態,以避免造成所有的機器都處在timeout的狀態,從而導致整個前端被夯住。 ip hash ip hash是nginx內建的另乙個負載均衡的策略,流程和輪詢很類似,只是其中的演算法和具體的策略有些變化,如下圖所示: nginx負載均衡 ip hash演算法的核心實現如下: for(i = 0;i < 3;i++)
p = hash % iphp->rrp.peers->number;
從**中可以看出,hash值既與ip有關又與後端機器的數量有關。經過測試,上述演算法可以連續產生1045個互異的value,這是該演算法的硬限制。對 此nginx使用了保護機制,當經過20次hash仍然找不到可用的機器時,演算法退化成輪詢。因此,從本質上說,ip hash演算法是一種變相的輪詢演算法,如果兩個ip的初始hash值恰好相同,那麼來自這兩個ip的請求將永遠落在同一臺伺服器上,這為均衡性埋下了很深的 隱患。
fair fair策略是擴充套件策略,預設不被編譯進nginx核心。其原理是根據後端伺服器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網路環境往往不是那麼簡單,因此要慎用。 通用hash、一致性hash 這兩種也是擴充套件策略,在具體的實現上有些差別,通用hash比較簡單,可以以nginx內建的變數為key進行hash,一致性hash採用了nginx內建的一致性hash環,可以支援memcache。 2.2 配置示例 http http {
upstream www.s135.com {
server 192.168.1.2:80;
server 192.168.1.3:80;
server{
listen 80;
server_name www.s135.com;
location / {
proxy_pass
proxy_set_header host $host;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.1;#設定為可訪問該狀態資訊的ip
nginx 負載均衡 Nginx負載均衡策略
nginx提供的負載均衡策略有2種 內建策略和擴充套件策略。內建策略為輪詢 預設 加權輪詢,ip hash,第三方。upstream mysvr1 輪詢 每個請求按照時間順序逐一的分配到每乙個後台伺服器上。如果某台伺服器宕機了,將會自動的剔除宕機的服務。nginx預設就是輪詢其權重都預設為1,伺服器...
nginx負載均衡
nginx 的 upstream目前支援 4 種方式的分配 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。2 weight 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。3 ip hash 每個請求按訪問ip的hash...
nginx負載均衡
nginx s stop quick exit nginx s quit graceful quit nginx s reload changing configuration,starting a new worker,quitting an old worker gracefully nginx...