nginx的基礎應用(續)
nginx的基礎應用(續)
一、簡介
上一篇文章我們介紹了nginx的基礎應用,其中講到了nginx作為代理伺服器的使用,但是漏了一個重要的,也是使用非常普遍的特性——負載均衡。今天,我們將這段內容補上。
通過多個例項進行負載均衡是一個比較常用的技術,它用來是資源利用最大化、提高通過率、降低延遲響應、確保容災等。
二、負載均衡的方法
- 輪詢——應用伺服器間的請求按照輪詢的方式分配;
- 最小連線數——下一個請求將會分配給當前連線數最小的伺服器;
- ip雜湊——以一種雜湊的方式決定下一個請求分配到哪個伺服器上(基於客戶端的ip進行雜湊)。
三、預設的負載均衡配置
nginx最簡單的負載均衡配置如下:
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
上面的例子中,有3個相同的例項執行在srv1-srv3上。當負載均衡的方法沒有特別指定時,它將預設使用輪詢的方式。所有的請求都會被代理到服務組myapp1上,nginx將應用HTTP的負載均衡分配請求。
nginx的反向代理實現包含負載均衡的種類:HTTP、HTTPS、FastCGI、uwsgi、SCGI和快取等。
如果要用HTTPS的負載均衡,只需要使用HTTPS的協議即可。
當為FastCGI、uwsgi、SCGI和快取設定負載均衡時,使用相應的fastcgi_pass、uwsgi_pass、scgi_pass和memcached_pass的指令集即可,這裡不做詳細介紹。
四、最小連線負載均衡
另外一個負載連線方式是最小連線。最小連線的方式可以使應用例項間的負載更公平,例如在一些請求需要花費更長時間去完成的情況。
使用最小連線的方式,nginx不會將過多的請求分配到一個比較忙的應用服務上,它將把請求分配到相對不忙的應用服務上。
最小連線的負載均衡方式在nginx中的配置如下,它作為服務組中的一個配置出現:
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
五、會話保持的方式
在介紹這種方式之前,大家先記住,使用輪詢和最小連線的負載均衡方式,同一客戶端的下一個請求有可能分配到不同的應用服務上。這兩種方式不能保證同一客戶端的請求總是分配到同一個服務上。
如果需要將一個客戶端繫結到一個特殊的應用服務上,換句話說,使客戶端的會話“粘連”或“保持”,就要使用“ip-hash”的負載均衡機制了。
使用ip-hash,客戶端的ip用來做雜湊的key,決定著選擇服務組中的哪個應用服務這個客戶端的請求。這種方法決定了相同客戶端的請求總是分配給相同的服務,除非這個服務不可用了。
配置ip-hash的負載均衡,只需要將ip-hash指令新增到服務組(upstream)中,如下:
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
六、負載均衡的權重
通過使用服務權重,可以進一步影響負載均衡的邏輯。上面的例子中,沒有配置權重的意思是,所有指定的服務將被看做有相同的權重。
採用輪詢的方式,如果有足夠的請求,並且請求通過統一的方式處理並且快速的完成的情況下,它仍然意味著在服務之間或多或少的公平的分配。
當weight引數為一個服務指定時,它將是負載均衡過程中的一部分。
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
上面的配置中,每5個應用請求將分配如下:3個請求分配個srv1,1個請求分配給srv2,另一個請求分配給srv3。在nginx最近的版本中,在最小連線和ip-hash的負載均衡方式中使用權重(weight)也是有可能的。
七、健康檢查
nginx的反向代理包括帶內(或被動)的健康檢查。如果一個服務的響應是失敗的,nginx將會標記這個服務是失敗的,並且在短暫的時間內,避免為下一個請求選擇這個服務。
max_fails指令設定是,在fail_timeout時間內,嘗試和這臺服務連續通訊失敗的次數。預設情況下,max_fails設定為1,當設定為0時,這個服務的健康檢查將失效。fail_timeout引數定義了這個服務多長時間會被標記為失效,在服務失敗的fail_timeout間隔後,nginx使用活的客戶端請求優雅的探測服務,如果探測成功了,這個服務將會標記為成功的。
至此,nginx用的最多的,也是最常用的部分——負載均衡 講完了,歡迎大家拍磚~~
相關文章
- Linux下Nginx基礎應用LinuxNginx
- 前端技術分享:Nginx負載均衡影片,基礎的實戰應用前端Nginx負載
- NGINX 入門到企業級應用實踐-基礎篇Nginx
- python基礎應用Python
- Sentinel基礎應用
- shell基礎應用
- echarts基礎應用Echarts
- Nginx-基礎Nginx
- 002 Nginx 基礎Nginx
- Linux應用——程序基礎Linux
- Windows應用程式基礎Windows
- Ubuntu Server 基礎應用UbuntuServer
- 最基礎的Nginx教學Nginx
- TS基礎應用 & Hook中的TSHook
- Android基礎及應用 Intent的呼叫AndroidIntent
- Android基礎及應用 Service的使用Android
- 【URLOS應用開發基礎】10分鐘製作一個nginx靜態網站環境應用Nginx網站
- Nginx 基礎入門Nginx
- Java-Nginx基礎JavaNginx
- Nginx基礎知識Nginx
- Nginx-基礎篇Nginx
- Nginx基礎筆記Nginx筆記
- 應用基礎框架全面解析框架
- zabbix應用教程:基於Nginx頁面響應的日誌監控用例Nginx
- NeurophStudio安裝及基礎應用
- Mac基礎設定—應用程式Mac
- Python基礎語法及應用Python
- MVC與三層框架|Spring的基礎應用MVC框架Spring
- Kotlin基礎:抽象屬性的應用場景Kotlin抽象
- Nginx基礎篇--Linux下操作NginxLinux
- Nginx 基礎理解和安裝Nginx
- Nginx深入瞭解-基礎(一)Nginx
- Nginx深入瞭解-基礎(三)Nginx
- Util應用框架基礎(七) - 快取框架快取
- 應用配置管理,基礎原理分析
- docker 生產環境基礎應用Docker
- 攻擊JavaWeb應用[1]-JavaEE 基礎JavaWeb
- 微服務工程中,基礎元件應用微服務元件