Nginx SpringBoot實現負載均衡

2022-01-15 19:48:40 字數 2945 閱讀 5097

在介紹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
注:上面的網域名稱也可以用ip替代。2.least connections: 以最少的活動連線數將請求傳送到伺服器,同樣要考慮伺服器權重。

nginx.conf 配置示例:

upstream xuwujing
3.ip hash : 傳送請求的伺服器由客戶機ip位址決定。在這種情況下,使用ipv4位址的前三個位元組或整個ipv6位址來計算雜湊值。該方法保證來自相同位址的請求到達相同的伺服器,除非該伺服器不可用。

upstream xuwujing
4.generic hash: 請求傳送到的伺服器由使用者定義的鍵決定,該鍵可以是文字字串、變數或組合。

upstream xuwujing
5.least time (nginx plus only) – 對於每個請求,nginx plus選擇具有最低平均延遲和最低活動連線數的伺服器,其中最低平均延遲是根據包含least_time指令的下列引數計算的:

6.random:每個請求將被傳遞到隨機選擇的伺服器。如果指定了兩個引數,首先,nginx根據伺服器權重隨機選擇兩個伺服器,然後使用指定的方法選擇其中乙個。

這裡的專案就用本人之前的乙個springboot專案,springboot的專案位址:

我們找到nginx的配置檔案nginx.conf,該配置在nginx/conf/nginx.conf目錄下,然後我們來修改該配置,新增如下配置:

upstream pancm
如果不想使用round robin策略,也可以換成其他的。

然後在server新增/修改如下配置:

server 

error_page 500 502 503 504 /50x.html;

location = /50x.html

}

配置說明:

nginx.conf 完整的配置:

在完成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進行熱載入。

都啟動成功之後,我們在瀏覽器輸入服務的ip即可進行訪問。

示例圖:

注:這裡我使用的是windows系統做測試,實際linux也是一樣的。

然後我們進行操作,並檢視控制台日誌!

從上述示例圖中我們進行4次介面重新整理請求,最終平均分配到兩個服務中去了,從上述的測試結果中我們實現了負載均衡。

這裡我在說一下使用nginx的注意事項,在進行學習和測試的時候,使用nginx預設的埠實現負載均衡一般沒有什麼問題,但是當我們在專案中使用的時候,特別有登入介面的並且埠不是80的時候,會出現登入的介面無法跳轉,進行除錯的話會出現net::err_name_not_resolved這樣的錯誤,出現這個原因的是因為nginx預設的埠是80,那麼預設跳轉的也是這個,所以出現這種情況的時候,需要在location 下新增proxy_set_header host $host:port 這個配置,port 和listen 的埠保持一致就可以了。

nginx linux和windows安裝教程:

springboot+springcloud實現負載均衡:

csdn出處:

掘金出處:

個人部落格出處:

Keepalived nginx實現負載均衡高可用

keepalived只是解決 的單點和位址漂流問題,所以只能對本機服務進行的nginx服務進行健康監控檢測 在部署站點規模不大的 架構是一般通常使用keepalived nginx來實現 從而實現輕量級的排程服務功能 用到lvs的場景不是很多,只有大規模的站點部署是才有可能用到。nginx實現高可用...

springcloud(Ribbon負載均衡)

搭建步驟 1.使用者服務的集群 2.訂單服務整合ribbon 2.1.匯入ribbon的依賴 2.2.在resttemplate的bean定義方法上加上 loadbalanced註解 2.3.把訂單的controller向使用者發起呼叫的resttemplate的url使用服務名呼叫,如 http ...

SpringCloud Ribbon 負載均衡

ribbon eureka都是netflix旗下的專案,eureka client內建了ribbon,用於實現負載均衡,預設使用輪詢。輪詢是最簡單的負載均衡演算法,每次呼叫服務拿到節點列表後,從前往後依次輪詢類表中的每個節點,誰空閒就呼叫誰。測試時往往都是呼叫列表的第乙個節點,因為重新整理的手速遠遠...