Varnish:可用来部署反向代理服务,将静态数据缓存在内存中,响应速度快,但是不支持数据持久化,可以对缓存的数据的缓存时间精确到秒,使用VCL进行管理、支持状态引擎、自带日志、监控、命令行管理模式等工具

varnish的特点
1、数据缓存在内存中,速度比较快,支持虚拟内存,I/O性能好,能够很好的嵌入到磁盘当中
2、数据不支持持久化,断电或者重启后,数据会丢失(存放不必要的数据)
3、varnish支持精确到秒的缓存
4、支持vcl管理
5、抗DDOS攻击,1个varnish可以抗1个G的DDOS攻击

varnish负载均衡调度算法:
round_robin 动态轮询 rr
fallback 选择第一个正常的服务器
random:随机
hash:会话保持

服务器信息

IP 环境
172.16.1.12 Varnish
172.16.1.13 WEB-One
172.16.1.14 WEB-Two
172.16.1.15 Client

varnish反向代理

最终效果

客户机通过访问varnish代理服务器,获取web终端的页面

部署varnish

解决依赖关系

1
yum -y install automake autoconf libtool pkgconfig graphviz ncurses-devel pcre-devel

以下包需要单独拖入

1
2
3
4
5
rpm -ivh jemalloc-devel-5.2.0-1.1.x86_64.rpm --nodeps
rpm -ivh libedit-3.0-12.20121213cvs.el7.x86_64.rpm
rpm -ivh libedit-devel-3.0-12.20121213cvs.el7.x86_64.rpm
rpm -ivh python-docutils-0.11-0.3.20130715svn7687.el7.noarch.rpm --nodeps
rpm -ivh python-Sphinx-1.6.5-3.10.1.noarch.rpm --nodeps

解压varnish安装包

1
2
3
tar zxf varnish-4.1.11.tgz -C /usr/src
cd /usr/src/varnish-4.1.11/
./configure --prefix=/usr/local/varnish && make && make install

命令路径优化

1
2
ln -s /usr/local/varnish/sbin/* /usr/local/sbin
ln -s /usr/local/varnish/bin/* /usr/local/bin

复制配置文件模板

1
cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl

编辑varnish配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
vim /usr/local/varnish/default.vcl
添加到后端服务器检查
probe health {
.url = "/"; # 检查请求的url路径
.timeout = 3s; # 超时时间3s
.interval = 1s; # 访问间隔时间1s
.window = 5; # 维持5个窗口
.threshold = 3; # 5个窗口中至少3个是成功的
}
# 满足以上条件的状态为健康
backend web1 {
.host = "172.16.1.13"; # 后端服务器IP
.port = "80"; # 端口
.probe = health; # 添加对本主机的健康检查
}
backend web2 {
.host = "172.16.1.14";
.port = "80";
.probe = health;
}
import directors; # 导入集群模块
sub vcl_init{ # 使用轮询模块
new back = directors.round_robin(); # 使用rr轮询
back.add_backend(web1);
back.add_backend(web2);
}
sub vcl_recv{ # 做了健康检查,必须写这个模块
set req.backend_hint = back.backend(); # 如果站点不健康,则屏蔽掉(rr轮询后端集群)
}

启动服务

1
2
varnishd -f /usr/local/varnish/default.vcl   # 使用配置文件启动
netstat -anpt | grep varnishd # 检测是否启动成功

部署web-one服务器

因为是实验环境,所以直接使用yum安装

1
2
3
4
yum -y install httpd
echo "welcome to WEB-One" >> /var/www/html/index.html
systemctl restart httpd
systemctl stop firewalld

部署web-two服务器

因为是实验环境,所以直接使用yum安装

1
2
3
4
yum -y install httpd
echo "welcome to WEB-Two" >> /var/www/html/index.html
systemctl restart httpd
systemctl stop firewalld

验证

为了更直观的看到是由varnish来获取的页面,所以监听varnish的日志和http的访问日志

varnish反向代理服务器:varnishlog
web服务器:tail -f /var/log/httpd/access_log
客户机:curl 172.16.1.12(varnish反向代理)