varnish缓存策略之director

来源:互联网 发布:男士滑雪帽 知乎 编辑:程序博客网 时间:2024/05/18 03:48

varnish 允许定义多个backend后端服务器,那么如何如何实现负载均衡呢

可以通过后端服务器控制组来管理:即定义 director 来管理

1.典型的backend配置

# 第一个backendbackend server1 {.host = "127.0.0.1";#web服务器或者应用服务器IP地址.port = "80";#web服务器或者应用服务器端口}# 第二个backendbackend server2 {.host = "127.0.0.2";#web服务器或者应用服务器IP地址.port = "80";#web服务器或者应用服务器端口}

2.director定义

像这种有多个后端服务器的配置,就得挑选一种策略来管理

varnish 提供多种算法,比如循环、随机、hash路由、client路由、dns等方式

(1))round-robin  采用循环的方式依次选择backend
(2)random    根据所设置的权重(weight)来选择 backend    
(3)client     根据请求的客户端属性(IP、cookie、session)来选择 backend
(4) hash     根据hash表来选择
(5))dns     根据dns解析来选择

2.1 round-robin

director server_director round-robin {{.backend = server1;}{.backend = server2;}#还可以继续定义}

2.2 random

director server_director random {.retries = 5;#表示varnish尝试找到一个 backend 的最大次数{.backend = server1; .weight = 2;}{.backend = server2; .weight = 1;}}

2.3 client

生产系统一般都是集群环境,且基本都是[会话保持]也就是[sticky session]
所谓 session粘性,能保证你访问一个Url之后,在这个站点打开的其他Url,都是去访问同一个服务器
因此针对这种情况,如果varnish没找到缓存内容,那么对这个用户而言:所有请求会到一个固定的后端服务器
好处就是:如果有多层级缓存架构,那么你不用担心缓存链匹配不正确
当然session粘性的坏处大家都知道,一但那台机器挂了。。。也会指向那台机器

针对 client 的配置策略,建议去varnish官网看例子:http://mesmor.com/2012/02/15/varnish-client-director-with-sticky-session/

director server_director client {{.backend = server1; .weight = 2;}{.backend = server2; .weight = 1;}}

注意:如果选用client算法,别忘了设置client的唯一标志identity,在  vcl_recv 节点配置
sub vcl_recv {set client.identity = req.http.cookie; #或者 http.ip  #... 其他配置}

2.4 hash

hash表的原理和client差不多,配置也相似

director server_director hash {{.backend = server1; .weight = 2;}{.backend = server2; .weight = 1;}}

2.5 dns

director server_director dns {         .list = {                 .host_header = "www.xxx.com";                 .port = "80";                 .connect_timeout = 0.4;                 "192.168.15.0"/24;  # IP段 0~255              "192.168.16.128"/25;     }         .ttl = 5m;  #查找缓存时间         .suffix = "xxx.com";  #主机名后缀 } 

最后注意:定义好director之后,在要使用的地方先声明:比如sub_recv函数里面

sub vcl_recv {set req.backend = server_director;#... 其他配置}





0 0