Varnish Cache是一款用于加速动态网站和 API 响应速度的 HTTP 加速器,它一般同 Web 服务器安装在一起,作为网站的前端以提升网站速度。Varnish Cache 是一款开源免费的软件,通过 two-clause BSD 许可发行。
Varnish Cache 还支持多个后台主机,于是我们可以将 Varnish Cache 用作反向代理以及负载均衡器。本文将演示 CentOS 7 系统如何配置 Varnish Cache 成为 HTTP 负载均衡器。
1] 环境说明
- 操作系统:CentOS 7.7
- Hostname:varnish-cache.rultr.com
- IP 地址:172.16.200.1
2] 安装 Nginx Web 服务器
演示方便起见,使用 Nginx 作为后台 Web 服务器。Nginx 的安装比较容易,将官方软件库添加到系统,然后 yum 方式安装即可。
首先添加一个软件库文件”/etc/yum.repos.d/nginx.repo”,然后将如下内容添加到文件中:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
之后,就可以使用如下命令安装 Nginx 了。Nginx 软件库具有稳定版和主线版可选,默认安装稳定版,如果需要安装主线版,则先执行如下命令:
# yum install yum-utils # yum-config-manager --enable nginx-mainline
最后,统一使用如下命令安装 Nginx:
# yum install nginx
安装完成后,新建两个虚拟主机,用于模拟多台 Web 服务器。虚拟主机配置文件分别为”/etc/nginx/conf.d/host-1.conf”和”/etc/nginx/conf.d/host-2.conf”,内容分别为:
# host-1.conf server { listen 8081; server_name localhost; location / { root /usr/share/nginx/html/host_1; index index.html index.htm; } } # host-2.conf server { listen 8082; server_name localhost; location / { root /usr/share/nginx/html/host_2; index index.html index.htm; } }
根据配置文件内容,我们创建目录并添加网页文件:
# mkdir -p /usr/share/nginx/html/{host_1,host_2} # touch /usr/share/nginx/html/host_1/index.html;touch /usr/share/nginx/html/host_2/index.html
两个虚拟网站的首页文件分别如下:
# host-1 <html> <head><title>Host_1</title></head> <body><h1>This is the default page of Host 1...</h1></body> </html> # host-2 <html> <head><title>Host_2</title></head> <body><h1>This is the default page of Host 2...</h1></body> </html>
防火墙放行8081和8082端口后,通过浏览器访问两台虚拟服务器,就会见到如下内容:
图.1 Nginx 模板两台虚拟 Web 服务器
如果系统开启了 SElinux 功能,则可能会出现 Nginx 启动失败,是由于我们使用了非标准 HTTP 端口,需要使用如下命令添加到 SElinux 规则中,当然禁用 SElinux 也不失为一种好办法,因为 SElinux 总会带来各种意外的错误。
# semanage port -l | grep ^http_port_t # semanage port -m -t http_port_t -p tcp 8081 # semanage port -m -t http_port_t -p tcp 8082
3] CentOS 7 系统安装 Varnish Cache
作了这么多准备工作,下面才开始进入正题,就是要安装 Varnish Cache。Varnish Cache 不在标准软件库中,但是在扩展软件库中可以获得。之后 yum 方式安装即可:
# yum install epel-release # yum makecache # yum install varnish
扩展软件库的 Varnish Cache 可能不是最新版,如果觉得不满意,也可以访问其官方网站下载使用。
4] 配置 Varnish Cache 负载均衡
想要更好的演示 Varnish Cache 负载均衡的工具,我们首先释放 Nginx 侦听的80端口给 Varnish Cache使用,这样仿佛访问 Web 服务器一样。释放的方法很多,最简单的就是删除侦听80端口的虚拟主机即可。
首先修改 Varnish Cache 的配置文件”/etc/varnish/varnish.params”,将默认端口修改为80:
VARNISH_LISTEN_PORT=80 #默认为6081
之后就设置 Varnish Cache 连接的后台服务器。其配置文件为”/etc/varnish/default.vcl”,修改该文件内容,配置负载启用负载均衡:
vcl 4.0; import directors; # Load the directors backend host1 { .host = "172.16.200.1"; .port = "8081"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } backend host2 { .host = "172.16.200.1"; .port = "8082"; .probe = { .url = "/"; .timeout = 1s; .interval = 5s; .window = 5; .threshold = 3; } } sub vcl_init { new lb = directors.round_robin(); # Creating a Load Balancer lb.add_backend(host1); # Add Host 1 lb.add_backend(host2); # Add Host 2 } sub vcl_recv { # send all traffic to the lb director: set req.backend_hint = lb.backend(); }
现在,启动 Varnish Cache,并查看后台主机列表:
# systemctl enable --now varnish.service # systemctl enable --now varnishlog.service # varnishadm backend.list
图.2 Varnish Cache 后台主机列表
可以看到,两个后台主机主机均可以正常工作,使用”crul”命令查看 http 头的话,就会看到一些详细信息:
图.3 Varnish Cache 的 HTTP头信息
至此,Varnish Cache 负载均衡器就配置完成,Varnish 会在两台工作正常的后台主机间循环访问,生成对应的 Web 页面。