nginx+tomcat實現負載均衡(windows環境)


一、准備工作

  1. nginx1.14
    nginx1.14下載鏈接

  2. tomcat8
    tomcat8下載鏈接

  3. windows系統

二、實現目標

訪問http://localhost地址時, 將請求輪詢到tomcat1tomcat2服務器上, 實現負載均衡, 並通過proxy_connect_timeout 1;配置, 實現其中一台服務器宕機能快速切換到另一台服務器上面, 從而不影響使用

  1. 第一次、第二次請求到tomcat2服務器
    image.png

  2. 第三次請求到tomcat1服務器, 說明負載均衡生效
    image.png

  3. 停掉tomcat2, 再次請求, 請求自動分發到tomcat1, 開啟tomcat2, 輪詢請求再次生效

三、實現

  1. 下載nginx和tomcat, 復制一份tomcat作為tomcat2服務器
    image.png

  2. 分別修改tomcat1、tomcat2的server.xml配置文件
    image.png

tomcat2一樣, 對應修改為28005, 28080, 28009

為了區分tomcat1、tomcat2, 修改F:\test_nginx_tomcat\tomcat1\webapps\ROOT目錄下的index.jsp文件內容
image.png

  1. 分別啟動tomcat1、tomcat2, /bin目錄下startup.bat命令, 訪問http://localhost:18080http://localhost:28080, 查看是否啟動成功
    image.png

image.png

  1. 到目前為止兩台tomcat服務器已經准備就緒了, 但是還沒配置nginx, 所以此時是訪問不了http://localhost的, 如:
    image.png

  2. OK, 現在配置nginx, 其實就是修改nginx.conf文件

worker_processes  1;#工作進程的個數,一般與計算機的cpu核數一致
 
events {
    worker_connections  1024;#單個進程最大連接數(最大連接數=連接數*進程數)
}
 
http {
    include       mime.types; #文件擴展名與文件類型映射表
    default_type  application/octet-stream;#默認文件類型
 
    sendfile        on;#開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。
    
	keepalive_timeout  65; #長連接超時時間,單位是秒
 
    gzip  on;#啟用Gizp壓縮
	
	#服務器的集群
    upstream  test.nginx.com {  #服務器集群名字	
		server    127.0.0.1:18080  weight=1;#服務器配置   weight是權重的意思,權重越大,分配的概率越大。
		server    127.0.0.1:28080  weight=2;
	}	
 
	#當前的Nginx的配置
    server {
        listen       80;#監聽80端口,可以改成其他端口
        server_name  localhost;##############	當前服務的域名
 
	location / {
            proxy_pass http://test.nginx.com;
            proxy_redirect default;
	    proxy_connect_timeout 3;
	    proxy_read_timeout 1;
	    proxy_send_timeout 1;
        }
		
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

這是參考別人的配置, 最重要的是下面中的內容
image.png

  • upstream: 指定服務器集群, 我們開啟了tomcat1、tomcat2, 定義2個server即可
  • weight: 權重, tomcat2是1的兩倍, 后面測試發現, 基本上tomcat1和tomcat2的請求次數比例為1:2
  • server: 監聽localhost:80的所有請求, 並將請求根據upstream配置的集群規則進行分發, 注意, proxy_pass的test.nginx.com必須跟upstream的test.nginx.com一致
	    proxy_connect_timeout 3; # 當其中一台服務器宕機后, 請求連接的超時時間, 設為3s, 可以看到tomcat2宕機后, 當輪詢到tomcat2服務器時, 響應會有3s的延時, 3s后自動將請求轉到tomcat1服務器, 實現了集群的高可用, 同理, 開啟tomcat2后, nginx恢復正常的輪詢請求
	    proxy_read_timeout 1;
	    proxy_send_timeout 1;
  1. 保存配置, 啟動nginx, 雙擊啟動
    image.png

瀏覽器請求http://localhost, 不斷刷新、停掉任意一台服務器, 可以看到文章實現目標中的效果

四、文章參考

https://blog.csdn.net/wang379275614/article/details/47778201

謝謝


免責聲明!

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



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