1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Nginx + Spring Boot 實現(xiàn)負載均衡

        共 5038字,需瀏覽 11分鐘

         ·

        2020-09-16 07:53


        來自:虛無境的博客?| 責(zé)編:樂樂

        鏈接:8rr.co/LSUH

        前言

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

        負載均衡介紹

        在介紹Nginx的負載均衡實現(xiàn)之前,先簡單的說下負載均衡的分類,主要分為硬件負載均衡和軟件負載均衡,硬件負載均衡是使用專門的軟件和硬件相結(jié)合的設(shè)備,設(shè)備商會提供完整成熟的解決方案,比如F5,在數(shù)據(jù)的穩(wěn)定性以及安全性來說非??煽?,但是相比軟件而言造價會更加昂貴;軟件的負載均衡以Nginx這類軟件為主,實現(xiàn)的一種消息隊列分發(fā)機制。

        簡單來說所謂的負載均衡就是把很多請求進行分流,將他們分配到不同的服務(wù)器去處理。比如我有3個服務(wù)器,分別為A、B、C,然后使用Nginx進行負載均衡,使用輪詢策略,此時如果收到了9個請求,那么會均勻的將這9個請求分發(fā)給A、B、Cf服務(wù)器,每一個服務(wù)器處理3個請求,這樣的話我們可以利用多臺機器集群的特性減少單個服務(wù)器的壓力。

        Nginx實現(xiàn)負載均衡的示例圖:

        負載均衡策略

        NGINX開源支持四種負載平衡方法,而NGINX Plus又增加了兩種方法。

        1.Round Robin: 對所有的請求進行輪詢發(fā)送請求,默認的分配方式。

        nginx.conf 配置示例:

        upstream?xuwujing?{
        ???server?www.panchengming.com;
        ???server?www.panchengming2.com;
        }

        注:上面的域名也可以用IP替代。

        2.Least Connections:以最少的活動連接數(shù)將請求發(fā)送到服務(wù)器,同樣要考慮服務(wù)器權(quán)重。

        關(guān)注公眾號程序員小樂回復(fù)關(guān)鍵字“Java”獲取Java面試題和答案。

        nginx.conf 配置示例:

        upstream?xuwujing?{
        ????least_conn;
        ????server?www.panchengming.com;
        ????server?www.panchengming2.com;
        }

        3.IP Hash : 發(fā)送請求的服務(wù)器由客戶機IP地址決定。在這種情況下,使用IPv4地址的前三個字節(jié)或整個IPv6地址來計算散列值。該方法保證來自相同地址的請求到達相同的服務(wù)器,除非該服務(wù)器不可用。

        upstream?xuwujing?{
        ?????ip_hash;
        ?????server?www.panchengming.com;
        ?????server?www.panchengming2.com;
        }

        4.Generic Hash: 請求發(fā)送到的服務(wù)器由用戶定義的鍵決定,該鍵可以是文本字符串、變量或組合。

        ?upstream?xuwujing?{
        ?????hash?$request_uri?consistent;
        ?????server?www.panchengming.com;
        ????????server?www.panchengming2.com;
        ?}

        5.Least Time (NGINX Plus only) – 對于每個請求,NGINX Plus選擇具有最低平均延遲和最低活動連接數(shù)的服務(wù)器,其中最低平均延遲是根據(jù)包含least_time指令的下列參數(shù)計算的:

        • header :從服務(wù)器接收第一個字節(jié)的時間。

        • last_byte:從服務(wù)器接收完整響應(yīng)的時間。

        • last_byte inflight:從服務(wù)器接收完整響應(yīng)的時間。

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

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

        • least_conn :活動連接的最少數(shù)量

        • least_time=header (NGINX Plus):從服務(wù)器接收響應(yīng)標(biāo)頭的最短平均時間 ($upstream_header_time)。

        • least_time=last_byte (NGINX Plus) :從服務(wù)器接收完整響應(yīng)的最短平均時間($upstream_response_time)。

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

        Nginx+SpringBoot實現(xiàn)負載均衡


        環(huán)境準(zhǔn)備

        • 依賴JDK1.8以上的版本;
        • 依賴Nginx環(huán)境;

        這里的項目就用本人之前的一個springboot項目,SpringBoot的項目地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf

        首先我們下載這個項目,輸入:mvn clean package?將項目進行打包為jar文件,然后將application.properties和此jar項目放在一個文件夾中,然后復(fù)制該文件夾(這里為了清晰所以進行復(fù)制,實際不復(fù)制更改端口重啟也行),修改復(fù)制文件夾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服務(wù)的地址,可以使用域名,多個用空格分隔。
        • proxy_pass:代理路徑,一般配置upstream后面的名稱用于實現(xiàn)負載均衡,可以直接配置ip進行跳轉(zhuǎn);

        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,如果已經(jīng)啟動可以使用/usr/local/nginx/sbin/nginx -s reload命令進行熱加載配置文件,Windows直接點擊Nginx目錄下的nginx.exe或者?cmd運行start nginx進行啟動,如果啟動了依舊可以使用nginx -s reload進行熱加載。
        Nginx啟動完成之后,我們依次啟動剛剛下載的springboot和復(fù)制更改端口的項目,輸入:java -jar springboot-jsp-thymeleaf.jar啟動。
        都啟動成功之后,我們在瀏覽器輸入服務(wù)的ip即可進行訪問。
        示例圖:

        注:這里我使用的是windows系統(tǒng)做測試,實際linux也是一樣的。
        然后我們進行操作,并查看控制臺日志!
        從上述示例圖中我們進行4次界面刷新請求,最終平均分配到兩個服務(wù)中去了,從上述的測試結(jié)果中我們實現(xiàn)了負載均衡。
        關(guān)注公眾號程序員小樂回復(fù)關(guān)鍵字“offer”獲取算法面試題和答案。
        這里我在說一下使用Nginx的注意事項,在進行學(xué)習(xí)和測試的時候,使用nginx默認的端口實現(xiàn)負載均衡一般沒有什么問題,但是當(dāng)我們在項目中使用的時候,特別有登錄界面的并且端口不是80的時候,會出現(xiàn)登錄的界面無法跳轉(zhuǎn),進行調(diào)試的話會出現(xiàn)?net::ERR_NAME_NOT_RESOLVED這樣的錯誤,出現(xiàn)這個原因的是因為nginx默認的端口是80,那么默認跳轉(zhuǎn)的也是這個,所以出現(xiàn)這種情況的時候,需要在location 下添加proxy_set_header Host $host:port 這個配置,port 和listen 的端口保持一致就可以了。

        參考

        https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ http://nginx.org/en/

        相關(guān)文章

        Nginx Linux和Windows安裝教程:https://www.cnblogs.com/xuwujing/p/11899890.html
        SpringBoot+SpringCloud實現(xiàn)負載均衡: https://www.cnblogs.com/xuwujing/p/10273989.html
        -END-


        1.??為什么 char 數(shù)組比 String 更適合存儲密碼?

        2.??慌:一次訂單號重復(fù),差點被開除

        3.??Spring的Controller是單例還是多例?怎么保證并發(fā)的安全


        之前博主分享了很多資源,有的已經(jīng)刪除了(你懂得),如果有的你當(dāng)時沒有領(lǐng)到還想領(lǐng)得就可以加我微信

        回復(fù)“Nginx反向”獲取nginx反向代理學(xué)習(xí)視頻



        點贊是最大的支持?


        點贊是最大的支持?

        瀏覽 44
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            性XXXXXXXXX69少妇 | 《放荡的情欲》完整版 | 成人A片一级 | 亚洲精品自拍 | 日韩一区二区三区在线看 | www.淫淫淫.con | 国产精品一区在线观看 | 国产精品久久久久久妇 | 91久久久无码国产一区二区三区 | 国产日产亚洲精华av |