Nginx知多少系列之(六)Linux下.NET Core專案負載均衡
目錄
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負載均衡的策略,目前暫不包含商業策略的講解。