<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    SpringBoot+Nginx實現負載均衡

    Ann2022-06-12 16:40:19

    前言

    本篇文章主要介紹的是Nginx如何實現負載均衡。

    負載均衡介紹

    介紹

    在介紹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指令的下列參數計算的:

    • header :從服務器接收第一個字節的時間。
    • last_byte:從服務器接收完整響應的時間。
    • last_byte inflight:從服務器接收完整響應的時間。

    upstream xuwujing { least_time header; server www.panchengming.com; server www.panchengming2.com; }

    6.Random:每個請求將被傳遞到隨機選擇的服務器。如果指定了兩個參數,首先,NGINX根據服務器權重隨機選擇兩個服務器,然后使用指定的方法選擇其中一個。

    • least_conn :活動連接的最少數量
    • least_time=header (NGINX Plus):從服務器接收響應標頭的最短平均時間 ($upstream_header_time)。
    • least_time=last_byte (NGINX Plus) :從服務器接收完整響應的最短平均時間($upstream_response_time)。

    upstream xuwujing { random two least_time=last_byte; server www.panchengming.com; server www.panchengming2.com; }

    Nginx+SpringBoot實現負載均衡

    環境準備

    • 依賴JDK1.8以上的版本;
    • 依賴Nginx環境;

    首先我們下載這個項目,輸入: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;}
    
    • upstream pancm:定義一個名稱,隨意就行;
    • server + ip:端口 or 域名;

    如果不想使用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;        }    }
    

    配置說明:

    • server: 虛擬主機的名稱,一個http中可以配置多個server;
    • listen:Nginx默認的端口;
    • server_name:Nginx服務的地址,可以使用域名,多個用空格分隔。
    • proxy_pass:代理路徑,一般配置upstream后面的名稱用于實現負載均衡,可以直接配置ip進行跳轉;

    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負載均衡配置
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數等。#user administrator administrators; #配置用戶或者組,默認為nobody nobody。keepalive_requests 120;#單連接請求上限次數。
    NAT模式支持對IP地址和端口進行轉換。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。
    在介紹Nginx負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬件負載均衡和軟件負載均衡 ,硬件負載均衡是使用專門的軟件和硬件相結合的設備,設備商會提供完整成熟的解決方案,比如F5,在數據的穩定性以及安全性來說非常可靠,但是相比軟件而言造價會更加昂貴;軟件的負載均衡Nginx這類軟件為主,實現的一種消息隊列分發機制。
    一招搞定 Nginx
    2022-03-07 08:25:33
    安裝PCRE庫,用于解析正則表達式yum?zlib壓縮和解壓縮依賴yum?SSL 安全的加密的套接字協議層,用于HTTP安全傳輸,也就是httpsyum?
    任務模塊專注于任務的執行等操作,開發和維護更加簡單和高效;接收“調度中心”的執行請求、終止請求和日志請求等。XXL-JOB的不同任務之間并行調度、并行執行。同時支持任務終止。當任務”路由策略”選擇”故障轉移”時,當調度中心每次發起調度請求時,會按照順序對執行器發出心跳檢測請求,第一個檢測為存活狀態的執行器將會被選定并發送調度請求。
    配置好后可一建生成nginx.conf文件,同時可控制nginx使用此文件進行啟動與重載,完成對nginx的圖形化控制閉環。本系統通過Let's encrypt申請證書,使用acme.sh腳本進行自動化申請和續簽,開啟續簽的證書將在每天凌晨2點進行續簽, 只有超過60天的證書才會進行續簽,只支持在linux下簽發證書。
    Nginx 快速入門
    2022-05-11 16:36:35
    Nginx 是?款?性能的 http 服務器/反向代理服務器及電?郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師伊?爾·?索夫(Igor Sysoev)所開發,官?測試 nginx 能夠??撐 5 萬并發鏈接,并且cpu、內存等資源消耗卻?常低,運??常穩定。
    Kong是一款基于OpenResty(Nginx + Lua模塊)編寫的高可用、易擴展的,由Mashape公司開源的API Gateway項目。 Kong是基于NGINX和Apache Cassandra或PostgreSQL構建的,能提供易于使用的RESTful API來操作和配置API管理系統,所以它可以水平擴展多個Kong服務器,通過前置的負載均衡配置把請求均勻地分發到各個Server,來
    不可中斷狀態實際上是系統對進程和硬件設備的一種保護機制。當負載存在明顯升高趨勢時,及時進行分析和調查。系統調用過程中并不會涉及虛擬內存等進程用戶態資源,也不會切換進程。因此系統調用通常稱為特權模式切換。進程是由內核管理和調度的,進程上下文切換只能發生在內核態。因此相比系統調用來說,在保存當前進程的內核狀態和CPU寄存器之前,需要先把該進程的虛擬內存,棧保存下來。
    Nginx入門指北
    2022-03-17 22:23:01
    Nginx (engine x) 是一款輕量級的 Web 服務器 、反向代理服務器及電子郵件(IMAP/POP3)代理服務器。
    Ann
    暫無描述
      亚洲 欧美 自拍 唯美 另类