varnish基本应用(二)
作为一个缓存来讲,它首先的是一个代理。varnish本身来讲http协议的反向代理,后端可以拖动多个主机来提供内容,一旦有多个主机,varnish如何从多个后端挑选一个主机来响应用户的请求。有实现定制的必要性。因此,它也能支持负载均衡调度的方式实现对后端主机的指定。
在官方文档中说明了如何实现,backend,方法非常简单、
Varnish使用多台后端主机
Varnish中可以使用director指令将一个或多个近似的后端主机定义为一个逻辑组,并可以指定的调度方式(也叫挑选方法)来轮流将请求发送至这些主机上。不同的director可以使用同一个后端主机,而某director也可以使用“匿名”后端主机(在director中直接进行定义)。每个director都必须有其专用名,且在定义后必须在VCL中进行调用,VCL中任何可以指定后端主机的位置均可以按需将其替换为调用某已定义的director。
backend web1 {
.host = "backweb";
.port = "80";
}
director webservers random {
.retries = 5;
{
.backend = web1;
.weight = 2;
}
{
.backend = {
.host = "backweb2";
.port = "80";
}
.weight = 3;
}
}
我提供了两台后端主机,着两台都可以定义成backend,和haproxy一样,后端存在的主机就是为了前端调用。一旦定义了多台主机,在vcl_recv中必然要指明用户给请求到达时,对于不同的用户请求应该由哪一个后端主机,在什么情况下由哪些主机响应。
比如说: 1,定义主机 # vim /etc/varnish/default.vcl backend web1{ .host = "172.16.249.99"; .port = "80"; } backend web2 { .host = "172.16.249.69"; .port = "80"; } OK。已经定义了两个后端主机,我们期望访问主页是由第一个后端主机响应,访问test.html时由第二个后端主机响应
2,指明后端主机 if (req.url ~"test.html"){ set req.backend = web1; }else{ set req.backend = web2; } 如果访问的是test.html由web1响应,否则全部给web2 ************************************
*一旦没有默认主机,必须指明后端主机。
************************************
3,装载配置
设置好后进行装载
[root@[node0] ~]varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 varnish> vcl.load backend default.vcl 200
VCL compiled.
varnish>vcl.use backend 200
varnish> vcl.list 200
available 0 boot
active 0 backend
varnish>
4,配置后端主机测试页面
node3:172.16.249.99:web1
[root@[node3] html]# cat index.html test.html