天天看點

印象最深的Bug處理-nginx代理雙節點頁面不停重新整理

入行第一年,就遇到這個問題,我記得很清晰,這也是我上班的第一個問題。一個項目2個tomcat上部署的是相同的應用,由于使用者現場要求不可為單機,簡單的類似于做了一個負載均衡叢集。

但是在一個特定的頁面通路時出現了一個問題:頁面一直在不斷的重新整理,在不停的通路頁面。但看起來似乎在跳轉到其他的URL下,但是頁面還是顯示的此頁面。

根據平時的經驗定位問題,有可能有如下幾個方面:

1.應用程式軟體包問題。

2.頁面重新整理機制存在問題。

3.叢集配置問題。

4.代理(nginx)配置問題。

問題分析:

1.若是代碼存在問題,需要和開發對接,聯系該項目對應的開發人員,确認包是否有問題。答案是開發不會存在問題,在測試環境中測試也沒有此問題。但是為什麼生産環境上就會存在此問題呢?

2.頁面重新整理機制和開發對接了下,确認在這個通路的頁面确實加入了重新整理的機制,但是不是實時重新整理,那為什麼呢?

好,基本上排除了前2項,再繼續考慮其他原因。

問題排查思路:

1.确認是否是叢集的問題導緻

(1)停止掉1台tomcat服務----通路頁面----我們發現頁面可以通路到,而且頁面是靜止的,不在一直重新整理。

(2)啟動停止掉的tomcat服務----通路頁面----又開始不斷的刷屏

确認是叢集導緻的問題。

2.既然是叢集導緻的問題,那麼我們是由nginx進行配置的代理。那會不會是nginx配置處不對呢??

檢視配置檔案:

代理位置配置如下:

upstream appleserver {

     server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=10s;

     server 127.0.0.2:8080 weight=1 max_fails=3 fail_timeout=10s;

  }

根據實際現場情況分析可能是nginx配置存在問題,于是想到了ip_hash的問題。

查了下資料顯示:Nginx中的ip_hash技術能夠将某個ip 的請求定向到同一台後端web機器中,這樣一來這個ip 下的用戶端和某個後端 web機器就能建立起穩固的session。

那麼我們頁面不斷的重新整理是不是由于沒有建立固定的session加上頁面的重新整理機制導緻的呢?

好那麼我們就來試下,配置檔案修改為:

upstream skyfanserver {

     ip_hash;#注意:添加了此行内容。

再次重新啟動nginx。

nginx -s reload

在浏覽器上通路頁面,檢視,嗯,解決了,頁面不在一直重新整理了!

印象最深的Bug處理-nginx代理雙節點頁面不停重新整理

雖然問題很簡單,但是作為第一個入行問題解決了我很開心。nginx是一個高性能的HTTP和反向代理服務,它是由一個俄羅斯的牛逼的大牛開發的,既可以用作中間件,又可用做負載均衡。Nginx是一款輕量級的Web 伺服器/反向代理伺服器,其特點是占有記憶體少,并發能力強。nginx常用的支援4種負載均衡排程算法(政策)有:輪訓、ip_hash、最少連接配接、權重算法。另外有2種是第三方的(不做詳解):fair(第三方) 響應時間方式 ,url_hash(第三方) 依據URL配置設定方式。每個請求按通路IP的hash值結果進行配置設定,同一個IP用戶端固定通路一個後端伺服器。可以保證來自同一ip的請求被打到固定的機器上,可以解決session問題。如果後端伺服器down掉,要手工down掉。在實際環境運用中,需要根據不同的場景選擇性運用,大都是多種政策結合使用并且根據項目實際需求來确認。

繼續閱讀