一、准備工作
-
nginx1.14
nginx1.14下載鏈接 -
tomcat8
tomcat8下載鏈接 -
windows系統
二、實現目標
訪問http://localhost
地址時, 將請求輪詢到tomcat1
和tomcat2
服務器上, 實現負載均衡, 並通過proxy_connect_timeout 1;
配置, 實現其中一台服務器宕機能快速切換到另一台服務器上面, 從而不影響使用
-
第一次、第二次請求到
tomcat2
服務器
-
第三次請求到
tomcat1
服務器, 說明負載均衡生效
-
停掉
tomcat2
, 再次請求, 請求自動分發到tomcat1
, 開啟tomcat2
, 輪詢請求再次生效
三、實現
-
下載nginx和tomcat, 復制一份tomcat作為tomcat2服務器
-
分別修改tomcat1、tomcat2的server.xml配置文件
tomcat2一樣, 對應修改為28005, 28080, 28009
為了區分tomcat1、tomcat2, 修改F:\test_nginx_tomcat\tomcat1\webapps\ROOT
目錄下的index.jsp文件內容
- 分別啟動tomcat1、tomcat2, /bin目錄下startup.bat命令, 訪問
http://localhost:18080
、http://localhost:28080
, 查看是否啟動成功
-
到目前為止兩台tomcat服務器已經准備就緒了, 但是還沒配置nginx, 所以此時是訪問不了
http://localhost
的, 如:
-
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;
}
}
}
這是參考別人的配置, 最重要的是下面中的內容
- 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;
- 保存配置, 啟動nginx, 雙擊啟動
瀏覽器請求http://localhost
, 不斷刷新、停掉任意一台服務器, 可以看到文章實現目標
中的效果
四、文章參考
https://blog.csdn.net/wang379275614/article/details/47778201
謝謝