国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Nginx使用ngx_http_upstream_module實(shí)現(xiàn)負(fù)載均衡功能示例

瀏覽:8日期:2023-03-13 15:37:07
目錄
  • 負(fù)載均衡介紹
    • 什么是負(fù)載均衡
    • 為什么需要負(fù)載均衡
  • 負(fù)載均衡調(diào)度算法
    • 負(fù)載均衡后端節(jié)點(diǎn)狀態(tài)

      負(fù)載均衡介紹

      什么是負(fù)載均衡

      負(fù)載均衡(Load Balance),意思是將負(fù)載(工作任務(wù),訪問請求)進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行。

      為什么需要負(fù)載均衡

      當(dāng)單臺web服務(wù)器直接面向用戶,可能要承載著大量的并發(fā)請求,單臺服務(wù)器可能難以負(fù)荷,我們需要使用多臺web服務(wù)器組成一個集群,利用Nginx負(fù)載均衡功能,將請求分發(fā)給不同的后端服務(wù)器,實(shí)現(xiàn)負(fù)載的流量分發(fā),提升整體性能、以及系統(tǒng)的容災(zāi)能力。

      • 負(fù)載均衡與代理有什么區(qū)別

      代理是代理一臺服務(wù)器基于URI調(diào)度,調(diào)度到不同功能的應(yīng)用節(jié)點(diǎn)

      負(fù)載均衡是將客戶端請求通過proxy_pass代理至一組upstream資源池

      • 實(shí)現(xiàn)負(fù)載均衡場景

      實(shí)現(xiàn)負(fù)載均衡功能需要使用兩個模塊:

      • proxy_pass:代理模塊
      • upstream:虛擬資源池

      示例:一個官方的的負(fù)載均衡展示

      upstream backend {
      ? ? server backend1.example.com ? ? ? weight=5;
      ? ? server backend2.example.com:8080;
      ? ? server unix:/tmp/backend3;
      
      ? ? server backup1.example.com:8080 ? backup;
      ? ? server backup2.example.com:8080 ? backup;
      }
      
      server {
      ? ? location / {
      ? ? ? ? proxy_pass http://backend;
      ? ? }
      }

      示例:自己完成一個小例子

      upstream node {
          server 192.168.10.3:80;
          server 192.168.10.4:80;
      }
      server {
          listen 80;
          server_name www.yyang.com;
          location / {
      proxy_pass http://node;
      include prxoy_params;
          }
      }

      負(fù)載均衡調(diào)度算法

      輪詢調(diào)度

      按順序逐一分配到不同的后端節(jié)點(diǎn),也是默認(rèn)算法。(簡單來說就是1:1:1)

      加權(quán)輪詢
      考慮到不同服務(wù)器的性能不同,給予節(jié)點(diǎn)不同的權(quán)值,使其接收到相應(yīng)的權(quán)值請求數(shù)

      server 192.168.10.3:80 weight=3;
      server 192.168.10.4:80 weight=1;

      以上這個例子是說每4個請求會分配給10.3三個,10.4一個,以此循環(huán)。

      ip_hash

      根據(jù)用戶請求的IP,對該IP進(jìn)行hash運(yùn)算,根據(jù)運(yùn)算的值將請求分配給后端特定的一臺節(jié)點(diǎn)進(jìn)行處理。

      取值范圍為ipv4地址的前三個8位或ipv6的整個地址作為哈希鍵,確保來自從一個客戶端的IP始終傳遞給同一臺服務(wù)器,除非次服務(wù)器不可用。(簡單來說就是172.16.20.1與172.16.20.2取前三個8位都是172.16.20)

      ip_hash運(yùn)算公式:hash(ip)%node_counts=index

      ip_hash帶來的問題:
      大量同一IP的請求會造成某個節(jié)點(diǎn)流量過大
      如果臨時下線一臺節(jié)點(diǎn),會重新計算hash值,建議使用down狀態(tài)

      示例:注意ip_hash與權(quán)重不可同時使用

      ip_hash;
      server 192.168.10.3:80;
      server 192.168.10.4:80;

      一致性hash

      為了避免上述問題,所以誕生了一致性hash,使用取模的方式,但不對服務(wù)器節(jié)點(diǎn)數(shù)量取模,而是對2的32次方取模,hash函數(shù)值為0~2^32-1。(形成一個虛擬圓環(huán),用戶請求會發(fā)給順時針相鄰的節(jié)點(diǎn))
      有一個問題:如果后端節(jié)點(diǎn)較少可能會造成數(shù)據(jù)傾斜,所以一致性hash引入了虛擬節(jié)點(diǎn)機(jī)制,即對每個服務(wù)器計算多個哈希,每個計算結(jié)果位置都放置一個虛擬節(jié)點(diǎn)。
      如果我們想使用ip_hash,但是計算公式使用一致性hash,該怎么做?

      hash $remote_addr consistent;
      server 192.168.10.3:80;
      server 192.168.10.4:80;

      url_hash

      根據(jù)用戶的url進(jìn)行hash取模,根據(jù)運(yùn)算值,將請求分配給一臺特定的后端服務(wù)器。clent——nginx——url_hash——cache1——app

      1.用戶請求nginx負(fù)載均衡,通過url算法,請求調(diào)度至cache1
      2.cache1沒有數(shù)據(jù),會向后端獲取,返回數(shù)據(jù),并將數(shù)據(jù)緩存
      3.當(dāng)其他用戶訪問相同url時,調(diào)度器依然會調(diào)度到cache1節(jié)點(diǎn)
      4.cache1會直接將數(shù)據(jù)返回

      hash $request_uri consistent;
      server 192.168.10.3:80;
      server 192.168.10.4:80;

      least_conn

      哪臺服務(wù)器的連接數(shù)最少,就將請求調(diào)度到這臺服務(wù)器

      least_conn;
      server 192.168.10.3:80;
      server 192.168.10.4:80;

      負(fù)載均衡后端節(jié)點(diǎn)狀態(tài)

      down

      將服務(wù)器節(jié)點(diǎn)標(biāo)記為不可用狀態(tài),一般用于停機(jī)維護(hù)。

      server 192.168.10.3:80 down;
      server 192.168.10.4:80;

      backup

      備用節(jié)點(diǎn),正常情況不會調(diào)度到此節(jié)點(diǎn);當(dāng)正常工作節(jié)點(diǎn)全部不可用時,會啟用此節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)恢復(fù)時此節(jié)點(diǎn)會繼續(xù)恢復(fù)備用狀態(tài)。

      server 192.168.10.3:80;
      server 192.168.10.4:80;
      server 192.168.10.5:80 backup;

      max_conns

      用來限制每個后端節(jié)點(diǎn)接收到的最大的TCP連接數(shù),如果超出限制就會拋出錯誤。

      server 192.168.10.3:80 max_conns=10;
      server 192.168.10.4:80 max_conns=10;

      一臺可以連接10.兩臺是20,超過20就會出錯。

      keepalived

      與后端服務(wù)器激活緩存,也就是長鏈接,提升網(wǎng)站吞吐量。
      默認(rèn)不啟用此功能,當(dāng)有請求時,會建立連接,維護(hù)連接,關(guān)閉連接,所以會存在網(wǎng)絡(luò)消耗;但是如果所有連接都緩存了,當(dāng)連接空閑了又會占用其他系統(tǒng)資源,所以可以使用keepalived參數(shù)。

      server 192.168.10.3:80;
      server 192.168.10.4:80;
      
      keepalived 32; ? # 最大空閑連接數(shù)的個數(shù)
      keepalived_timeout 100s; # 空閑連接的超時時間
      
      # 需要配合以下兩個參數(shù)使用
      
      proxy_http_version 1.1;
      proxy_set_header connection "";

      max_fails與fail_timeout

      max_fails=2:服務(wù)器通信失敗兩次,認(rèn)為服務(wù)器不可用
      fail_timeout=5s:服務(wù)器通信失敗后,每5秒探測一次服務(wù)器是否恢復(fù)正常。
      在fail_timeout設(shè)定時間內(nèi),與服務(wù)器連接失敗次數(shù)達(dá)到max_fails數(shù)量,則認(rèn)為服務(wù)器不可用。
      如果不設(shè)置的話默認(rèn)是探測一次,間隔10s。

      server 192.168.10.3:80 max_fails=2 fail_timeout=5s;
      server 192.168.10.4:80 max_fails=2 fail_timeout=5s;
      

      這部分就到這,其他內(nèi)容放在之后。

      到此這篇關(guān)于Nginx使用ngx_http_upstream_module實(shí)現(xiàn)負(fù)載均衡功能示例的文章就介紹到這了,更多相關(guān)Nginx 負(fù)載均衡內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

      標(biāo)簽: Nginx
      主站蜘蛛池模板: 亚洲羞羞裸色私人影院 | 久草在线视频资源 | 一级片一区 | 国产美女一区二区三区 | 天干天干天啪啪夜爽爽色 | 国产成人在线观看免费网站 | 一区二区在线欧美日韩中文 | 色综合久久88中文字幕 | 国产精品久久国产三级国不卡顿 | 欧美特级大片 | 欧美黄网站| α片毛片| 农村寡妇野外情一级毛片 | 亚洲国产精品综合久久网络 | 亚洲在线免费免费观看视频 | 精品欧美一区二区三区四区 | 99在线在线视频免费视频观看 | 国内精品小视频在线 | 一级做a毛片免费视频 | 91精品国产高清久久久久久91 | 国产在线视频区 | 一级床上爽高清播放 | 欧美一级免费在线观看 | 精品久久一区二区三区 | 欧美亚洲不卡 | 日韩偷拍自拍 | 亚洲区精品久久一区二区三区 | 国产精品国产欧美综合一区 | 人成午夜性刺激免费 | 久久视频精品36线视频在线观看 | 亚洲成a人伦理 | 亚洲欧美日本国产综合在线 | 天天干夜夜怕 | 黄+色+性+人免费 | 欧美日本视频一区 | 色老头久久久久 | 成年人免费观看网站 | 黄视频在线免费 | 国产日本欧美高清免费区 | 男人毛片 | 久久成人亚洲 |