前言
這幾天小明又有煩惱了,系統上線一段時間后,系統性能出現了問題,緩存等都用上了,還是不能解決問題。馬老板很大氣,又買了3台服務器,讓小明做個集群分流一下。
集群是什么?
是一種計算機系統,它通過一組松散集成的計算機軟件或硬件連接起來高度緊密地協作完成計算工作。將多個物理機器組成一個邏輯計算機,實現負載均衡和容錯。
Nginx是什么?
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,其特點是占有內存少,並發能力強,事實上nginx的並發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
Nginx簡單網絡結構圖
圖中,前面Nginx服務器負責接受請求和分發請求,它自己並不處理請求,將請求分發給后面的業務服務器來處理。
使用Nginx配置負載均衡
首先,我們簡單的創建一個控制器,實現一個簡單方法,返回服務器IP和端口。
[Route("api/[controller]")]
[ApiController]
public class NginxController : ControllerBase
{
[HttpGet]
public string Get()
{
return $"{HttpContext.Connection.LocalIpAddress.ToString()}:{HttpContext.Connection.LocalPort.ToString()}";
}
}
接下來,我們啟動app001項目,分別打開cmd,打入以下命令,分別啟動web服務器5011,5012,5013
dotnet app001.dll --urls="http://127.0.0.1:5011"
dotnet app001.dll --urls="http://127.0.0.1:5012"
dotnet app001.dll --urls="http://127.0.0.1:5013"
如下圖:
接下來,我們分別測試web服務器5011,5012,5013,分別返回“127.0.0.1:5011”,“127.0.0.1:5012”,“127.0.0.1:5013”。
如下圖:
接下來,配置nginx。
- 找到nginx的安裝路徑,打開nginx.conf文件
- 添加upstream配置,配置用於負載均衡輪詢的站點,即上一步驟中添加的3個站點
upstream webServer{
server 127.0.0.1:5011;
server 127.0.0.1:5012;
server 127.0.0.1:5013;
}
server {
listen 5010;
server_name localhost;
location / {
proxy_pass http://webServer;
}
}
接下來,啟動ngnix,用cmd命令指定nginx的安裝目錄,然后start nginx
最后,測試http://localhost:5010/api/nginx,按次序輪詢返回“127.0.0.1:5011”,“127.0.0.1:5012”,“127.0.0.1:5013”。
小結
目前為止,小明服務器負載均衡也搞定了,是不是非常簡單呀。不過這是最簡單的輪詢方式分發,nginx支持按權重輪詢分發,基於瀏覽器的分發,基於源IP分發等。留給其他小伙伴們去發掘,如果哪方面還有問題,請留言告訴我們。
文中用到的代碼我們放在:https://github.com/zcqiand/miscellaneous/tree/master/App001