乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Nginx Spring Boot 實(shí)現(xiàn)負(fù)載均衡

       鷹兔牛熊眼 2020-08-07
      本文來(lái)源:http:///LSUH

      前言

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

      負(fù)載均衡介紹

      在介紹Nginx的負(fù)載均衡實(shí)現(xiàn)之前,先簡(jiǎn)單的說(shuō)下負(fù)載均衡的分類,主要分為硬件負(fù)載均衡和軟件負(fù)載均衡,硬件負(fù)載均衡是使用專門的軟件和硬件相結(jié)合的設(shè)備,設(shè)備商會(huì)提供完整成熟的解決方案,比如F5,在數(shù)據(jù)的穩(wěn)定性以及安全性來(lái)說(shuō)非??煽浚窍啾溶浖栽靸r(jià)會(huì)更加昂貴;軟件的負(fù)載均衡以Nginx這類軟件為主,實(shí)現(xiàn)的一種消息隊(duì)列分發(fā)機(jī)制。

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

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

      負(fù)載均衡策略

      NGINX開(kāi)源支持四種負(fù)載平衡方法,而NGINX Plus又增加了兩種方法。

      1.Round Robin: 對(duì)所有的請(qǐng)求進(jìn)行輪詢發(fā)送請(qǐng)求,默認(rèn)的分配方式。

      nginx.conf 配置示例:

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

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

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

      nginx.conf 配置示例:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Nginx+SpringBoot實(shí)現(xiàn)負(fù)載均衡

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

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

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

      首先我們下載這個(gè)項(xiàng)目,輸入:mvn clean package 將項(xiàng)目進(jìn)行打包為jar文件,然后將application.properties和此jar項(xiàng)目放在一個(gè)文件夾中,然后復(fù)制該文件夾(這里為了清晰所以進(jìn)行復(fù)制,實(shí)際不復(fù)制更改端口重啟也行),修改復(fù)制文件夾application.properties的端口,比如改為8086。

      Nginx 配置

      我們找到nginx的配置文件nginx.conf,該配置在nginx/conf/nginx.conf目錄下,然后我們來(lái)修改該配置,新增如下配置:

      upstream pancm{
         server 127.0.0.1:8085;
         server 127.0.0.1:8086;
      }
      • upstream pancm:定義一個(gè)名稱,隨意就行;
      • 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;
              }
          }

      配置說(shuō)明:

      • server: 虛擬主機(jī)的名稱,一個(gè)http中可以配置多個(gè)server;
      • listen:Nginx默認(rèn)的端口;
      • server_name:Nginx服務(wù)的地址,可以使用域名,多個(gè)用空格分隔。
      • proxy_pass:代理路徑,一般配置upstream后面的名稱用于實(shí)現(xiàn)負(fù)載均衡,可以直接配置ip進(jìn)行跳轉(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;
              }
          }
      }

      負(fù)載均衡測(cè)試

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

      注:這里我使用的是windows系統(tǒng)做測(cè)試,實(shí)際linux也是一樣的。
      然后我們進(jìn)行操作,并查看控制臺(tái)日志!
      從上述示例圖中我們進(jìn)行4次界面刷新請(qǐng)求,最終平均分配到兩個(gè)服務(wù)中去了,從上述的測(cè)試結(jié)果中我們實(shí)現(xiàn)了負(fù)載均衡。
      這里我在說(shuō)一下使用Nginx的注意事項(xiàng),在進(jìn)行學(xué)習(xí)和測(cè)試的時(shí)候,使用nginx默認(rèn)的端口實(shí)現(xiàn)負(fù)載均衡一般沒(méi)有什么問(wèn)題,但是當(dāng)我們?cè)陧?xiàng)目中使用的時(shí)候,特別有登錄界面的并且端口不是80的時(shí)候,會(huì)出現(xiàn)登錄的界面無(wú)法跳轉(zhuǎn),進(jìn)行調(diào)試的話會(huì)出現(xiàn) net::ERR_NAME_NOT_RESOLVED這樣的錯(cuò)誤,出現(xiàn)這個(gè)原因的是因?yàn)閚ginx默認(rèn)的端口是80,那么默認(rèn)跳轉(zhuǎn)的也是這個(gè),所以出現(xiàn)這種情況的時(shí)候,需要在location 下添加proxy_set_header Host $host:port 這個(gè)配置,port 和listen 的端口保持一致就可以了。

      其他

      參考

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

      相關(guān)文章

      Nginx Linux和Windows安裝教程:
      https://www.cnblogs.com/xuwujing/p/11899890.htmlSpringBoot+SpringCloud實(shí)現(xiàn)負(fù)載均衡: https://www.cnblogs.com/xuwujing/p/10273989.html
      熱門內(nèi)容:

      最近面試BAT,整理一份面試資料《Java面試BAT通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多