varnish配置及原理
varnish是一个缓存调取技术,即第二次访问的时候,如果有缓存信息,则直接从缓存中掉用。
varnish server端部署在lamp的主节点,可以对前端的访问做出后端的调度.
Varnish单节点配置:
Server 端:192.168.122.9
varnish-后端:192.168.122.188
download: varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm
yum localinstall -y varnish-3.0.3-1.el6.x86_64.rpm varnish-libs-3.0.3-1.el6.x86_64.rpm
vi /etc/varnish/default.vcl :
backend web1 {
.host = "192.168.0.188"; #这个是后端要调度的web的服务器地址
.port = "80";
}
...
###查看缓存命中情况
sub vcl_deliver {
if (obj.hits > 0) { #命中的时候
set resp.http.X-Cache = "HIT from westos cache";
}
else { #没命中的时候
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
###配置varnish 服务端口
###这个对应了你后端服务开启的端口
###就是说,后端的服务开启了什么端口,这里就要开启什么端口
# vi /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80
service varnish reload
curl -I 192.168.122.9 #前端的web调度主节点
varnish后端的负载均衡
varnish-server:192.168.122.9
varnish-loadbalancer:192.168.122.174 192.168.122.15
#注意varnish不适宜把内存设太小,不然可能导致varnish无法启动.
###定义多个不同域名站点的后端服务器
backend web1 {
.host = "192.168.122.15";
.port = "80";
}
backend web2 {
.host = "192.168.122.174";
.port = "80";
}
#合并为一个组-方便健康检查
director lb round-robin {
{.backend = web1;}
{.backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass);
#为了测试方便,不进行缓存。
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
之后客户端:设定DNS解析—192.168.122.9 www.westos.org
之后访问www.westos.org
或者用curl -I www.westos.org 来查看命中情况。