服務器集羣,是經過多個服務器共同處理負荷,實現負載均衡分擔壓力的一種措施.但是隨之而來也有一些問題:根據用戶的反向代理的調用.用戶不清楚本身到底訪問的是哪臺服務器.那麼應該如何測試負載均衡呢???java
咱們能夠經過1個url請求獲取訪問服務器端口號便可.nginx
如今項目中application.yml文件中修改端口爲8081,再經過@value動態賦值爲屬性,代碼以下:瀏覽器
@RestController public class PortController { /** * 經過Spring容器動態獲取YML配置文件中的端口便可 */ @Value("${server.port}") private int port; @RequestMapping("/getPort") public String getPort(){ return "當前訪問的端口號爲:"+port; } }
這樣當咱們訪問項目的getPort映射時就會顯示對應服務器的端口號,能夠依據此端口號來進行測試.tomcat
咱們將項目系統打成3個war包程序. 端口號分別爲8081/8082/8083,以後經過java命令(java -jar 808X.war)啓動3個cmd窗口也就是3臺服務器.服務器
項目打包:
先修改端口號以後,將maven進行clean/install打包操做.app
經過java -jar 808X.war將項目發佈後而後依次在瀏覽器進行訪問測試.負載均衡
咱們如今須要經過manage.com的方式訪問服務器時,要求經過反向代理的方式實現.要求配置nginx中集羣.maven
#配置後臺管理系統 server { listen 80; server_name manage.jt.com; location / { #root 表明文件目錄 #index 表明默認的訪問頁面 #proxy_pass 表明發起url請求 proxy_pass http://jtW; } } #配置集羣的關鍵字 經過集羣配置tomcat服務器便可 #默認: 1.輪詢的機制 upstream jtW { server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }
根據配置文件的順序,以後依次訪問服務器. 該策略也是默認的機制.測試
#默認: 1.輪詢的機制 upstream jtW { server 127.0.0.1:8081; server 127.0.0.1:8082; server 127.0.0.1:8083; }
公司採購服務器都是有時間間隔的. 可是因爲服務器新舊不一樣,硬件版本不一樣,致使服務器處理能力不一樣.
若是上述的問題不作處理,依然採用輪詢的機制,則會出現嚴重的負載不均衡的現象.
因此須要經過權重的方式平衡壓力,weight值越大.url
#配置集羣的關鍵字 經過集羣配置tomcat服務器便可 #默認: 1.輪詢的機制 2.權重策略 upstream jtW { server 127.0.0.1:8081 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
當某些業務須要用戶特定的訪問固定的服務器時,就要選用iphash機制.
#默認: 1.輪詢的機制 2.權重策略 3.IPHASH upstream jtW { ip_hash; server 127.0.0.1:8081 weight=6; server 127.0.0.1:8082 weight=3; server 127.0.0.1:8083 weight=1; }
能夠了解一下iphash是如何選擇服務器的:
會經過ip地址的hash值對服務器數量進行取模,而後只訪問取模爲零的服務器,只有該服務器宕機後纔會再訪問其餘的.
若是tomcat服務器發生了宕機的現象,則經過配置文件標識down的屬性,則nginx將不會再次訪問故障機.server 127.0.0.1:8081 down;
一般狀況下 都會部署一些備用機防止因爲主機宕機,剩餘的機器不能實現高負責從而致使整個服務宕機的問題.
若是設置了備用機,則正常狀況下用戶不會訪問.可是當主機宕機或者主機遇忙時纔會訪問.server 127.0.0.1:8083 backup;
1).max_fails=1 配置nginx訪問服務器的最大的失敗次數.
2).fail_timeout=60s; 理解爲一個時間週期. 若是發現服務器宕機,則在60秒內不會再次訪問故障機.server 127.0.0.1:8081 max_fails=1 fail_timeout=60s;