一、虚拟机封装
1.1.安装6.5版本的虚拟机
1.2.完成后对虚拟机进行以下配置:
(1)更改主机名:
vi /etc/sysconfig/network #6.5文本编辑器为vi
(2)配置ip:
vi /etc/sysconfig/network-scripts/ifcfg-eth0
删除/etc/uaev/rules.d/70XXXXXX(否则新建的虚拟机快照网络起不来)
配置好后重启网络服务:
/etc/init.d/network restart #6的写法
(3)添加地址解析
vi /etc/hosts
(4)关闭火墙
/etc/init.d/iptables stop
/etc/init.d/ip6tables stop
chkconfig iptables off
chkconfig ip6tables off
(5)设置selinux为disabled
vi /etc/sysconfig/seliniux
(6)配置yum源
vi /etc/yum.repo.d/rhel-source.repo
(7)安装基本软件
yum install -y vim lftp openssh-clients -y
配置好后poweroff,不要再打开!
2.在真机中清除虚拟机base的缓存
yum whatprovides */virt-sysprep
yum install 1:libguestfs-tools-c-1.32.7-3.el7.x86_64 -y
virt-sysprep -d base ##清除虚拟机base的缓存
3.建立快照
(1)
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -b base.qcow2 vm1
qemu-img create -f qcow2 -b base.qcow2 vm2
qemu-img create -f qcow2 -b base.qcow2 vm3
vm1设置2048M,vm2,vm3,分别设置512M
(2.)更改vm2和vm3的ip和主机名
vim /etc/sysconfig/network
vim /etc/sysconfig/network-scripts/ifcfg-eth0
更改完成后reboot
二、缓存第一节点:client--->cdn
- 缓存在内存里,在硬盘里
- 存储的时间,缓存更新
- 缓存的东西,有选择的进行缓存,降低数据库的压力,缓存热点数据
- 访问量体现:缓存在内存里,有多少内容是在缓存里读取的--命中率(hit),hit/(hit+miss),命中率高,用的人多。
- pv--page view(页面访问,判断访问量)
- uv--user view(用户访问)都是
- active connection
- qps --quest per second 每秒的请求量
- 缓存对象:生命周期,定期清理缓存内容,强迫更新
- 缓存空间耗尽:LRU 最近最少使用的缓存
- 缓存的5个处理步骤:(通过url键值对)解析请求--查询缓存--新鲜度检测--发送响应--记录在日志里
1.配置varnish
在server1:
(1)安装varnish
安装好后cat /etc/passwd 会自动建立一个用户,名为:vainish
(2)查看配置文件:
vim /etc/sysconfig/vatnish
(3)查看内核允许打开文件的最大数
sysctl -a | grep file
改变可打开文件大小,要大于131072(方法:更改内存大小2048)
(4)更改主机安全限制
vim /etc/security/limits.conf
写入:
varnish - nofile 131072
varnish - memlock 82000 ##default log size
varnish - nproc unlimited ##maximum number of threads
进程(独立使用内存,)是封闭的,线程是开放的,线程是并发进行的,线程的内存是交叉使用的)
线程缺点:只要一个线程有问题其他线程也会出问题
(5)修改varnish监听端口为80
vim /etc/sysconfig/varnish
66 行 VARNISH_LISTEN_PORT=80
/etc/init.d/varnish restart #重启服务
netstat -tnlp #查看端口是否打开
(6)设置varnish 默认文件
vim /etc/varnish/default.vcl
##修改varnish监听的网络服务器的ip
更改 .host="172.25.60.2" #方向代理172.25.60.2
(7)查看varnish开启的进程
pa aux | grep varnish
第一个是:超级用户的进程master:监控子进程,当子进程产生错误关闭时 root进程再fork一个
第二个是:子进程
cat /proc/2002/status #2002为进程号
server2:#server2作为网络服务器
(1)安装httpd
/etc/init.d/httpd start
(2)编辑默认发布文件
vim /var/www/html/index.html
在物理机上:打开firefox,访问:172.25.60.1
方向代理不接受请求,会抛向网络服务器
三、查看缓存命中情况
1.查看缓存
(1)设置varnish 默认文件
vim /etc/varnish/default.vcl
##配置一个后端服务器
backend web1 {
.host = "172.25.38.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
(2)在物理机上测试缓存命中:
curl -I 172.25.86.1
- 第一次miss,在服务器上取的
- 第二次及以上:hit 在缓存里取的
- Age:存在缓存里的时间,默认最多120秒
2.清除缓存
varnishadm ban.url .*$ #,清除所有缓存,清除后第一次访问:miss,Age=0
图为清除前后对比:
varnishadm ban.url /index.html #清除指定页面缓存
清除指定页面后,访问172.25.60.1状态还是hit,而访问被清除缓存的页面的状态是miss
四、定义多个不同域名站点的后段服务器
1.在server2/3:配置网络服务 群组
定义两个客户端,不同域名进入不同的主机
yum install httpd -y
vim /var/www/html/index.heml
分别写:
<h1>server2,example.com</h1>
<h1>server3,example.com</h1>
2.server1上:设置varnish 默认文件
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.60.2";
.port = "80";
}
backend web2 {
.host = "172.25.60.3";
.port = "80";
}
##当访问 www.westos.org 域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,
访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
读缓存,如果在,从缓存中读取,如果不再向deliver请求
3.在物理机(真机)上:
添加本地解析:
vim /etc/hosts
172.25.60.1 server1 www.westos.org bbs.westos.org
curl www.westos.org
curl bbs.westos.org
五、设置轮循实现负载均衡
1.设置varnish 默认文件
server1:
vim /etc/varnish/default.vcl
director lb round-robin{ #轮循
{.backend=web1;}
{.backend=web2;}
}
set req.backend = lb;
return (pass);
不让他缓存:return (pass);每次访问都取原服务器读取;
/etc/init.d/varnish reload
2.在物理机(真机)上:
测试:curl www.westos.org
curl -I www.westos.org #每次都是miss
六、varnish虚拟主机
一台服务器部署两个apache服务
1.在server3上:配置虚拟主机
vim /etc/httpd/conf/httpd.conf
#文件内容:
990 NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
2.编辑默认发布目录
mkdir /www /bbs
vim /www/index.html
vim /bbs/index.html
<h1>server3 - www.westos.org</h1>
<h1>server3 - bbs.westos.org</h1>
/etc/init.d/httpd restart #重启服务
3.在物理机(真机)上:
curl www.westos.org
七、推送平台搭建
1. 安装服务
yum install httpd php unzip -y
2. 将http的端口改为8080 (因为varnish用的80端口)
vim /etc/httpd/conf/httpd.conf
Listen 8080
/etc/init.d/httpd start
/etc/init.d/httpd restart
3. 解压bansys.zip包,将解压后的内容放在,/var/www/html/
vim /var/www/html/config.php
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.60.1'),
'port' => '8080',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
4. vim /etc/varnish/default.vcl
acl westos {
"127.0.0.1";
"172.25.60.0"/24;
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
/etc/init.d/varnish restart
5.在物理机上测试:
(1)清除全部缓存
curl -I www.westos.org #多访问几次,记录在缓存中
打开firefox:http://172.25.60.1:8080/
curl -I www.westos.org #缓存信息被清除
(2)清除指定页面的缓存:
curl -I www.westos.org/index.html ##访问指定界面,记录在 缓存中
curl -I www.westos.org
清除指定页面的缓存:
再次访问:
curl -I www.westos.org/index.html ##清除的指定页面缓存被清除,状态为miss
curl -I www.westos.org #缓存没有被清除,状态为hit
八、VCL 处理流程
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。