实验环境:
主机 | ip | 用途 |
---|---|---|
server1 | 172.25.66.1 | varnish服务 |
server2 | 172.25.66.2 | 后端服务器 |
server3 | 172.25.66.3 | 后端服务器 |
物理机 | 172.25.254.66 | 测试端,客户端 |
1.配置多个不同域名站点的后端服务器
1.在sever3中编辑测试页
<1>在server3中安装httpd并在共享目录下创建文件写入内容,最后开启服务
[root@server3 ~]# yum install httpd -y
[root@server3 ~]# cd /var/www/html
[root@server3 html]# vim index.html
[root@server3 html]# /etc/init.d/httpd start
2. 在server1中编辑配置文件
<1>编辑/etc/varnish/default.vcl文件
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl
并添加以下内容:
backend web1 { #第一个后端服务器的名称为web1
.host = "172.25.66.2"; #第一个后端服务器的ip
.port = "80";
}
backend web2 { #第二个后端服务器的名称为web1
.host = "172.25.66.3"; #第二个后端服务器的ip
.port = "80";
}
……
#当访问 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 = web1; ##web1上获取数据
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2; ##web2上获取数据
} else {
error 404 "westos cache";
}
}
<2>编辑完配置文件后,重新启动varnish服务
[root@server1 varnish]# /etc/init.d/varnish reload
3.检测
<1>在物理机上编辑/etc/hosts文件,写入域名解析
[root@foundation66 ~]# vim /etc/hosts
[root@foundation66 ~]# cat /etc/hosts
<2>在物理机上访问www.westos.org和bbs.westos.org,会发现访问www.westos.org时访问的是后端服务器server2的中的内容,访问bbs.westos.org时访问的是后端服务器server3的中的内容
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl bbs.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl bbs.westos.org
2.CDN加速实现负载均衡的varnish过程
<1>在server1中编辑/etc/varnish/default.vcl文件并重启服务
[root@server1 varnish]# vim default.vcl
[root@server1 varnish]# /etc/init.d/varnish reload
编辑的内容如下:
#把多个后端聚合为一个组,并检测后端健康状况
director lb round-robin { #轮循
{.backend = web1;}
{.backend = web2;}
}
set req.backend = lb; #当访问www.westos.org域名时,从lb或取数据,采用轮循制度,调用平衡轮循的函数
<2>在物理机上访问www.westos.org,发现并没有出现轮循,其原因是因为没有清除缓存
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
<3>再次进入sever1的配置文件中,添加return (pass)内容,使其不进行缓存
[root@server1 varnish]# vim default.vcl
[root@server1 varnish]# /etc/init.d/varnish reload
添加的内容如下:
return (pass);
<4>再次在物理机上访问www.westos.org时,发现出现了轮循,说明varnish实现了负载均衡
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
<5>在物理机上验证没有击中缓存,即varnish没有缓存数据
[root@foundation66 ~]# curl -I www.westos.org
[root@foundation66 ~]# curl -I www.westos.org
3.varnish的虚拟主机(一个主机中包含多个解析)
1.在server3上创建虚拟主机并编辑测试页
<1>在server3上编辑httpd的主配置文件,编写虚拟主机的信息
[root@server3 html]# cd /etc/httpd/conf
[root@server3 conf]# ls
[root@server3 conf]# vim httpd.conf
文件中的需要增加的内容如下:
990 NameVirtualHost *:80 #设定虚拟主机的端口为80
……
1010 <VirtualHost *:80>
1011 DocumentRoot /www #域名前端为www
1012 ServerName www.westos.org
1013 </VirtualHost>
1014 <VirtualHost *:80>
1015 DocumentRoot /bbs #域名前端为bbs
1016 ServerName bbs.westos.org
1017 </VirtualHost>
<2>在server3上编辑测试页
[root@server3 conf]# mkdir /www /bbs
[root@server3 conf]# cd /www
[root@server3 www]# vim index.html
[root@server3 www]# cat index.html
[root@server3 www]# cd /bbs
[root@server3 bbs]# vim index.html
[root@server3 bbs]# cat index.html
<3>重启httpd服务
[root@server3 bbs]# /etc/init.d/httpd restart
2.在物理机中进行测试
<4>在物理机上访问www.westos.com,发现内容皆为轮循变化的
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
[root@foundation66 ~]# curl www.westos.org
<3>在物理机上访问bbs.westos.com,访问的是在server3中创建的虚拟主机中的以bbs开头的测试页
[root@foundation66 ~]# curl bbs.westos.org
[root@foundation66 ~]# curl bbs.westos.org
总结:
相当于在server3的主机中创建一个虚拟主机,此主机有两个解析,当物理机机在访问www时显示的是一个测试页(在server3中创建/www目录并在里面写入内容),当访问bbs时显示的是一个测试页(在server3中创建/bbs目录并在里面写入内容)
总的总结:
1.缓存是不同的url,调度相当于负载均衡
2.资源分类:在访问不同域名时,访问的是不同的页面(服务器资源)
3.定义两个主机的原因是,就要实现负载均衡
4.round-robin是轮循调度的意思
5.加入代码return (pass);去掉缓存再测试,出现MISS是不缓存
6.同一台服务器,部署两个web服务,需要虚拟主机
7.一个域名有一个资源,有两个
8.varnish有个web界面
9.php是一个动态页面,所以需要下载php软件