Varnish代理服务器
Varnish是什么?
Varnish是一款高性能的开源HTTP加速器,其主要用来做为反向代理中的缓存服务器使用,varnish的设计架构就是利用操作系统的缓存机制处理访问
varnish与squid的区别:
Varnish与Squid都是一个反向代理服务器,都可用作高性能的代理缓存服务器,并且都是开源软件
1.Varnish稳定性很高,squid相比varnish故障几率大
2.Varnish访问速度更快,所有缓存数据都直接从内存读取,而Squid从硬盘读取缓存数据
3.Varnish支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快
4.Varnish可以通过管理端口,使用正则表达式批量清除部分缓存,而Squid不能
5.Varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,在高并发情况下,这会给后端服务器造成很大压力
6.Varnish配置相比Squid简单,监控接口丰富,性能好,但Squid资料多,功能丰富,支持对ACL的访问控制
安装配置varnish反向代理服务器
客户端:本机192.168.0.100
代理服务器:192.168.0.105
网页服务器:192.168.0.101
1.安装相关支持包
yum -y install gcc readline-devel ncurses-devel pcre-devel python-docutils libtoollibxslt groff pkgconfig libedit-devel
2.编译安装varnish
tar zxf varnish-4.0.5.tar.gz
cd varnish-4.0.5
./configure --prefix=/usr/local/varnish --enable-debugging-symbols
make && make install
3.路径优化
ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln -s /usr/local/varnish/bin/* /usr/bin/
4.复制配置文件模板并使用修改配置文件
cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl
vim /usr/local/varnish/default.vcl
修改成代理的IP地址和端口
5.启动服务访问代理服务器测试
varnishd -f /usr/local/varnish/default.vcl
varnish负载均衡群集
客户端:本机192.168.0.100
代理服务器:192.168.0.105
网页服务器1:192.168.0.101
网页服务器2:192.168.0.102
1.修改配置文件
vim /usr/local/varnish/default.vcl
4.0版本后将director编写为varnish的模块
import directors; \\加载directors模块
#添加后端真实服务器
backend web1 {
.host = "192.168.0.101";
.port = "80";
}
backend web2 {
.host = "192.168.0.102";
.port = "80";
}
#初始化模块,定义director
sub vcl_init {
new bar = directors.round_robin(); \\定义调度算法, random dns
bar.add_backend(web1);
bar.add_backend(web2);
}
#设置缓存配置
sub vcl_recv {
# Happens before we check if we have this in cache already.
#
# Typically you clean up the request here, removing cookies you don't need,
# rewriting the request, etc.
set req.backend_hint = bar.backend(); \\把流量转发给directors
return(pass); \\设置不进行缓存
}
启动服务访问代理服务器ip
点击刷新页面跳转到另一台服务器的页面
补充:添加健康检查配置
修改配置文件: vim /usr/local/varnish/default.vcl
backend web1 {
.host = "192.168.0.101";
.port = "80";
.probe = { //开启健康检查
.url = "/"; //请求的URL路径
.interval = 5s; //查询间隔时间
.timeout = 1s; //超时时间
.window = 5; //varnish保持的结果滑动窗口,该滑动窗口是一种流量控制方法,允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发送一个分组就停下来等待确认,所有此协议可以加速数据传输
.threshold = 3; //上次检查.window数量的多少,才代表后端是健康的
}
}
重启服务测试