您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用Nginx+SpringBoot實現負載均衡,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
負載均衡介紹
在介紹Nginx的負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬件負載均衡和軟件負載均衡,硬件負載均衡是使用專門的軟件和硬件相結合的設備,設備商會提供完整成熟的解決方案,比如F5,在數據的穩定性以及安全性來說非常可靠,但是相比軟件而言造價會更加昂貴;軟件的負載均衡以Nginx這類軟件為主,實現的一種消息隊列分發機制。
簡單來說所謂的負載均衡就是把很多請求進行分流,將他們分配到不同的服務器去處理。比如我有3個服務器,分別為A、B、C,然后使用Nginx進行負載均衡,使用輪詢策略,此時如果收到了9個請求,那么會均勻的將這9個請求分發給A、B、Cf服務器,每一個服務器處理3個請求,這樣的話我們可以利用多臺機器集群的特性減少單個服務器的壓力。
Nginx實現負載均衡的示例圖:
負載均衡策略
NGINX開源支持四種負載平衡方法,而NGINX Plus又增加了兩種方法。
1.Round Robin:
對所有的請求進行輪詢發送請求,默認的分配方式。
nginx.conf 配置示例:
upstream xuwujing { server www.panchengming.com; server www.panchengming2.com; }
注:上面的域名也可以用IP替代。
2.Least Connections:
以最少的活動連接數將請求發送到服務器,同樣要考慮服務器權重。
nginx.conf 配置示例:
upstream xuwujing { least_conn; server www.panchengming.com; server www.panchengming2.com; }
3.IP Hash :
發送請求的服務器由客戶機IP地址決定。在這種情況下,使用IPv4地址的前三個字節或整個IPv6地址來計算散列值。該方法保證來自相同地址的請求到達相同的服務器,除非該服務器不可用。
upstream xuwujing { ip_hash; server www.panchengming.com; server www.panchengming2.com; }
4.Generic Hash:
請求發送到的服務器由用戶定義的鍵決定,該鍵可以是文本字符串、變量或組合。
upstream xuwujing { hash $request_uri consistent; server www.panchengming.com; server www.panchengming2.com; }
5.Least Time (NGINX Plus only)
對于每個請求,NGINX Plus選擇具有最低平均延遲和最低活動連接數的服務器,其中最低平均延遲是根據包含least_time指令的下列參數計算的:
upstream xuwujing { least_time header; server www.panchengming.com; server www.panchengming2.com; }
6.Random:
每個請求將被傳遞到隨機選擇的服務器。如果指定了兩個參數,首先,NGINX根據服務器權重隨機選擇兩個服務器,然后使用指定的方法選擇其中一個。
upstream xuwujing { random two least_time=last_byte; server www.panchengming.com; server www.panchengming2.com; }
Nginx+SpringBoot實現負載均衡
環境準備
這里的項目就用本人之前的一個springboot項目,SpringBoot的項目地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf
首先我們下載這個項目,輸入:mvn clean package
將項目進行打包為jar文件,然后將application.properties
和此jar項目放在一個文件夾中,然后復制該文件夾(這里為了清晰所以進行復制,實際不復制更改端口重啟也行),修改復制文件夾application.properties
的端口,比如改為8086。
Nginx 配置
我們找到nginx的配置文件nginx.conf,該配置在nginx/conf/nginx.conf目錄下,然后我們來修改該配置,新增如下配置:
upstream pancm{ server 127.0.0.1:8085; server 127.0.0.1:8086; }
如果不想使用Round Robin策略,也可以換成其他的。
然后在server添加/修改如下配置:
server { listen 80; server_name 127.0.0.1; location / { root html; proxy_pass http://pancm; proxy_connect_timeout 3s; proxy_read_timeout 5s; proxy_send_timeout 3s; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
配置說明:
nginx.conf 完整的配置:
events { worker_connections 1024; } error_log nginx-error.log info; http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream pancm{ server 127.0.0.1:8085; server 127.0.0.1:8086; } server { listen 80; server_name 127.0.0.1; location / { root html; proxy_pass http://pancm; proxy_connect_timeout 3s; proxy_read_timeout 5s; proxy_send_timeout 3s; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
負載均衡測試
在完成Nginx配置之后,我們啟動Nginx。
linux輸入/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
,如果已經啟動可以使用/usr/local/nginx/sbin/nginx -s reload
命令進行熱加載配置文件,Windows直接點擊Nginx目錄下的nginx.exe
或者 cmd
運行start nginx
進行啟動,如果啟動了依舊可以使用nginx -s reload
進行熱加載。
Nginx啟動完成之后,我們依次啟動剛剛下載的springboot和復制更改端口的項目,輸入:java -jar springboot-jsp-thymeleaf.jar
啟動。
都啟動成功之后,我們在瀏覽器輸入服務的ip即可進行訪問。
示例圖:
注:這里我使用的是windows系統做測試,實際linux也是一樣的。
然后我們進行操作,并查看控制臺日志!
從上述示例圖中我們進行4次界面刷新請求,最終平均分配到兩個服務中去了,從上述的測試結果中我們實現了負載均衡。
這里我在說一下使用Nginx的注意事項,在進行學習和測試的時候,使用nginx默認的端口實現負載均衡一般沒有什么問題,但是當我們在項目中使用的時候,特別有登錄界面的并且端口不是80的時候,會出現登錄的界面無法跳轉,進行調試的話會出現 net::ERR_NAME_NOT_RESOLVED這樣的錯誤,出現這個原因的是因為nginx默認的端口是80,那么默認跳轉的也是這個,所以出現這種情況的時候,需要在location 下添加proxy_set_header Host $host:port 這個配置,port 和listen 的端口保持一致就可以了。
上述就是小編為大家分享的使用Nginx+SpringBoot實現負載均衡了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。