基于linux下cdn的搭建(varnish)
varnishVarnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。c...
varnish
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
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程序去控制。
物理主机: 172.25.26.254
实验主机:
varnish 172.25.26.1
apache 172.25.26.2
apache 172.25.26.3
配置varnish主机:172.25.26.1
创建:
cd /var/lib/libvirt/images/
ls
qemu-img create -f qcow2 -b dd.qcow2 dd1
配置:
hostname server1
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server1
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=no
IPADDR=172.25.26.1
PREFIX=24
/etc/init.d/network restart
ip addr
[root@server1 varnish]# cd /root
[root@server1 ~]# ls
varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]yum install * -y
cd /etc/varnish
ls
[root@server1 ~]# sysctl -a | grep file
fs.file-nr = 480 0 98861
fs.file-max = 98861
[root@server1 ~]# vim /etc/sysconfig/varnish
7 # Maximum number of open files (for ulimit -n)
8 NFILES=98000
9
10 # Locked shared memory (for ulimit -l)
11 # Default log size is 82MB + header
12 MEMLOCK=82000
13
14 # Maximum number of threads (for ulimit -u)
15 NPROCS="unlimited"
65 # VARNISH_LISTEN_ADDRESS=
66 VARNISH_LISTEN_PORT=80
[root@server1 ~]# vim /etc/security/limits.conf
# End of file
varnish - nofile 98001
varnish - memlock 82000
varnish - nproc unlimited
/etc/init.d/varnish start
netstat -antlp
一、
配置apache 172.25.26.2
创建:
cd /var/lib/libvirt/images/
ls
qemu-img create -f qcow2 -b dd.qcow2 dd2
配置:
hostname server2
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server2
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=no
IPADDR=172.25.26.2
PREFIX=24
/etc/init.d/network restart
ip addr
yum install -y httpd
/etc/init.d/httpd start
cd /var/www/html
ls
vim index.html
www.westos.org---server2
(1)配置varnish
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
backend web1 {
.host = "172.25.26.2";
.port = "80";
}
/etc/init.d/varnish reload
物理主机的测试 172.25.26.250
vim /etc/hosts
172.25.26.1 www.westos.org
浏览器:172.25.26.1
curl www.westos.org
curl www.westos.org -I
(2)、查看缓存命中情况
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
backend web1 {
.host = "172.25.26.2";
.port = "80";
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
/etc/init.d/varnish reload
物理主机的测试 172.25.26.250
curl www.westos.org
curl www.westos.org -I
二、
配置apache 172.25.26.3
创建:
cd /var/lib/libvirt/images/
ls
qemu-img create -f qcow2 -b dd.qcow2 dd2
配置:
hostname server3
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server2
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=no
IPADDR=172.25.26.3
PREFIX=24
/etc/init.d/network restart
ip addr
yum install -y httpd
/etc/init.d/httpd start
cd /var/www/html
ls
vim index.html
bbs.westos.org
(1)不同多个域名站点的后端服务器存在,此时varnish服务设置
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
###定义多个不同域名站点的后端服务器
backend web1 {
.host = "172.25.26.2";
.port = "80";
}
backend web2 {
.host = "172.25.26.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
#return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
/etc/init.d/varnish reload
物理主机的测试 172.25.26.250
vim /etc/hosts
172.25.26.1 www.westos.org bbs.westos.org
浏览器:172.25.26.1
curl www.westos.org
curl www.westos.org -I
curl bbs.westos.org
curl bbs.westos.org -I
(2)当访问www.westos.org时有可能后台服务器忽然坏掉,此时我们需要设置当其中一个有问题时,可以从其他的获取
配置apache 172.25.26.3
vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80
991 #
992 # NOTE: NameVirtualHost cannot be used without a port specifier
993 # (e.g. :80) if mod_ssl is b
1009 #</VirtualHost>
1010 <VirtualHost *:80>
1011 DocumentRoot /var/www/html
1012 ServerName bbs.westos.org
1013 </VirtualHost>
1014
1015 <VirtualHost *:80>
1016 DocumentRoot /www1
1017 ServerName www.westos.org
1018 </VirtualHost>
[root@server3 html]# vim /etc/httpd/conf/httpd.conf
[root@server3 html]# mkdir /www1
[root@server3 html]# cd /www1
[root@server3 www1]# ls
[root@server3 www1]# vim index.html
www.westos.org---server3
[root@server3 www1]# /etc/init.d/httpd restart
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
backend web1 {
.host = "172.25.26.2";
.port = "80";
}
backend web2 {
.host = "172.25.26.3";
.port = "80";
}
director westos round-robin {
{.backend = web1;}
{.backend = web2;}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westos;
#return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
/etc/init.d/varnish reload
物理主机的测试 172.25.26.250
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
return (pass);
/etc/init.d/varnish reload
物理主机的测试 172.25.26.250
curl www.westos.org
curl www.westos.org -I
curl www.westos.org
curl www.westos.org -I
curl www.westos.org
配置varnish主机:172.25.26.1
[root@server1 ~]# cd /etc/varnish/
[root@server1 varnish]# ls
default.vcl secret
[root@server1 varnish]# vim default.vcl
#return (pass);
/etc/init.d/varnish reload
[root@server1 varnish]#varnishadm ban.url /index.html
物理主机的测试 172.25.26.250
www.westos.org/index.html
www.westos.org/index.html
www.westos.org/index.html
更多推荐
所有评论(0)