怎样用虚拟机搭建varnish及varnish的基本应用

Varnish

是web缓存、代理服务器,单个并发访问量在5000个左右,因此它适合中小企业的规模。

Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算 机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构

Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。

针对文件缓存部分,master读入存储配置(-s file[,path[,size[,granularity]]] ),调用合适的存储类型,然后创建/读入相应大小的缓存大文件。接着,master初始化管理该存储空间的结构体。这些变量都是全局变量,在fork以后会被child进程所继承(包括文件描述符)。

在child进程主线程初始化过程中,将前面打开的存储大文件整个mmap到内存中(如果超出系统的虚拟内存,mmap失败,进程会减少原来的配置mmap大小,然后继续mmap),此时创建并初始化空闲存储结构体,挂到存储管理结构体,以待分配。

接着,真正的工作开始,Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HTTP连接过来,它总负责接收,然后叫醒某个等待中的线程,并把具体的处理过程交给它。Worker线程读入HTTP请求的URI,查找已有的object,如果命中则直接返回并回复用户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。

分配缓存的过程是这样的:它根据所读到object的大小,创建相应大小的缓存文件。为了读写方便,程序会把每个object的大小变为最接近其大小的内存页面倍数。然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。如果缓存已满,就根据LRU机制,把最旧的object释放掉。

释放缓存的过程是这样的:有一个超时线程,检测缓存中所有object的生存期,如果超初设定的TTL(Time To Live)没有被访问,就删除之,并且释放相应的结构体及存储内存。注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该释放内存是连续的,就将它们合并成更大一块内存。

整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的object都考虑是在内存中,如果系统内存不足,系统会自动将其换到swap空间,而不需要varnish程序去控制。

一、基本的IP配置

主机                  ip

node1.edu.com        172.16.24.1 192.168.24.1

node2.edu.com        192.168.24.11

node3.edu.com        192.168.24.12

2)所需要的varnish安装包

varnish-3.0.4-1.el6.x86_64.rpm

varnish-docs-3.0.4-1.el6.x86_64.rpm

varnish-libs-3.0.4-1.el6.x86_64.rpm

3)配置服务

node1

配置两块网卡(172.16.24.1,192.168.24.1)

node2 (192.168.24.11)

yum install php php-mysql mysql-server

提供web页面并开启web服务

#im /var/www/html/index.html

#h1>node2.edu.com</h1>

#ervice httpd start

node3(192.168.24.12)

yum install php php-mysql mysql-server

提供web页面并开启web服务

#im /var/www/html/index.html

#h1>node3.edu.com</h1>

#ervice httpd start

4)在主机1 上安装varnish

[[email protected] ~]# rpm -ivh varnish*.rpm

Preparing...                ########################################### [100%]

1:varnish-libs           ########################################### [ 33%]

2:varnish                ########################################### [ 67%]

3:varnish-docs           ########################################### [100%]

二、配置文件的意义

NFILES=131072     打开最大的文件数

MEMLOCK=82000      用多大内存空间来保存日志信息的

NPROCS="unlimited"

RELOAD_VCL=1        重新读取服务时是否重新读取VCL并重新编译vcl文件

DAEMON_OPTS="-a :6081 \       指定监听的地 址和端口

#             -T localhost:6082 \ 管理连接所使用的地址和端口

#             -b localhost:8080 \

#             -u varnish -g varnish \

#             -s file,/var/lib/varnish/varnish_storage.bin,1G"   缓存类型

-S           服务器端使用的指定密钥文件

VARNISH_VCL_CONF=/etc/varnish/default.vcl默认读取的vcl文件

VARNISH_LISTEN_PORT=80    监听的端口

VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1  管理接口所监听的地址

VARNISH_ADMIN_LISTEN_PORT=6082          管理接口监听的接口

VARNISH_SECRET_FILE=/etc/varnish/secret  使用的密钥文件

VARNISH_MIN_THREADS=50   最少线程数

VARNISH_MAX_THREADS=1000  最大线程数

VARNISH_THREAD_TIMEOUT=120  线程的超时时长

VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin基于文件存储时文件的路径

VARNISH_STORAGE_SIZE=1G   最大这个文件能有多大

VARNISH_STORAGE=    存储方式

1)编辑配置文件,定义varnish

[[email protected] varnish]#   vim /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80          #定义监听的端口

VARNISH_STORAGE="malloc,100M"   #定义使用内存来存储

2)启动服务

[[email protected] ~]# service varnish start

Starting varnish HTTP accelerator:                         [  OK  ]

[[email protected] ~]# ss -tnl

State       Recv-Q Send-Q                 Local Address:Port                   Peer Address:Port

LISTEN      0      128                               :::111                              :::*

LISTEN      0      128                                *:111                               *:*

LISTEN      0      128                               :::80                               :::*

LISTEN      0      128                                *:80                                *:*

3)定义单个后端服务器

#cd /etc/varnish/

#vim text.vcl

backend webser{

.host = "192.168.24.11";

.port = "80";

}

4)连接varnish

[[email protected] varnish]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

200 201

-----------------------------

Varnish Cache CLI 1.0

-----------------------------

Linux,2.6.32-431.el6.x86_64,x86_64,-smalloc,-hcritbit

varnish> vcl.load test1 text.vcl

200

VCL compiled.

varnish> vcl.use test1

200

5)查看服务是否连接

三、定义vcl文件让varnish支持更多的功能

1)定义多台主机

backend web1 {

.host = "backweb1.magedu.com";

.port = "80";

}

director webservers random {

.retries = 5;

{

.backend = web1;

.weight  = 2;

}

{

.backend  = {

.host = "backweb2.magedu.com";

.port = "80";

}

.weight         = 3;

}

}

backend web1{

.host = "192.168.24.11";

.port = "80";

}

backend web2 {

.host = "192.168.24.12";

.port = "80";

}

director webserves random {

{

.backend = web1;

.weight = 2;

}

{

.backend = web2;

.weight = 3;

}

sub vcl_recv {

set req.backend = webserves;

if (req.url ~ "test.html") {

return(pass);

}

return(lookup);

}

2)设定是否命中

sub vcl_deliver {

set resp.http.X-Age = resp.http.Age;

unset resp.http.Age;

if (obj.hits > 0) {

set resp.http.X-Cache = “HIT”;

} else {

set resp.http.X-Cache = “MISS”;

}

}

3)判断是哪个主机命中的

backend webser{

.host = "192.168.24.11";

.port = "80";

}

sub vcl_deliver {

set resp.http.X-Age = resp.http.Age;

unset resp.http.Age;

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT from "+ server.ip;

} else {

set resp.http.X-Cache = "MISS";

}

}

~

~

~ backend webser{

.host = "192.168.24.11";

.port = "80";

}

sub vcl_recv {

if (req.url ~ "test.html") {

return(pass);

}

return(lookup);

}

sub vcl_fetch {

if (req.url ~ "\.(jpg|jpeg|gif|png)$") {

set beresp.ttl = 7200s;

}

if (req.url ~ "\.(html|css|js)$")   {

set beresp.ttl = 1200s;

}

}

sub vcl_deliver {

set resp.http.X-Age = resp.http.Age;

unset resp.http.Age;

if (obj.hits > 0) {

set resp.http.X-Cache = "HIT from "+ server.ip;

} else {

set resp.http.X-Cache = "MISS";

}

}

怎样用虚拟机搭建varnish及varnish的基本应用

时间: 2024-11-06 12:32:13

怎样用虚拟机搭建varnish及varnish的基本应用的相关文章

母虚拟机的安装 和 varnish(rhel6.5)

base安装(操作步骤如下):  ifconfig  hostname server1  vi /etc/sysconfig/network   vi /etc/yum.repos.d/rhel-source.repo    ##配置yum源  yum repolist     ##yum的更新  yum install -y vim lftp  yum install -y openssh-clients  cd /etc/udev/  ls  cd rules.d/  ls  rm -fr

通过虚拟机搭建windows内核调试环境

