varnish加速器的原理和配置,varnish实现的负载均衡,cdn推送平台搭建

本文主要是介绍varnish加速器的原理和配置,varnish实现的负载均衡,cdn推送平台搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次实验环境;redhat6.5,selinux和iptables关闭
varnish服务器:server4(172.25.92.4)
后端服务器;server5(172.25.92.5)和server6(172.25.92.6)

一,varnish的简介:
1,什么是varnish?
Varnish 是一个 web 加速器,被安装在 web 应用程序前面,缓存 web 应用程序,并响应用求,varnish 让您的 web 应用程序运行的更快,并且 varnish 灵活好用。
2,varnish的功能:
varnish的功能:
a, 一套缓存系统,在CDN中扮演web缓存的角色,性能和响应时间更优越,语法简单,可以实现很多定制化,而HAProxy无缓存
b,反代是最基本的功能,自然具备
c,可以实现动静分离
d,可以实现负载均衡
二,varnish系统架构:
varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。

Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔一段时间探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Mangagement将会重启此Child进程。

Child进程包含多种类型的线程
三,VCL简介:Varnish Configration Lnguage, 是varnish配置缓存策略的一种基于‘域‘的简单编程语言。使用VCL编写的缓存策略通常保存在.vcl文件中,其需要编译成 二进制文件才能被varnish调用。
VCL策略在启用前,会由management进程将其转换为C代码而后再有gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即Child进程。正式由于编译工作在child进程之外完成,它避免了转载错误格式VCL的风险,因此,varnish修改配置的开销非常小,其可以同时保有几分尚在引用的旧版本配置,也能够让新的配置即刻生效,编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令来完成

四,vcl函数
1,vcl_recv是在varnish完成对请求报文的解码为基本数据结构后第一个要指定的子例程,他通常有四个主要用途:
1)修改客户端数据以减少缓存对象差异性,比如删除URL中的www.等字符串
(2)基于客户端数据*选用缓存策略*:比如仅缓存特定的额URL请求、不缓存POST请求等
(3)为某web应用程序执行URL重写
(4)挑选合适的后端服务器

2,vcl_fetch如果vcl_recv是根据客户端的请求做出缓存策略来说,vcl_fetch则是根据服务器端的响应做出缓存决策,在任何VCL状态引擎中发挥pass操作都将有vcl_fetch进行后续处理

3,vcl_deliver 在缓存中找到缓存内容,发送给客户端时调用此参数

4,val_pass在进入pass模式时被调用,用于将请求直接传递至后端主机,后端主机应答数据后发送给客户端,但是不缓存任何数据,在当前连接下,每次都是犯回最新的内容

5,vcl_pipe不对客户端进行检查或做出任何操作,而是在客户端与后端服务器之间建立专业“通道”,并直接将数据在二者之间进行传送:此时,keep-alive连接中后续传送的数据也都将在通过此管道进行直接传送,并不会出现在任何日志中

6,l**lookup**表示在缓存里查找被请求的对象,并且根据查找的数据把控制权交给vcl_miss或vcl_hit

7,vcl_hit 在执行lookup指令后,如果在缓存中找到请求的内容,将自动调用此函数

8,vcl_miss函数在执行lookup指令后,如果在缓存中找不到请求的内容,将自动调用此函数,此函数可以判断是否在后端服务器上获取内容

9,vcl_hash使用 req.hash += req.http.Cookie 或者 HTTP 头文件包含的 cookie 生成 hash 字符串。

五,VCL处理流程图
这里写图片描述

六,varnish的安装和基本配置:
实验一:初识varnish缓存,指定varnish服务器(server4)的后端主机为server5,访问server4时可以自动指定到server5上的apache服务器上
server4上:
[root@server4 ~]# yum install -y varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server4 ~]# vim /etc/sysconfig/varnish
这里写图片描述
[root@server4 ~]# vim /etc/varnish/default.vcl
指定后端服务器:
这里写图片描述
编写vcl_deliever标示是否命中:
这里写图片描述
root@server4 ~]# /etc/init.d/varnish start

server5上:
[root@server5 ~]# yum install -y httpd
[root@server5 ~]vim /var/www/html/index.html

<h1>www.test.com</h1>

[root@server5 html]# /etc/init.d/httpd start

测试:
(测试一):在浏览器访问:172.25.92.4和172.25.92.5
这里写图片描述

这里写图片描述

访问结果一样,实际上server4是显示的缓存中的数据
(测试二):
使用命令:
在真机上添加解析:
vim /etc/hosts
这里写图片描述
开始未命中,因为缓存中还没有数据
这里写图片描述
第二次在缓存中命中数据:
这里写图片描述
注意:age参数是缓存的生命周期,默认是120秒失效,可以/etc/sysconfig/varnish中修改,当age过期后,缓存服务器重新从后端服务器中获取数据

