Nginx知多少系列之(六)Linux下.NET Core專案負載均衡

江遠良發表於2020-04-16

目錄

1.前言

2.安裝

3.配置檔案詳解

4.工作原理

5.Linux下託管.NET Core專案

6.Linux下.NET Core專案負載均衡

7.負載均衡策略詳解

8.Linux下.NET Core專案Nginx+Keepalived高可用(主從模式)

9.Linux下.NET Core專案Nginx+Keepalived高可用(雙主模式)

10.Linux下.NET Core專案LVS+Keepalived+Nginx高可用叢集

11.構建靜態伺服器

12.日誌分析

13.優化策略

14.總結

 

在上一篇文章我們已經講過如何使用Nginx託管.NET Core專案,那麼接下來我們就要介紹如何使用Nginx作為負載均衡。

 

1.什麼是負載均衡?

 

Load balancing,即負載均衡,是一種計算機技術,用來在多個計算機(計算機叢集)、網路連線、CPU、磁碟驅動器或其他資源中分配負載,以達到最優化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

 

2.有什麼作用?

①、解決併發壓力,提高應用處理效能(增加吞吐量,加強網路處理能力);

②、提供故障轉移,實現高可用;

③、通過新增或減少伺服器數量,提供網站伸縮性(擴充套件性);

⑤、安全防護;(負載均衡裝置上做一些過濾,黑白名單等處理)

 

3.為什麼使用Nginx來做負載均衡?

在前一篇文章,我們只是單機部署站點,程式猿A很開心的把站點部署上線了,客戶使用了一段時間也沒有發現什麼問題,突然有一天訪問不了,程式猿A一看,哦豁,伺服器掛了,讓我來重啟下伺服器,重啟之後他很開心的告訴客戶,系統已經可以訪問啦。同時心裡慶幸在上班時間出現問題,萬一半夜或者在路上,那客戶不得急死咯。程式猿A就想了,這可是概率事件啊,我也不知道它什麼時候發神經或者經常性的給我來故障,那我不得經常被老闆拿去祭天咯。程式猿A到最後也沒有解決這個故障問題,當然後面也沒有發生故障,隨著客戶越來越多,突然某天某個點系統突然很卡甚至返回訪問不了,程式猿A去看了下,發現伺服器並沒有故障,但是就是訪問不了。這個時候程式猿A不解決問題就不行了,不解決客戶就會經常訪問不了,久之這個系統就沒法用了,即使老闆天天拿程式猿A去祭天也無濟於事。

上面這個故事其實就是因為單機部署發生的單點故障,導致系統無法訪問。還有就是併發鴨梨,導致系統處理能力下降甚至訪問不了。那這個時候我們就把系統部署在多臺伺服器上,當一臺掛了,另外一臺也可以照常使用,而多臺伺服器就需要Nginx作為代理伺服器,所有的請求先進入Nginx,Nginx在根據具體的規則把請求轉發到具體的伺服器上。

 

4.怎麼做?

 

首先我們還是按照上一篇文章介紹的,部署兩臺.NET Core站點。但是我們要做為這兩個.NET Core做一些區分,這樣能更好的看出我們訪問的是哪臺伺服器。我們按照《.NET Core專案部署到Linux(Centos7)(三)建立.NET Core API專案》,然後找到WeatherForecastController修改Get方法,增加ServerName區分具體訪問的是哪一個站點。如下圖

 

 

 

兩臺伺服器的IP分別為192.168.157.132和192.168.157.133(這裡的IP根據具體環境變化),我們修改ServerName為“.Net Core Nginx Server 1”,釋出到132這臺伺服器上。然後修改ServerName為“.Net Core Nginx Server 2”,釋出到133這臺伺服器上。釋出完之後,我們在Postman驗證下效果。《.NET Core專案部署到Linux(Centos7)(六)釋出.NET Core 專案到Linux》

 

 

 

這樣我們單獨去訪問這兩臺伺服器站點都是正常的,但是這樣我們是無法做負載均衡的,使用者只能訪問一個站點,因為只能公佈一個入口,那麼下面我們就部署Nginx負載均衡伺服器,用它來把使用者的請求轉發到這兩個站點的其中一個。

 

我們先新建一個虛擬機器,然後用yum安裝Nginx,《Nginx知多少系列之(二)安裝》 ,安裝後如下圖

 

 

 

 

 

這一臺伺服器是192.168.157.134,我們按照前面介紹的為Nginx開機自啟動以及開放對應的防火牆埠。

接下來我們就要做負載均衡配置了。

 

#進入nginx目錄
cd /etc/nginx

#編輯nginx.conf
sudo vim nginx.conf

#按i進入插入模式

#註釋下面的內容

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

#編輯完後按Esc,然後:wq儲存退出

 

負載均衡需要使用upstream模組,所以我們首先需要在Http塊裡的全域性位置定義一組伺服器,我們在使用yum安裝的nginx在nginx.conf裡會定義了include /etc/nginx/conf.d/*.conf,這裡說明了包含了conf.d資料夾下面以.conf為結尾的配置檔案。因為include是定義在全域性的,所以在conf配置檔案裡也可以定義全域性的內容。

 

#進入conf.d目錄
cd /etc/nginx/conf.d

#建立upstream.conf檔案
sudo touch upstream.conf

#編輯upstream.conf檔案
sudo vim upstream.conf

#按i進入插入模式

#輸入下面的配置內容

upstream netCoreDemo  {
    server 192.168.157.132;
    server 192.168.157.133;
}  
 
server {
    listen   80; 
    location / {
      proxy_pass  http://netCoreDemo;
    }
}

#按Esc,然後:wq儲存退出

#重啟Nginx
sudo nginx -s reload

 

配置負載均衡就是這麼簡單哦,當然下面我們還會介紹負載均衡的策略。不過我們先來驗證下效果吧,有圖有真相。

 

第一次訪問:

 

 

 

第二次訪問:

 

 

 

哦豁,看到效果了麼,第一次訪問是在132的站點,第二次訪問是在133的站點,簡單的負載均衡已經實現了。這裡的策略我們沒有做更改,在Nginx裡預設的方式是輪詢,每個請求按照時間順序輪流分配到不同的後端伺服器。

 

 下一篇文章將會詳細的講解Nginx負載均衡的策略,目前暫不包含商業策略的講解。

相關文章