利用nginx實現負載均衡


1、安裝nginx和tomcat

我這里是使用docker安裝的。安裝流程可參照 dockerfile

這里安裝了兩個tomcat,端口分別是42000和42001。第二個tomcat的首頁隨便加了些代碼區分

2、nginx配置

#這里的域名要和下面proxy_pass的一樣
upstream  fengzp.com {   
    server    192.168.99.100:42000  weight=1; 
    server    192.168.99.100:42001  weight=2;  
}     

server {  
    listen       80; 
    server_name  192.168.99.100;  

location / {  
        proxy_pass http://fengzp.com;  
        proxy_redirect default;  
    }  

    error_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   html;  
    }  
}

3、測試

刷新頁面發現頁面會發生變化,證明負載配置成功。因為我配的權重第二個是第一個的兩倍,所以第二個出現的概率會是第一個的兩倍。

4、后續問題

如果關了tomcat1,再多次刷新頁面,接下來出現的就會都是tomcat2的頁面,但是時而快時而慢。這其中原因是當如果nginx將請求轉發到tomcat2時,服務器會馬上跳轉成功,但是如果是轉到tomcat1,因為tomcat1已經關閉了,所以會出現一段等待響應過程的過程,要等它失敗后才會轉到tomcat2。
而這個等待響應的時間我們是可以配置的。

這個時間由以下3個參數控制:
proxy_connect_timeout:與服務器連接的超時時間,默認60s
fail_timeout:當該時間內服務器沒響應,則認為服務器失效,默認10s
max_fails:允許連接失敗次數,默認為1

等待時間 = proxy_connect_timeout + fail_timeout * max_fails

如果我這樣配置的話,只需等待6秒就可以了。

5、負載均衡策略

1、輪詢

這種是默認的策略,把每個請求按順序逐一分配到不同的server,如果server掛掉,能自動剔除。

upstream  fengzp.com {   
	server   192.168.99.100:42000; 
	server   192.168.99.100:42001;  
}

2、最少連接

把請求分配到連接數最少的server

upstream  fengzp.com {   
	least_conn;
	server   192.168.99.100:42000; 
	server   192.168.99.100:42001;  
}

3、權重

使用weight來指定server訪問比率,weight默認是1。以下配置會是server2訪問的比例是server1的兩倍。

upstream  fengzp.com {   
	server   192.168.99.100:42000 weight=1; 
	server   192.168.99.100:42001 weight=2;  
}

4、ip_hash

每個請求會按照訪問ip的hash值分配,這樣同一客戶端連續的Web請求都會被分發到同一server進行處理,可以解決session的問題。如果server掛掉,能自動剔除。

upstream  fengzp.com {   
	ip_hash;
	server   192.168.99.100:42000; 
	server   192.168.99.100:42001;  
}

ip_hash可以和weight結合使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM