【 nginx-負載均衡 】圖文並茂,一看就會
前言
這篇文章需要一點點的 nginx 基礎知識
不會也沒關係,先給各位貼一個最簡單的 nginx.conf
配置,看完就會
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://0.0.0.0:9000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
複製程式碼
並且起一個最簡單的 node 服務:
const http = require('http');
const server = http.createServer();
const host = '0.0.0.0'
const port = 9000
let n = 0
server.on('request', function (req, res) {
n += 1
console.log('請求來了: ', n)
res.write('Hello World!!!');
res.end();
});
server.listen(port, host, function () {
console.log(`伺服器啟動了,請訪問:http://${host}:${port}`);
})
複製程式碼
訪問 ,
nginx
已經能把請求正常打到 node 9000
埠的服務了
接下來進入正題,講講負載均衡了
什麼是負載均衡
舉個例子,工地上新到了一車磚,老闆要求天黑之前需要搬完。但是工地上只有一個工人,這種情況下每趟要搬 1000 斤才有可能在天黑前搬完。但是如果 1000 斤的磚扛在肩上,那這個工人一下就被打死了。這個時候包工頭另外招了兩個人,三個人一起幹,每個人扛 300 斤,那大家都很輕鬆的把活幹完了,沒人會死
放到伺服器上也是同樣的道理。現在假設每秒鐘有 1000 個請求,一臺伺服器處理不過來,分分鐘會掛掉。我們把伺服器加到 3 臺,這樣每臺處理 300 個,每臺都輕輕鬆鬆。
那麼問題來了,三個工人的身體強弱是有區別的。包工頭在安排活的時候是做到絕對的公平每人背 300 斤?還是按照實工人實際身體情況,能者多勞?
伺服器也是一樣的道理,不同的伺服器處理能力是不一樣的。nginx 負載均衡
做的事情就是根據伺服器的能力去 平衡
大量請求到達各個伺服器的數量。這裡的 平衡
並不是絕對的 平均
,具體怎麼樣去平衡請求,我們可以根據自己的需求去設定不同的 平衡策略
負載均衡策略
輪詢策略(預設)
按照上面講的,要玩負載均衡,首先得是多臺機器,一臺也玩不起來啊。但是條件有限,我這邊在不同埠起多個相同的 node 服務來表示多臺機器
如上圖,三個服務完全相同,分別用 9000
、9001
、9002
埠啟動,接下來修改 nginx.conf
檔案,nginx 負載均衡
主要是透過配置 upstream
來實現的:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream test {
server 0.0.0.0:9000;
server 0.0.0.0:9001;
server 0.0.0.0:9002;
}
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
複製程式碼
從上面程式碼可以看出,改動是比較簡單的,增加了一個 upsteam
配置。這個是最簡單的 輪詢策略
,大量請求打過來後,nginx
將這些請求 平均
分配到 3 臺伺服器上。接下來我們透過工具批次傳送 600 個請求, 來測試下我們的配置是否生效:
從結果來看符合預期, 每個服務處理 200 個請求。
加權輪詢策略
這個也很簡單,從名字可以猜出來一些,這個是按照我們指定的權重來輪詢,nginx.conf
修改如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream test {
server 0.0.0.0:9000 weight=2;
server 0.0.0.0:9001 weight=1;
server 0.0.0.0:9002 weight=1;
}
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
複製程式碼
我們在每個服務地址後面加上 weight
引數來表示權重, 這裡的意思是 9000
埠處理50%
的請求, 9001
埠處理25%
的請求, 9002
埠處理25%
的請求。
再來測試下,批次傳送 100 個請求看看結果:
符合預期
ip_hash 策略
這個也很簡單,看名字也能猜出來一點,根據 ip 來分配請求。固定的客戶端發出的請求會被固定分配到一臺伺服器。接著修改 nginx.conf
配置
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream test {
ip_hash;
server 0.0.0.0:9000;
server 0.0.0.0:9001;
server 0.0.0.0:9002;
}
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://test;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {w
root html;
}
}
}
複製程式碼
這裡還是因為條件不允許,照理要用多個客戶端來訪問,並在控制檯打出 ip 來看結果,但是我只有本機一臺機器,所以做不了這個實驗。
用迂迴一點的方式來驗證下,既然是根據 ip 來分配請求的,那我本機發 100 個請求,這 100 個請求應該會被打到同一臺伺服器上,另外兩臺接收到的請求數量為 0,來測試下:
從結果來看也是符合預期的,這裡只有 9002 埠起的服務收到了 100 個請求,其他兩個服務收到的請求數量為 0
總結
雖然短小了點,但是花5分鐘應該能完全看懂 nginx 負載均衡
了,以後再也不怕別人裝逼了
作者:菜雞1993
連結:
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2807161/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【圖文並茂】一文講透Dubbo負載均衡之最小活躍數演算法負載演算法
- 有手就會做!保姆級Jmeter分散式壓測操作流程(圖文並茂)JMeter分散式
- 負載均衡最全詳解(圖文全面總結)負載
- 圖文並茂詳解 NAT 協議!協議
- 一文讀懂“負載均衡”負載
- 水星路由器設定圖文並茂路由器
- 【原創】SAS 9.3 專題技術精粹(圖文並茂版)可下載
- 負載均衡負載
- Springboot快速入門篇,圖文並茂Spring Boot
- Git學習-圖文並茂還有遊戲玩!Git遊戲
- 圖文並茂排序與演算法總結排序演算法
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- expo 搭建 react-native 元件庫【圖文並茂】React元件
- 從JMM透析volatile與synchronized原理,圖文並茂synchronized
- 實現TouchID指紋解鎖(圖文並茂)
- 常用負載均衡詳解(圖文總結)負載
- NGINX 負載均衡Nginx負載
- WebSocket負載均衡Web負載
- IP負載均衡負載
- 【Nginx】負載均衡Nginx負載
- nginx負載均衡Nginx負載
- 負載均衡最全詳解(看這篇就夠了)負載
- 一文弄懂宇宙的歷史與結構(圖文並茂)!
- 通過nginx進行udp報文負載均衡NginxUDP負載
- 負載均衡技術(一)———負載均衡技術介紹負載
- 解密負載均衡技術和負載均衡演算法解密負載演算法
- 圖文並茂!推薦演算法架構——粗排演算法架構
- 字首和與差分 圖文並茂 超詳細整理
- 負載均衡技術(二)———常用負載均衡服務介紹負載
- 【知識分享】四層負載均衡和七層負載均衡負載
- 如何最佳化負載均衡?一文講懂負載
- 淺談負載均衡負載
- 漫談負載均衡負載
- Nginx負載均衡模式Nginx負載模式
- 面試之負載均衡面試負載
- 負載均衡知多少?負載
- 負載均衡簡介負載