一:部署多个后端服务器实现负载均衡的Varnish
实验步骤如下所示(这个实验需要三个虚拟机和真机):
第一步:
我们可以利用man来查看需要什么配置
man vmod_directors
第二步:
[root@meng1 ~]# find / -name vmods
/usr/lib64/varnish/vmods
[root@meng1 ~]# cd /usr/lib64/varnish/vmods
[root@meng1 vmods]# ls
libvmod_directors.so libvmod_std.so
[root@meng1 vmods]# pwd
/usr/lib64/varnish/vmods
[root@meng1 vmods]# ll /usr/lib64/varnish/vmods/libvmod_directors.so #这是要导入的包名,要写绝对路径
-rwxr-xr-x 1 root root 27536 Aug 3 2017 /usr/lib64/varnish/vmods/libvmod_directors.so
配置varnish文件:
vim /etc/varnish/default.vcl
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so"; #导入包
#设置多个后端服务器
backend web1 {
.host = "172.25.11.2";
.port = "80";
}
backend web2 {
.host = "172.25.11.3";
.port = "80";
}
#以轮循的方式实现负载均衡
sub vcl_init {
new lb = directors.round_robin();
lb.add_backend(web1);
lb.add_backend(web2);
}
#当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,访问其他页面报错。
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));
}
}
重启服务
第三步:
配置新的apache,nodel2已经配置过,现在配置的是nodel3
第四步:
在真机/etc/hosts里配置解析
第五步:在真机测试
二.配置Varnish的虚拟主机
第一步:
在nodel3上创建虚拟主机(具体前面博客前面有讲)
cd /etc/httpd/conf.d/
vim 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>
第二步:
配置默认发布目录,配置默认发布文件并重启
mkdir /www /bbs
vim /www/index.html
vim /bbs/index.html
[root@meng3 conf.d]# cat /bbs/index.html
hahahahahaah我是bbs
[root@meng3 conf.d]# cat /www/index.html
hahahahaah我是www
第三步:在真机里面测试
注意:有些人可能会疑惑这里的www.westos.org跟之前的www.westos.org的关系,准确来说,配置的虚拟主机这个才是真的这个域名的拥有者,而我们前面认为的只是varnish将其当作web1,指定其为www.westos.org所以,当真的域名主机出现后,会“顶替”掉之前的。