<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
負載均衡(Load Balance),意思是將負載(工作任務,存取請求)進行平衡、分攤到多個操作單元(伺服器,元件)上進行執行。
當單臺web伺服器直接面向用戶,可能要承載著大量的並行請求,單臺伺服器可能難以負荷,我們需要使用多臺web伺服器組成一個叢集,利用Nginx負載均衡功能,將請求分發給不同的後端伺服器,實現負載的流量分發,提升整體效能、以及系統的容災能力。
代理是代理一臺伺服器基於URI排程,排程到不同功能的應用節點
負載均衡是將使用者端請求通過proxy_pass代理至一組upstream資源池
實現負載均衡功能需要使用兩個模組:
範例:一個官方的的負載均衡展示
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; } }
輪詢排程
按順序逐一分配到不同的後端節點,也是預設演演算法。(簡單來說就是1:1:1)
加權輪詢
考慮到不同伺服器的效能不同,給予節點不同的權值,使其接收到相應的權值請求數
server 192.168.10.3:80 weight=3; server 192.168.10.4:80 weight=1;
以上這個例子是說每4個請求會分配給10.3三個,10.4一個,以此迴圈。
ip_hash
根據使用者請求的IP,對該IP進行hash運算,根據運算的值將請求分配給後端特定的一臺節點進行處理。
取值範圍為ipv4地址的前三個8位元或ipv6的整個地址作為雜湊鍵,確保來自從一個使用者端的IP始終傳遞給同一臺伺服器,除非次伺服器不可用。(簡單來說就是172.16.20.1與172.16.20.2取前三個8位元都是172.16.20)
ip_hash運算公式:hash(ip)%node_counts=index
ip_hash帶來的問題:
大量同一IP的請求會造成某個節點流量過大
如果臨時下線一臺節點,會重新計算hash值,建議使用down狀態
範例:注意ip_hash與權重不可同時使用
ip_hash; server 192.168.10.3:80; server 192.168.10.4:80;
一致性hash
為了避免上述問題,所以誕生了一致性hash,使用取模的方式,但不對伺服器節點數量取模,而是對2的32次方取模,hash函數值為0~2^32-1。(形成一個虛擬圓環,使用者請求會發給順時針相鄰的節點)
有一個問題:如果後端節點較少可能會造成資料傾斜,所以一致性hash引入了虛擬節點機制,即對每個伺服器計算多個雜湊,每個計算結果位置都放置一個虛擬節點。
如果我們想使用ip_hash,但是計算公式使用一致性hash,該怎麼做?
hash $remote_addr consistent; server 192.168.10.3:80; server 192.168.10.4:80;
url_hash
根據使用者的url進行hash取模,根據運算值,將請求分配給一臺特定的後端伺服器。clent——nginx——url_hash——cache1——app
1.使用者請求nginx負載均衡,通過url演演算法,請求排程至cache1
2.cache1沒有資料,會向後端獲取,返回資料,並將資料快取
3.當其他使用者存取相同url時,排程器依然會排程到cache1節點
4.cache1會直接將資料返回
hash $request_uri consistent; server 192.168.10.3:80; server 192.168.10.4:80;
least_conn
哪臺伺服器的連線數最少,就將請求排程到這臺伺服器
least_conn; server 192.168.10.3:80; server 192.168.10.4:80;
down
將伺服器節點標記為不可用狀態,一般用於停機維護。
server 192.168.10.3:80 down; server 192.168.10.4:80;
backup
備用節點,正常情況不會排程到此節點;當正常工作節點全部不可用時,會啟用此節點;當節點恢復時此節點會繼續恢復備用狀態。
server 192.168.10.3:80; server 192.168.10.4:80; server 192.168.10.5:80 backup;
max_conns
用來限制每個後端節點接收到的最大的TCP連線數,如果超出限制就會丟擲錯誤。
server 192.168.10.3:80 max_conns=10; server 192.168.10.4:80 max_conns=10;
一臺可以連線10.兩臺是20,超過20就會出錯。
keepalived
與後端伺服器啟用快取,也就是長連結,提升網站吞吐量。
預設不啟用此功能,當有請求時,會建立連線,維護連線,關閉連線,所以會存在網路消耗;但是如果所有連線都快取了,當連線空閒了又會佔用其他系統資源,所以可以使用keepalived引數。
server 192.168.10.3:80; server 192.168.10.4:80; keepalived 32; # 最大空閒連線數的個數 keepalived_timeout 100s; # 空閒連線的超時時間 # 需要配合以下兩個引數使用 proxy_http_version 1.1; proxy_set_header connection "";
max_fails與fail_timeout
max_fails=2:伺服器通訊失敗兩次,認為伺服器不可用
fail_timeout=5s:伺服器通訊失敗後,每5秒探測一次伺服器是否恢復正常。
在fail_timeout設定時間內,與伺服器連線失敗次數達到max_fails數量,則認為伺服器不可用。
如果不設定的話預設是探測一次,間隔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;
這部分就到這,其他內容放在之後。
到此這篇關於Nginx使用ngx_http_upstream_module實現負載均衡功能範例的文章就介紹到這了,更多相關Nginx 負載均衡內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45