说明:上一篇是varnish代理缓存服务器只有一台后端web服务器,也就是它只为一台web服务器做代理,实际企业当中这样做会造成浪费,至少是一对多的关系,因此接下来我将为大家讲解具有两台web后端的varnish系统,也就是server1代理服务器要同时为多台服务器缓存数据,server1同时为多个web服务器做代理。
一、搭建实验环境
实验所需:
准备三台虚拟机server1 server2 server3和真机
server1 (172.25.76.1) 作varnish缓存代理系统
server2 (172.25.76.2) 作后台web1服务器
server3 (172.25.76.3) 作后台web2服务器
真机作测试端
配置环境:
server1(varnish服务端):
server2(web1服务端)和server3(web2服务端)作一样的工作。
二、定义不同域名站点的后端服务器
用户访问不同的域名时,对应到不同的后端web服务器上。
在虚拟机server1上搭建varnish系统:
1.安装varnish及依赖项
yum install jemalloc-3.6.0-1.el7.x86_64.rpm varnish-4.0.5-1.el7.x86_64.rpm varnish-libs-4.0.5-1.el7.x86_64.rpm -y
2.查看varnish配置文件及版本
rpm -qc varnish # 查看varnish服务的配置文件
rpm -qa | grep varnish # 查看varnish版本
3.修改系统参数,满足varnish服务所需打开文件个数及运行内存空间
永久修改:
由于值针对varnish用户,不希望针对所有的用户,所以在配置文件中对varnish用户进行配置
vim /etc/security/limits.conf #修改系统参数
varnish - nofile 131072 #varnish用户最大开启文件个数
varnish - memlock 82000 #运行varnish时内存允许其占用82M内存空间
varnish - nproc unlimited #varnish用户开启进程数不受限制
临时修改:
对于全局而言:
4.配置服务开启端口为80端口,客户可通过httpd服务访问到
vim /etc/varnish/varnish.params
5.配置两个后端服务器
vim /etc/varnish/default.vcl #编辑varnish核心配置文件
backend default {
.host = "172.25.76.2"; ##配置后端realserver
.port = "80";
}
backend web2 {
.host = "172.25.76.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
} else {
return (synth(405));
}
}
6.重启varnish服务,查看生成的默认用户及80端口是否开启
systemctl restart varnish
netstat -antpl
id varnish
在server2上搭建web1后端服务:
yum install httpd -y
cd /var/www/html
vim index.html
systemctl start httpd
在server3上搭建web2后端服务:
yum install httpd -y
cd /var/www/html
vim index.html
systemctl start httpd
真机测试:
vim /etc/hosts #添加varnish域名解析
三、负载均衡
1、负载均衡原理
实际上企业当中的web后端服务器(为客户端提供资源的服务器)的性能有好有坏,性能差一点的就让它少干一点活,性能好的就多分担一点,现在server2这个web服务器性能比较差,server3这个服务器性能比较好,客户端通过varnish加速器访问server2的时候去轮询server3。
实际上server2和server3上面存放的资源一模一样,只是为了实验效果明显起见,写为www.westos.org和bbs.westos.org
- 当客户端第一次访问www.westos.org的时候varnish去问server2要资源
- 当客户端第二次访问www.westos.org的时候varnish去问server3要资源
这个时候server2和server3上面的资源一模一样,客户端根本察觉不到,也缓解了server2(性能差)的访问压力。
- 客户端通过varnish加速器访问bbs.westos.org的时候只去找server3(性能好)
以上这个思想就是在server2和server3之间实现调度(负载均衡),这个调度就是在varnish这个加速器上面实现的。
实现负载均衡的调度算法很多,为了实验效果明显起见,我们使用轮询方式的均衡(就是轮着干)
2、实验步骤
此实验在上个实验《定义不同域名站点的后端服务器》基础上进行
在varnish服务器端(server1虚拟机):
vcl4.0以后定义负载均衡需要导入模块,一定要加在正确的位置,不能加在文件的最开头,要加在vcl4.0下面
1.查看负载均衡模块路径
/usr/lib64/varnish/vmods/libvmod_directors.so
2.编辑/etc/varnish/default.vcl配置文件
vim /etc/varnish/default.vcl #编辑varnish核心配置文件
#'在配置文件前面加上下面内容'
##一定要加在正确的位置 不能加在文件的最开头
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";
# Default backend definition. Set this to point to your content server.
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(); ##当访问www.westos.org时,请求转到lb
#return (pass); ##测试时可打开此选项,不进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend_hint = web2;
} else {
return (synth(405));
}
}
systemctl restart varnish
在测试端(真机):
四、搭建一个varnish系统为具有多个资源的web后端服务器服务
1、背景 :
之前的每个web服务器中都只有一个资源, 实际在企业当中,比如百度的服务器:包括地图资源、新闻资源等等。 实现一台主机上放多个资源,也就是给web服务器建立虚拟主机,然后结合varnish加速器。一个域名只能对应一个ip,但一个ip可以对应多个域名!
2、注意:
配置某一后端服务器虚拟主机的配置和配置多个后端服务器的区别:
配置某一后端服务器虚拟主机 :将varnish服务器映射到同一后端服务器的不同域名,访问的其实还是同一台后端服务器(物理服务器)!
配置不同的后端服务器:将varnish服务器的的IP映射不同的域名,进而varnish根据访问的域名不同来访问不同的后端服务器!
3、实验
在web2后端主机(server3上):
在server3上配置apache虚拟主机,因为当前server3上以www.westos.org访问和bbs.westos.org访问看到的是同一个资源。可将其配置为使用不同域名访问同一server3主机时看到不同内容。
步骤一:在httpd访问规则查找目录中编辑vhost.conf文件
vim /etc/httpd/conf.d/vhost.conf #编辑httpd访问规则文件
<VirtualHost *:80>
DocumentRoot /www #转向目标目录
ServerName www.westos.org #当以域名www.westos.org访问时
</VirtualHost>
<Directory "/www"> #设置目标目录权限
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org #当以域名bbs.westos.org访问时
</VirtualHost>
<Directory "/bbs"> #设置目标目录权限
Require all granted
</Directory>
systemctl restart httpd
步骤二:创建文件中定义的查找目录,编辑默认发布文件
在客户端(真机)测试: