CDN缓存系统Varnish——搭建具有多个web服务器的varnish服务系统(含负载均衡)

说明:上一篇是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

在这里插入图片描述

步骤二:创建文件中定义的查找目录,编辑默认发布文件
在这里插入图片描述

在客户端(真机)测试:

在这里插入图片描述

发布了99 篇原创文章 · 获赞 3 · 访问量 1623

猜你喜欢

转载自blog.csdn.net/weixin_45784367/article/details/104396348
今日推荐