实验二:
当访问 www.test.com 域名时从 web1 上取数据,访问 bbs.test.com域名时到 web2 取数据,访问其他页面报错。
server4上;
[root@server4 ~]# vim /etc/varnish/default.vcl
添加两个后端服务器:
这里写图片描述
[root@server4 ~]# /etc/init.d/varnish reload

server6上:
[root@server6 ~]# yum install -y httpd
[root@server6 ~]# vim /var/www/html/index.html

<h1>bbs.test.com</h1>

[root@server6 ~]# /etc/init.d/httpd start

测试:
在真机上添加解析:
vim /etc/hosts
这里写图片描述

使用命令:curl -I www.test.com第一次未在缓存中命中,第二次命中了
这里写图片描述

使用命令:curl -I bbs.test.com第一次未在缓存中命中,第二次命中了
这里写图片描述

由测试结果可以看出来完成了实验要求。
实验三:varnish作为负载均衡调度器实现后端主机的负载均衡

server4上:
[root@server4 ~]# vim /etc/varnish/default.vcl

backend web1 {.host = "172.25.92.5";.port = "80";
}
backend web2 {.host = "172.25.92.6";.port = "80";
}
director lb round-robin {   #调度策略rr,调度集群名lb
{ .backend = web1; }
{ .backend = web2; }
}sub vcl_recv {
if (req.http.host ~ "^(www.)?test.com") {
set req.http.host = "www.test.com";
set req.backend = lb;       #此处修改
return (pass);
} elsif (req.http.host ~ "^bbs.test.com") {
set req.backend = web2;
} else {error 404 "test cache";
}
[root@server4 ~]# varnishadm ban.url .*$  #清空缓存
[root@server4 ~]# /etc/init.d/varnish restart
Stopping Varnish Cache:                                    [  OK  ]
Starting Varnish Cache:                                    [  OK  ]

server6上:

[root@server6 ~]# vim /etc/httpd/conf/httpd.conf 990 NameVirtualHost *:801011 <VirtualHost *:80>1012     DocumentRoot /var/www/html1013     ServerName bbs.test.com1014 </VirtualHost>1017 <VirtualHost *:80>1018     DocumentRoot /www1019     ServerName www.test.com1020 </VirtualHost>[root@server6 ~]# mkdir /www
[root@server6 ~]# cd /www/
[root@server6 www]# ls
[root@server6 www]# vim index.html
<h1>www.test.com-server6</h1>

测试:
在主机上:

[root@foundation92 Desktop]# curl bbs.test.com
<h1>bbs.test.com</h1>
[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com</h1>
[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com-server6</h1>
[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com</h1>
[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com-server6</h1>

可以看出实现了轮叫算法的负载均衡。

七,cdn推送系统的搭建:

[root@server4 ~]# yum install -y httpd
[root@server4 ~]# vim /etc/httpd/conf/httpd.conf 
136 Listen 8080
[root@server4 ~]# /etc/init.d/httpd start
[root@server4 ~]# cd /var/www/html/
在次目录下get bansys.zip
yum isntall -y unzip php
unzip -x bansys.zip
cd bansys
mv * ..
cd ..
rm -fr bansys bansys.zip
vim config.php<?php//varnish主机列表//可定义多个主机列表$var_group1 = array('host' => array('172.25.92.4'),'port' => '80',            );//varnish群组定义//对主机列表进行绑定$VAR_CLUSTER = array('www.test.com' => $var_group1,);//varnish版本//2.x和3.x推送命令不一样$VAR_VERSION = "3";
?>
[root@server4 html]# vim /etc/varnish/default.vcl
#指定可以在cdn推送的主机群组,名为test
acl test {
"127.0.0.1";
"172.25.92.0"/24;
}
backend web1 {.host = "172.25.92.5";.port = "80";
}
backend web2 {.host = "172.25.92.6";.port = "80";
}
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
#vcl_recv定义了一些数据进入varnish缓存的策略sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ test) {  #不是test组里的客户端不可以被推送
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}if (req.http.host ~ "^(www.)?test.com") {
set req.http.host = "www.test.com";
set req.backend = lb;
return (pass);
} elsif (req.http.host ~ "^bbs.test.com") {
set req.backend = web2;
} else {error 404 "test cache";
}
}
[root@server4 html]# /etc/init.d/varnish restart
[root@server4 html]# /etc/init.d/httpd restart

测试:在浏览器输入:172.25.92.4:8080
这里写图片描述
如何推送?
假如后端主机server5的index.html页面发生了变化,需要更新varnish缓存,则点击“http“,将“/index.html“写入白框,然后提交即可。
在server5上:curl www.test.com/index.html,使用完整url可以看见缓存更新后的效果

这篇关于varnish加速器的原理和配置,varnish实现的负载均衡,cdn推送平台搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544354

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