netcore跨平台之 Linux配置nginx負載均衡

  • 2019 年 11 月 22 日
  • 筆記

前面兩章講了netcore在linux上部署以及配置nginx,並讓nginx代理webapi。

這一章主要講如何配置負載均衡,有些步驟在前兩章講的很詳細了,所以這一章我就不會一個個截圖了。

因為本人只有一個伺服器。所以我會在同一台伺服器上部署兩套差不多的實例。

同樣的程式碼,我們在Program.cs進行了修改,如圖所示:

這裡我把原來的埠6666改成了8888

然後你可以改一改你的介面部分的程式碼,便於讓你更好的看到效果。

這裡把value1和value2改成value3和value4,這裡是為了看到測試效果,在實際的開發中這裡不用改。

然後發布和上傳到伺服器,如何發布和上傳,我在第一章有講到:https://www.cnblogs.com/dengbo/p/11878766.html

注意的是你同樣的地方新建一個新的目錄保存你新上傳的程式,netcore是我第一章建立的,netcore1是新建的,

你把你新的發布包放在netcore即可。如圖:

上傳結束後,在這個目錄中運行你的程式,輸入下面的命令

dotnet WebApiTest.dll   --server.urls "http://*:8888"

如圖所示

然後去看看你的介面是否正常

好了,這裡的準備工作完成了,下面我們進入到nginx的配置的目錄中

輸入下面的命令:

cd /usr/local/nginx/conf

然後對文件進行編輯

vim nginx.conf

我們需要在這裡修改一下配置。

在如圖的server的平級添加如下的程式碼

upstream NgWebApi {                  server localhost:6666;                  server localhost:8888;      }

上面的 NgWebApi是隨意寫的名稱,不要糾結這裡。

然後在修改 proxy_pass後面的內容:

proxy_pass http://NgWebApi;

最終的結果如下:

這樣你就修改完成,輸入:wq退出並保存即可。

最後檢查並重啟nginx

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

最後不要忘記把你的8888埠的webapi啟動一下。

這裡我務必要提醒你,請進入到你的程式的目錄中執行這段程式碼,

cd /root/netcore1
dotnet WebApiTest.dll   --server.urls "http://*:8888"

啟動如下:

好了,配置結束了,下面我們來測試下

還是昨天的那個網站進行測試 https://www.sojson.com/httpRequest/

多次發送請求會出現下面的響應

看到上面兩個請求,就說明你配置成功了,是不是很簡單。

上面這種配置,系統會採用默認的輪詢訪問不同的埠,nginx作為強大的反向代理,強大的遠遠不止這裡

下面簡單講講分發策略。

1)、輪詢 ——輪流處理請求(這是系統默認的)

每個請求按時間順序逐一分配到不同的應用伺服器,如果應用伺服器down掉,自動剔除它,剩下的繼續輪詢,如果您的伺服器都差不多,建議這個。

2)、權重 ——誰的設置的大,誰就承擔大部分的請求

通過配置權重,指定輪詢幾率,權重和訪問比率成正比,用於應用伺服器性能不均的情況,有時候你買的伺服器可能參差不齊,有的性能強大

有的一般,你可以通過設置權重,把伺服器性能強大權重設置大一點,這樣可以合理分配壓力。

3)、ip_哈希演算法

每一次的請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個應用伺服器,可以解決session共享的問題。

關於權重的策略,如下圖示的 你只要加一個 weight=6 即可這裡不一定是6,是整數都行。

然後保存即可

這裡不要忘記重啟nginx,以及運行8888埠的程式了,如果你不會,可以看前面的部分

最後我們看看效果

結果和上面的測試結果差不多,唯一不同的是出現下面這個結果的次數要大於另外一個的。

到這裡就結束了,感謝觀看。