如何安装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端口后,您需要将您的ApacheNginxWeb服务器端口从默认的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和Web服务器。

# 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请求和接收响应时的日志和统计信息。

测试Web服务器性能基准

我们的第三项也是最后一项测试将包括使用ab基准测试工具对Web服务器和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

结论

在本文中,我们讨论了如何在Web服务器VarnishApacheNginx前面设置缓存。请注意,我们没有深入探讨default.vcl配置文件,它允许我们进一步自定义缓存策略。

你现在可能想要参考官方文档以获取进一步的配置示例,或者使用下面的表单留下评论。

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