Nginx三大功能及高並發分流


Nginx三大功能及高並發分流

一、什么是Nginx

Nginx(engine x)是一個高性能的HTTP和反向代理服務器,具有內存少,高並發能力的特點。

  1. 處理靜態文件,索引文件以及自動索引;打開文件描述符緩沖。
  2. 無緩存的反向代理加速,簡單的負載均衡和容錯。

Nginx -- 代理服務器/高性能的負載均衡器

二、Nginx的三大功能

1、反向代理功能(核心功能,其他功能的依托,其實就是請求轉發)

根據用戶請求Url路徑,在nginx的配置文件nginx.conf里配置匹配規則及轉發規則,然后將請求轉發給具體的微服務(或本地的靜態資源、或本地lua腳本)進行處理(根據Url路徑請求轉發)。
反向代理

2、負載均衡功能(分流)

負載就是問題,高並發問題。均衡就是解決手段。高並發請求對單一微服務造成極大的壓力,要使這個高並發請求能夠平穩的處理,需要增加節點,直到能處理並發量問題為止。怎么控制節點?使用Nginx的負載均衡策略來控制。在Nginx的核心文件nginx.conf中配置好負載均衡策略,請求壓力就下降了,過去壓力一直在某一個服務上,現在壓力分攤到每一個微服務。負載均衡策略一般常用的有輪詢、權重,默認的是輪詢,使用最多的是權重。
負載均衡

請求轉發-->負載均衡(分流)
簡單來說就是分流:使用nginx請求轉發到目標服務器(Tomcat),當並發請求量過大,一個Tomcat不足以承擔大量請求,可以做橫向擴容(copy多個Tomcat服務器,配置不同請求端口),使用nginx進行負載均衡配置。

nginx的5種負載均衡策略
  • 輪詢(默認)
    每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
upstream backserver { 
		server 192.168.1.108; 
		server 192.168.1.109; 
} 
  • 權重(常用)
    指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
upstream backserver { 
		server 192.168.1.108 weight=7; 
		server 192.168.1.109 weight=10; 
} 
  • IP綁定 ip_hash
    每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。
upstream backserver { 
		ip_hash; 
		server 192.168.1.108:8080; 
		server 192.168.1.109:8088; 
} 
  • fair(第三方)
    按后端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backserver { 
		server server1; 
		server server2; 
		fair; 
} 
  • url_hash(第三方)
    按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,后端服務器為緩存時比較有效。
upstream backserver { 
		server squid1:3128; 
		server squid2:3128; 
		hash $request_uri; 
		hash_method crc32; 
}

3、Nginx動靜分離(作為靜態資源服務器)

Nginx不但可以存儲靜態資源還能運行,把靜態資源存放到Nginx中,Nginx不需重啟就可以運行靜態資源,只要頁面不是jsp這種動態刷新的數據,面里改的東西就會立即生效(jsp本質是個Servlet,需要編譯)。利用Nginx靜態資源服務器的功能運行靜態資源,Nginx比tomcat的性能要高很多,本質上是因為Nginx的並發處理能力強(5萬-10萬之間),另外它做靜態資源處理內部也做了一些優化,請求的時候網絡方面的優化 比tomcat要做得好。

動態資源文件:http:-->tomcat-->DB-->json-->瀏覽器
靜態資源文件:css、js、html、png、jpg ...
靜態資源服務器

(1)Linux安裝Nginx

很多公司Nginx直接安裝在服務器上,因為安裝服務器上性能更高(不安裝在docker中)。

nginx啟動:進入到nginx的sbin目錄,啟動nginx./nginx &或者直接usr/local/nginx/sbin/nginx &
nginx重啟:./nginx -s reload
nginx停止:./nginx -s stop
查看nginx是否啟動成功./nginx -t
查看nginx進程:ps -ef|grep nginx

Tomcat啟動:
cd /usr/local/tomcat/tomcat-8081/bin/
sh startup.sh &

(2)nginx.conf

用java的方法講解nginx.conf:

動態請求

在這里插入圖片描述

listen			80 
server_name		www.congyi.com
可以理解為java中的Controller上的@RequestMapping攔截80路徑 
location / {
	......
}
可以理解為java中的方法上的路徑,花括號中的可以理解為代碼塊
靜態資源

如果是靜態資源,比如http://192.168.42.11:80/order.css,那么會訪問第二個

location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
	......
}

在這里插入圖片描述

域名映射

進入到 C:\Windows\System32\drivers\etc\hosts 或者直接在運行中搜索 C:\WINDOWS\system32\drivers\etc
域名映射

在hosts文件中配置ip與域名映射,例如:127.0.0.1 congyi.com

三、Nginx高可用

高可用集群指當某一個節點或服務器發生故障時,另一個節點能夠自動且立即向外提供服務。高可用集群適用於單個節點發生故障時,能夠自動將資源、服務進行切換,這樣可以服務一直在線。
在這個過程中,對於客戶端來說是透明的。

小建議:如果在項目中用到了nginx,那么請盡量把你的服務做成高可用的。
在這里插入圖片描述

有主nginx和從nginx,當主nginx掛掉了,那么從nginx會啟用,但是之前配置的主nginx的域名與ip的映射就失效了,這時候就需要更改hosts的映射配置為從nginx的ip。這時候就用到了keepalived開放虛擬ip,監聽nginx,保證nginx24小時不間斷運行。

什么是Keepalived

Keepalived軟件起初是專為LVS負載均衡軟件設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,后來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。

keepalived+mysql
keepalived+nginx

如何使用 keepalived+nginx 實現高可用

現在假設有主、從兩個nginx服務,即在兩個不同的ip服務器上,同時每台服務器上安裝了keepalived。
監聽軟件:keepalived -- 監聽 nginx
keepalived會提供一個虛擬ip映射主從nginx的不同ip。

現在看一下主服務器上keepalived的配置:
cd /etc/keepalived/
vim keepalived.conf
在這里插入圖片描述

腳本
在這里插入圖片描述

那么我們來測一下keepalived是否能成功執行這個腳本,首先要在nginx未啟動的情況下進行測試,使用命令ps aux|grep nginx查看一下nginx的狀態,如果nginx是啟動的那么先停掉他usr/local/nginx/sbin/nginx -s stop。之后就可以啟動keepalived進行測試了。
keepalived的啟動命令和nginx的相同,進入到安裝目錄對應sbin目錄下啟動:./keepalived &
再次查看nginx狀態,驗證keepalived是否成功執行腳本重啟了nginx。

以上是主節點master的配置及操作,下面是從節點backup配置:
在這里插入圖片描述

主從節點的keepalived目錄結構、腳本文件、指向的虛擬ip是一樣的。

按上述主節點操作啟動從節點的keepalived。
現在主、從節點都啟動了,之后聯網訪問域名,訪問到的是主節點master,然后把主節點的keepalived和nginx干掉,再次訪問域名,如果還能成功訪問,則驗證了nginx的高可用配置是成功的。

ps:關於查看nginx進程的問題

在敲命令查看nginx服務進程的時候會發現有兩個nginx的進程,一個master、一個worker,master只有一個,worker可以有多個。其中master可以理解為"項目經理",worker理解為我們的程序員(打工人),當有多個請求時,一個worker干不過來,這時候就向master,也就是我們的項目經理申請再招聘一個worker。
在這里插入圖片描述

我們可以去驗證一下:
進入到vim /usr/local/nginx/conf/nginx.conf,修改worker_prosses為2個:
在這里插入圖片描述

再次查看nginx進程發現有兩個worker:
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM