目錄
1.前言
2.安裝
3.配置文件詳解
4.工作原理
5.Linux下托管.NET Core項目
6.Linux下.NET Core項目負載均衡
7.負載均衡策略詳解
8.加權輪詢(round robin)策略剖析
9.IP哈希(ip hash)策略剖析
10.最少連接(least_conn)策略剖析
11.隨機(random)策略剖析
12.URL哈希(url hash)策略剖析
13.響應時間(fair)第三方模塊詳解
14.Linux下.NET Core項目Nginx+Keepalived高可用(主從模式)
15.Linux下.NET Core項目Nginx+Keepalived高可用(雙主模式)
16.Linux下.NET Core項目LVS+Keepalived+Nginx高可用集群
17.構建靜態服務器
18.日志分析
19.優化策略
20.總結
在上一篇文章我們已經講過如何使用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、192.168.157.138(這里的IP根據具體環境變化),我們修改ServerName為“.Net Core Nginx Server 1”,發布到132這台服務器上。然后修改ServerName為“.Net Core Nginx Server 2”,發布到133這台服務器上。最后修改ServerName為“.Net Core Nginx Server 3”,發布到138這台服務器上。發布完之后,我們在Postman驗證下效果。《.NET Core項目部署到Linux(Centos7)(六)發布.NET Core 項目到Linux》
這樣我們單獨去訪問這三台服務器站點都是正常的,但是這樣我們是無法做負載均衡的,用戶只能訪問一個站點,因為只能公布一個入口,那么下面我們就部署Nginx負載均衡服務器,用它來把用戶的請求轉發到這兩個站點的其中一個。
我們先新建一個虛擬機,然后用yum安裝Nginx,《Nginx知多少系列之(二)安裝》 ,安裝后如下圖
#測試Nginx安裝是否成功 curl http://localhost
這一台服務器是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 192.168.157.138; } server { listen 80; location / { proxy_pass http://netCoreDemo; } } #按Esc,然后:wq保存退出 #重啟Nginx sudo nginx -s reload
配置負載均衡就是這么簡單哦,當然下面我們還會介紹負載均衡的策略。不過我們先來驗證下效果吧,有圖有真相。
哦豁,看到效果了么,第一次訪問是在132的站點,第二次訪問是在133的站點,第三次訪問的是在138的站點,以此類推下去。簡單的負載均衡已經實現了。這里的策略我們沒有做更改,在Nginx里默認的方式是輪詢,每個請求按照時間順序輪流分配到不同的后端服務器。
下一篇文章將會詳細的講解Nginx負載均衡的策略,目前暫不包含商業策略的講解。