server 192。168。0。21:80 weight=5 max_fails=2 fail_timeout=600s;
}
3。
1)max_fails = NUMBER ---- 在一定時間內(這個時間在fail_timeout引數中設定)檢查這個伺服器是否可用時產生的最多失敗請求數,預設為1,將其設定為0可以關閉檢查,這些錯誤在proxy_next_upstream或fastcgi_next_upstream(404錯誤不會使max_fails增加)中定義;
3。
2)fail_timeout = TIME ---- 在這個時間內產生了max_fails所設定大小的失敗嘗試連線請求後這個伺服器可能不可用,同樣它指定了伺服器不可用的時間(在下一次嘗試連線請求發起之前),預設為10秒,fail_timeout與前端響應時間沒有直接關係,不過可以使用proxy_connect_timeout和 proxy_read_timeout來控制。
測試發現的問題及解決辦法
1、當後端兩臺PHP應用伺服器都正常時,訪問速度非常快,檢視日誌,原來一個請求,是後端兩臺伺服器同時響應的;
2、為了模仿故障測試,停掉一臺PHP應用伺服器,這時再訪問,請求開啟一頁面時,發現有一半響應比較快,另一半響應很慢,最後頁面是可以開啟,但速度不理想,很慢,檢視error日誌,發現nginx還是把請求的一半發往已停掉的那臺伺服器,難怪會這麼慢;但當很快(10秒內)再開啟一個請求頁面時,速度又非常快了,檢視日誌,發現nginx不會把請求的一半發往已停掉的那臺伺服器;過一會再發起一個請求時,又出現有一半響應比較快另一半響應很慢的現象了,檢視日誌,nginx又把請求的一半發往已停掉的那臺伺服器;
3、到這裡,我明白了nginx檢查後端應用伺服器的健康時是有一個時間間隔的,應該怎樣處理這個問題呢,當後端有一臺伺服器down機時,使用者訪問感覺不出有慢的現象?原來在nginx負載均衡配置里加上下面兩個引數時可以有效的解決這個問題:
upstream phpserver {
server 192。
168。0。20:80 weight=5 max_fails=2 fail_timeout=600s;
server 192。168。0。21:80 weight=5 max_fails=2 fail_timeout=600s;
}
3。
1)max_fails = NUMBER ---- 在一定時間內(這個時間在fail_timeout引數中設定)檢查這個伺服器是否可用時產生的最多失敗請求數,預設為1,將其設定為0可以關閉檢查,這些錯誤在proxy_next_upstream或fastcgi_next_upstream(404錯誤不會使max_fails增加)中定義;
3。
2)fail_timeout = TIME ---- 在這個時間內產生了max_fails所設定大小的失敗嘗試連線請求後這個伺服器可能不可用,同樣它指定了伺服器不可用的時間(在下一次嘗試連線請求發起之前),預設為10秒,fail_timeout與前端響應時間沒有直接關係,不過可以使用proxy_connect_timeout和 proxy_read_timeout來控制。
我設定當有2個請求失敗,就表示後端的伺服器不可用,在以後的600S時間內nginx不會再把請求發往已檢查出標記為不可用的伺服器,再次測試時,把後端一臺PHP應用服務務器停掉,只是有一個請求開啟頁面時出現上面的現象,以後10分鐘內都不會出現了,請求頁面開啟速度正常,fail_timeout的值可以根據你的實際情況而定。
編輯推薦:
如何實現IPv6和IPv4的協同工作?
IPv6遷移將帶來更專業的服務體制
如何簡化企業資料中心的運維管理?。