varnish缓存策略之director

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

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

1.典型的backend配置

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

# 第二个backend
backend 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值