如何安装Varnish并执行Web服务器基准测试

當您瀏覽到當前頁面時,請思考一下發生了什麼。您可能點擊了通過電子報收到的鏈接,或者點擊了Tecmint.com首頁上的鏈接,然後被帶到了這篇文章。

簡而言之,您(或實際上是您的瀏覽器)向托管此站點的Web服務器發送了HTTP請求,服務器則返回了HTTP響應。

儘管聽起來很簡單,但這個過程涉及的遠不止這些。必須在服務器端進行大量處理,以呈現出您可以看到的格式漂亮的頁面,其中包括所有的資源 – 靜態和動態。

不深入挖掘的話,您可以想象一下,如果Web服務器需要同時回應許多這樣的請求(先從幾百個開始),它很快就會使自己或整個系統陷入瘋狂。

這就是Varnish的用武之地,它是一個高性能的HTTP加速器和反向代理。在本文中,我將解釋如何安裝和使用Varnish作為ApacheNginx的前端,以更快地緩存HTTP響應,而不會對Web服務器造成進一步的負荷。

但是,由於Varnish通常將其緩存存儲在內存中而不是磁盤上,我們需要小心並限制用於緩存的RAM空間。我們將在一分鐘內討論如何做到這一點。

如何 Varnish 工作

How Varnish Works

在 Linux 服务器上安装 Varnish 缓存

本文假设您已安装了一个 LAMPLEMP 服务器。如果没有,请先安装其中一个堆栈。

官方文件建議從開發者自己的存儲庫安裝 Varnish,因為他們始終提供最新版本。您也可以選擇從您的發行版的官方存儲庫安裝該套件,盡管它可能會有點過時。另外,請注意該項目的存儲庫僅支持 64 位 系統,而對於 32 位 機器,您將不得不依靠您發行版的官方維護的存儲庫。

此外,請注意,該項目的儲存庫僅提供對64位系統的支持,而對於32位機器,您將不得不求助於您的發行版的官方維護的儲存庫。

在本文中,我們將從每個發行版官方支持的儲存庫中安裝Varnish。做出這一決定的主要原因是要在安裝方法上提供一致性,並確保所有架構的自動依賴解析。

在基於Debian的Linux中安裝Varnish

基於Debian的發行版上,您可以使用apt命令安裝Varnish,如下所示。

# apt update 
# apt install varnish 	
Install Varnish Cache in Debian

在基於RHEL的Linux中安裝Varnish

在基於RHEL的發行版,如CentOS、Rocky和AlmaLinux上,您需要在安裝Varnish之前啟用EPEL倉庫,並使用yum命令進行安裝,如下所示。

# yum install epel-release
# yum update
# yum install varnish 
Install Varnish Cache in RHEL

如果安裝成功完成,您將根據您的發行版獲得以下varnish版本之一:

# varnishd -V

varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)

最後,如果安裝過程沒有為您自動啟動Varnish,您需要手動啟動它並設置它在開機時自動啟動。

# systemctl start varnish
# systemctl enable varnish
# systemctl status varnish
Check Varnish Cache Status

默認情況下,varnish服務使用6081端口,您可以通過運行以下netstat命令來確認。

# netstat -tunlp | grep 6081
Check Varnish Cache Port

在Linux中配置Varnish Cache

如前所述,Varnish位於外部客戶端和Web服務器之間。因此,為了使緩存對最終用戶透明,我們需要:

  1. 將 Varnish 監聽的默認端口 6081 更改為 80
  2. 將 Web 服務器監聽的默認端口更改為 8080,而不是默認的 80
  3. 將來自 Varnish 的傳入流量重定向到 Web 服務器。幸運的是,在我們完成 1)2) 步驟後,Varnish 會自動執行此操作。

更改 Varnish 端口

varnishd 進程由 systemd 控制,其單元文件位於 /usr/lib/systemd/system/varnish.service,其中包含默認的 Varnish 運行時配置。

在這裡,我們需要將默認的 Varnish 端口從 6081 更改為端口 80,並將緩存大小更改為 1GB,如以下命令所示,該命令將在編輯器中打開單元文件,如下所示。

注意:您可以根據您的硬件資源更改內存量,或者選擇將緩存文件保存到磁盤。

$ sudo systemctl edit --full varnish
OR 
# systemctl edit --full varnish
Configure Varnish Cache in Linux

在對 /etc/systemd/system/varnish.service 文件進行更改後,您需要通過運行以下命令重新加載 Systemd 守護進程:

# systemctl daemon-reload

更改 Apache 或 Nginx 端口

更改Varnish端口後,您需要將您的ApacheNginx網頁伺服器端口從預設的80更改為最常見的網絡端口,即8080

---------- On Debian-based Systems ---------- 
# nano /etc/apache2/ports.conf      [On Apache]
# /etc/nginx/sites-enabled/default  [On Nginx]

---------- On RHEL-based Systems ----------
# vi /etc/httpd/conf/httpd.conf   [On Apache]
# vi /etc/nginx/nginx.conf        [On Nginx]  
Change Apache Port

完成更改後,別忘了重新啟動Varnish和網頁伺服器。

# systemctl restart varnish 

---------- On Debian-based Systems ---------- 
# systemctl restart apache2     
# systemctl restart nginx

---------- On RHEL-based Systems ----------
# systemctl restart httpd     
# systemctl restart nginx     

在Linux中測試Varnish快取

第一個測試是通過HTTP請求使用curl命令並驗證它是否由Varnish處理:

# curl -I http://localhost
Check Varnish Cache Status

Varnish還包括兩個方便的工具:

  • 實時查看Varnish日誌,直觀地稱為varnishlog
  • 顯示Varnish快取統計信息,稱為varnishstat

作為第二個測試,在接下來的屏幕錄像中,我們將在一個CentOS伺服器(dev1,屏幕上半部分)和一個Debian伺服器(dev2,屏幕下半部分)上顯示日誌和統計信息,同時發送HTTP請求並接收響應。

測試網頁伺服器性能基準

我們的第三個也是最後一個測試將包括使用ab 基準測試工具對網頁伺服器和 Varnish 進行基準測試,並比較兩者的回應時間和 CPU 負載。

在這個特定的例子中,我們將使用CentOS伺服器,但您可以使用任何發行版並獲得類似的結果。觀察頂部的平均負載以及ab輸出中的每秒請求數行。

使用ab,我們將同時發送50-c 50)個並發請求,並重複測試1000000次(由-n 1000000指示)。 Varnish 將返回更高的每秒請求數和更低的平均負載。

重要:請記住,Varnish 正在監聽埠 80(預設 HTTP 埠),而 Apache 正在監聽埠 8080。您還可以記錄完成每個測試所需的時間。

# ab -c 50 -n 100000 http://localhost/index.html

結論

在本文中,我們討論了如何在網頁伺服器(Varnish)前設置一個緩存,無論是Apache還是Nginx。請注意,我們並未深入探討default.vcl配置文件,該文件允許我們進一步自定義緩存策略。

您現在可能想參考官方文件以獲取進一步的配置示例,或者使用下面的表單留下評論。

Source:
https://www.tecmint.com/install-varnish-cache-server/