varnish负载均衡功能的实现

系统环境

将真机(172.25.21.250)客户端
server1(172.25.21.1)varnish缓存代理服务器,
将server2(172.25.21.2)web后端服务器
server3(172.25.21.3)web后端服务器

实验目的

假如server2比较忙
server3的请求又比较少,
所以我们让server3帮server2来分担一点
Server3可以同时处理两个域名的请求,
一个iP对应两个域名请求:
我们就得server3配置apache的虚拟主机
在server3中

[root@server2 html]# cd /www/
[root@server2 www]# cat index.html
www-server2
[root@server3 html]# vim /etc/httpd/conf.d/vhost.conf
[root@server3 www]# cat /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
    DocumentRoot /www
    ServerName www.westos.org
</VirtualHost>
<Directory "/www">
    Require all granted
</Directory>	

<VirtualHost *:80>
    DocumentRoot /bbs
    ServerName bbs.westos.org
</VirtualHost>
<Directory "/bbs">
    Require all granted
</Directory>	
[root@server3 html]# mkdir /www
[root@server3 html]# mkdir /bbs
[root@server3 html]# cd /www/
[root@server3 www]# cat index.html
www-server3
[root@server3 www]# cat /bbs/index.html
bbs-server3
[root@server3 www]# systemctl restart httpd

后端服务器实现负载均衡(轮询)

修改varnish配置文件修改轮叙模

给varnish配置文件vcl 4.1底下添加导入负载均衡模块
[root@server1 ~]# vim /etc/varnish/default.vcl
vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";

backend web1 {
    .host = "172.25.21.2";
    .port = "80";
}

backend web2 {
    .host = "172.25.21.3";
    .port = "80";
}

sub vcl_init {
    new lb = directors.round_robin();
    lb.add_backend(web1);
    lb.add_backend(web2);
}
 sub vcl_recv {
    ……
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend();
}
elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
}else {
return (synth(405));
}
}

注意:括号{}需对应,每句代码后都有分号;
若varnish服务重启失败,可通过查看/var/log/messages日志排错,
错误多为括号不对应或缺少分号

配置解释

if (req.http.host ~ “^(www.)?westos.org”)
#如果客户端请求www.westos.org
set req.http.host = “www.westos.org”;
set req.backend_hint = lb.backend();
#设置服务由server2和server3轮询提供
elsif (req.http.host ~ “^bbs.westos.org”)
#如果客户端请求bbs.westos.org
set req.backend_hint = web2;
#设置提供服务的是server3
return (synth(405));
#错误返回值

重启varnish服务
[root@server1 ~]# systemctl restart varnish
给真机添加解析
[root@foundation21 kiosk]# vim /etc/hosts
172.25.21.1 www.huige.org bbs.huige.org

负载均衡测试
[root@foundation21 kiosk]# curl www.westos.org
www-server2
[root@foundation21 kiosk]# curl www.westos.org
www-server2
[root@foundation21 kiosk]# curl www.westos.org
www-server2
……

代理服务器server1访问后端服务器
返回server2页面后并没有出现轮询,
原因是varnish服务器缓存了server2的数据信息
需要清除缓存信息

手动清除缓存信息
[root@server1 ~]# varnishadm ban req.url "~" /
再次测试

手动在varnish清空缓存,然后在客户端时访问,
才会轮询

[root@foundation21 kiosk]# curl www.westos.org
www-server2
[root@foundation21 kiosk]# curl www.westos.org
www-server3

varnish负载均衡优化(自动清理varnish)

要不断手动清理varnish服务器的缓存
才能实现后端服务器的轮询,
我们做以下改进
return(pass); #varnish代理缓存服务器不缓存服务器后端资源

修改varnish配置,增加参数
[root@server1 ~]# vim /etc/varnish/default.vcl
……
 sub vcl_recv {
    ……
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend();
return(pass);
}
elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
}else {
return (synth(405));
}
}
清除缓存信息
[root@server1 ~]# varnishadm ban req.url "~" /
重启varnish服务
[root@server1 ~]# systemctl restart varnish
再次测试
[root@foundation21 kiosk]# curl www.westos.org
www-server2
[root@foundation21 kiosk]# curl www.westos.org
www-server3
[root@foundation21 kiosk]# curl www.westos.org
www-server2
[root@foundation21 kiosk]# curl www.westos.org
www-server3
[root@foundation21 kiosk]# curl bbs.westos.org
www-server3
[root@foundation21 kiosk]# curl bbs.westos.org
www-server3
[root@foundation21 kiosk]# curl bbs.westos.org
www-server3
[root@foundation21 kiosk]# curl bbs.westos.org
www-server3

测试成功:
加入return(pass);
varnish自动清理缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值