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 页面。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注