今天我们来记录下通过虚拟机搭建windows内核调试环境. 这里是官方文档. 1.在虚拟机设置中为目标计算机创建命名管道 2.在目标计算机中开启调试 3.在windbg中输入目标计算机(虚拟机)的地址信息 4.在windbg菜单中点击[Debug|Break]开始内核调试.

1、在linux服务器centos虚拟机搭建nginx网站

1.搭建linux虚拟机 具体参考 http://jingyan.baidu.com/article/86112f135e584a273697876b.html (如何在WIN7下进行LINUX虚拟机搭建) 下载软件地址: 1.VMware  自行百度下载 centos 6.5 正式版官方(32位+64位)下载 http://www.centoscn.com/CentosSoft/iso/2013/1205/2196.html 2.设置虚拟机网络 虚拟机安装后,我需要win7能够ssh访问虚拟l

Active Directory虚拟机搭建域控服务器环境

前言 还是和上一章一样,痛苦过后还是记录下给后来人提供便利为妙. 虚拟机选择:建议Hyper-V或者VMware 系统选择:建议WIindows Server 2003及以上 我这里是使用VMware Workstation Pro,Windows server 2012 R2系统. 虚拟机网络的配置 1.   查看VMware[虚拟网络编辑器],主要查看[NAT模式]. 我这里:NAT模式,VMnet8网络,IP:192.168.241.0.各位根据自己机器分配的IP做下面的操作. 2.配置本

虚拟机 搭建LVS + DR + keepalived 高可用负载均衡

一:环境说明:   LVS-DR-Master:    10.3.0.82   LVS-DR-Backup:    10.3.0.70   VIP:                10.3.0.60   RealServer1:    10.3.0.69   RealServer1:    10.3.0.83   Centos:5.7    二:安装LVS和Keepalvied软件包   1. 下载相关软件包    mkdir /usr/local/src/lvs    cd /usr/loca

Kafka1 利用虚拟机搭建自己的Kafka集群

前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ===============================================================长长的分割线==================================================================== 正文: 关于Kafka

外网访问用azure虚拟机搭建的网站

1.Ubuntu+Apache+PHP的环境搭建(此处省去了mysql的步骤) 在azure上搭建上述的开发环境和在本地PC搭建是一样的步骤,具体介绍请参看这里. 2.从外网访问 注意,这一步的前提是在第一部中,你已经可以在虚拟机中访问自己的网站了,如果你在azure上的虚拟机没有图形界面也没关系,可以参考这里,使用命令行式的浏览器浏览你的helloworld.php,以此验证环境搭建成功. 下面说一下从外网访问要设置的东西: 2.1选择网站所在的虚拟机,选择端点面板,如果这里还没有80端口,那

利用Linux虚拟机搭建服务器(一)

每当我们做一个东西的时候肯定要先有需求,然后再有逻辑,而且对需求的分析是否彻底,目标是否明确将关乎着我们开发的成败,技术只有和需求紧密结合在一起才能发挥出最大效力,那么好吧,既然这样就让我们来分析以一下,我们要做什么吧. 我们的目标是利用一个虚拟机搭建一个服务器,能够把我们的项目放上去,供别人访问(看起来似乎很简单,不过我们还是要很有多扩展的,要不然也太没追求了吧). 目标明确了那就展开行动吧,既然要用虚拟机搭一个服务器,那么第一步肯定要有一个虚拟机了 什么是虚拟机呢:虚拟机说白了就是用软件虚构

利用虚拟机搭建FTP服务

利用虚拟机搭建FTP服务 本次实验是利用虚拟机搭建FTP服务并且可以在宿主机上下载 打开控制面板 打开防火墙并且关闭防火墙 在控制面板中打开程序 点击打开或关闭windows功能 在windows功能中选着intent信息服务都打上勾 在开始菜单栏里搜索IIS并且打开Internet信息服务(IIS)管理器 点击打开更改适配器设置 打开属性 选着Interne协议版本4 使用手动IP地址 登入宿主机打开网络连接 使用手动IP地址 在宿主机中使用cmd,ping通虚拟机IP地址 在虚拟机使用IIS