Nginx實現簡單的負載均衡

eternalless發表於2018-06-12

Nginx (engine x) 是一個高效能的HTTP和反向代理伺服器。

什麼是負載均衡

負載均衡 建立在現有網路結構之上,它提供了一種廉價有效透明的方法擴充套件網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。其意思就是分攤到多個操作單元上進行執行。

簡單來說:

當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗,我們通過負載均衡的方式來分擔伺服器壓力。

我們有很多臺伺服器,組成一個伺服器叢集,當使用者訪問請求時,先訪問一箇中間伺服器,中間伺服器可以分發請求給壓力最小的一臺伺服器,這樣,可以讓每臺伺服器的壓力趨於平衡。

安裝nginx

完成安裝後,開啟nginx,輸入127.0.0.1:8080出現下圖代表成功

Nginx實現簡單的負載均衡

nginx常用命令

啟動nginx(windows下start nginx);

nginx -t 檢視nginx的配置檔案的目錄是否配置正確

nginx -s reload 重新載入nginx(當配置資訊發生修改時)

nginx -s quit 停止ngix

啟動node專案,分別監聽3000和3001埠

不懂的童鞋可以檢視express hello world例項

如下

Nginx實現簡單的負載均衡

Nginx實現簡單的負載均衡

配置nginx

1.開啟nginx安裝目錄的conf資料夾下的nginx.conf檔案

worker_processes 1;//nginx程式,一般設定為和cpu核數一樣
   events{
      worker_connections 1024; //最大連線數(最大併發數)
   }
   http{
   upstream firsttest{  //upstream表示負載伺服器池,定義名字為firsttest的伺服器池
   #ip_hash;自動定位到第一次的伺服器
   #weight 權重
   server 127.0.0.1:3000;
   server 127.0.0.1:3001;
   }
   server {
   listen 8080;//#監聽埠
   location / {//# 根目錄下
   proxy_pass http://firsttest;//使用那個負載伺服器池
   }
   }
   }複製程式碼

2.訪問127.0.0.1:8080

Nginx會將訪問8080埠的請求反向代理到3000或者3001上,這就是一個很簡單的負載均衡,不斷重新整理,訪問到3000或者3001比例大概是1:1這是預設輪詢。

Nginx實現簡單的負載均衡

Nginx實現簡單的負載均衡

3.我們也可以指定輪詢機率,設定權重weight.

weight和訪問比率成正比,用於後端伺服器效能不均的情況。權重越高,在被訪問的概率越大,如下,請求落在3000的機率是2/3,落到3001的機率是1/3。

upstream firsttest{
   #ip_hash;自動定位到第一次的伺服器
   #weight 權重
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }複製程式碼

4.ip_hash指令

上述方式存在一個問題就是說,這樣同一個IP訪問同一個頁面會被分配到不同的伺服器上,如果session不同步的話,就會出現很多問題,比如說最常見的登入狀態,這樣顯然不行。

我們可以採用ip_hash指令解決這個問題,如果客戶已經訪問了某個伺服器,當使用者再次訪問時,會將該請求通過雜湊演算法,自動定位到該伺服器。

upstream firsttest{
   #ip_hash;自動定位到第一次的伺服器
   #weight 
權重

ip_hash;
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }複製程式碼

這樣一個簡單的nginx負載均衡就完成了,當然,如果真的要做到真正的負載均衡遠遠不止這些,還需要配置很多的命令,也需要時間去學習,感謝大家觀看。


相關文章