一、cdn的简介
1.什么是cdn
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
2.cdn的工作原理
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
二、实验开始前的准备工作
1.制作一个虚拟机母盘
因为实验中会用到多台虚拟机,所以为了方便我们先制造一个虚拟机的母盘,以后的虚拟机都是用这个虚拟机创建的快照。
##关于虚拟机的创建此处不再赘述,若有不懂的朋友可以看我之前关与虚拟机管理的博客。这里只说明虚拟机母盘上应该做的一些设定。
##本机安装的母盘使用的镜像为rhel-server-7.5-x86_64-dvd.iso,所以之后的操作包括yum源的使用都是7.5
(1)关闭防火墙,设置selinxe为disable,关闭NetworkManger
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManger
systemctl disable NetworkManger
vi /etc/sysconfig/selinux ##把selinux设置为disable,安装的系统为最小安装包,所以现在只有vi,没有vim命令
(2)ip设定,设定成真机的私有网段即可,本机的主机ip为172.25.254.21,所以虚拟机设为172.25.21.0/24这个网段中的ip
vi /etc/sysconfig/network-scripts/ifcfg-ens3 ##编辑网络配置文件
BOOTPROTO=static
DEVICE=eth0
ONBOOT=yes
IPADDR=172.25.21.1
PREFIX=24
GATEWAY=172.25.21.250 ##真机的第二个私有网段IP地址
DNS1=114.114.114.114 ##后面一些实验会用到网络
systemctl restart network
(3)搭建一个yum源,安装一些常用的软件或命令(注意:rhel7.5的yum源一般有5000多个安装包,7.3只有4700多个,不要把yum源弄错)
vi /etc/yum.repos.d/rhel.repo ##编辑yum源配置文件
[rhel7.5]
name=rhel7.5
baseurl=http://172.25.21.250/rhel7.5 ##本机使用的是真机共享的7.5镜像来搭建yum源,关于网络yum源的搭建可看之前的博客
gpgcheck=0
yum install -y vim lftp net-tools bash-* ##安装常用命令
(4)设定开机引导文件
vim /boot/grub2/grub.cfg
(5)配置本地解析文件
vim /etc/hosts
2.虚拟机的封装
(1)关闭虚拟机,清理母盘的缓存,创建虚拟机快照,删掉虚拟机的打开快捷方式,并把快照添加进virt-manager开始使用
yum install libguestfs-tools-c.x86_64 -y ##如果没有清除缓存的指令就先安装这个软件包
virt-sysprep -d westos ##清除缓存,后面加上母盘的名称即可
qemu-img create -f qcow2 -b westos.qcow2 node1 ##先创建3个虚拟机的快照
qemu-img create -f qcow2 -b westos.qcow2 node2
qemu-img create -f qcow2 -b westos.qcow2 node3
##注意:如果不删除应该避免打开母盘虚拟机,因为本身设定的是20g,所以每次运行的都会越来越大,
##注意2:如果删除后还想恢复母盘,就以添加快照的方式将母盘添加进来,快照的添加在虚拟机的管理那篇文章有详细说明
三、varnish的使用
1.客户端一般访问数据的流程为:
client -> dns -> cdn -> server -> cdn -> cache -> client
在本次实验中,以server1当作cdn服务器,server2和server3当作apache服务器,再通过主机进行访问测试。
2.varnish的安装和配置文件的查看(安装包可以在官网上下载)
根据安装依赖性,共需要三个软件包,本机使用的是varnish-4.0.5-1.el7.x86_64.rpm,varnish-libs-4.0.5-1.el7.x86_64.rpm和
jemalloc-3.6.0-1.el7.x86_64.rpm,将三个软件安装包放在同一个目录下,本机放在/mnt/下
yum install * -y ##在三个软件安装包的目录下直接安装软件
rpm -qc varnish-4.0.5-1.el7.x86_64 ##可以查看配置文件的具体位置
id varnish ##可以查看到自动生成了一个varnish用户
vim /usr/lib/systemd/system/varnish.service ##可以查看varnish可以打开的最大文件个数和内存等其他信息
3.varnish的配置
(1)配置文件的修改
vim /etc/security/limits.conf ##按照格式添加varnish的文件最大打开个数和内存大小
systemctl start varnish ##开启服务
vim /etc/varnish/varnish.params ##修改默认配置文件的监听端口为80
systemctl restart varnish
netstat -anltupe | grep varnish ##查看varnish使用的端口
(2)varnish创建的用户运行与root用户的关系
ps aux ##可以查看到两个关于varnish的进程,一个是root用户,一个是varnish用户的
root用户只控制varnish用户,而各种事情的处理都是由varnish用户的服务来处理的
cat /proc/12999/status ##查看root用户关于varnish的进程详细信息,它只控制varnish用户的进程
cat /proc/13001/status ##查看varnish用户进程的详细信息,它负责来处理各种东西
4.varnish的反向代理
(1)一台服务器的反向代理:
#修改varnish服务器的配置文件:
vim /etc/varnish/default.vcl ##修改默认配置文件
systemctl restart varnish
##vcl_deliver 通常来说,对于一个http请求流程,vcl_deliver都是最后一个处理动作。它把数据返回给客户端
#客户端测试:
curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。
curl 172.25.21.1 ##查看172.25.21.1的默认发布文件
curl -I 172.25.21.1 ##查看指定ip的头信息
#在varnish主机上:
手动清理缓存
varnishadm ban req.url "~" / ##清理根目录下的所有缓存
varnishadm ban req.url "~" /index.html ##清理指定默认发布文件的缓存
(2)两台服务器的反向代理
varnish服务器的配置:
vim default.vcl ##修改配置文件
systemctl restart varnish
vcl_recv是客户端请求报文被解析后第一个被执行的subroutine,在该subroutine我们可以添加vcl代码完成诸多功能,如:
1.缓存未命中的话去后端哪台主机请求资源 2.控制缓存策略,如仅仅针对某些url做缓存 3.完成url重写 等功能。
客户端测试:
vim /etc/hosts ##先做好本地解析
172.25.21.1 server1 www.yy.com abc.yy.com
curl www.yy.com
curl abc.yy.com
curl 172.25.21.1 ##按照配置文件vcl_recv中的写法,这个应该报错为405
(3)两台服务器反向代理的轮询设定
varnish服务器的设定:
vim default.vcl ##修改配置文件
systemctl restart varnish
添加的方法和添加的例子可以通过man vcl或者通过官方文档来查看
导入的模块和例子可以在man vmod_directors里查看帮助
主机测试:
curl www.yy.com ##访问同一个域名可以查看到默认发布文件的变化,轮询方式为1个文件响应一次
(4)一台apache服务器中的多台虚拟主机的反向代理负载均衡(域名相同的那个虚拟主机还会和另一台apache服务器以轮询的方式被访问,这是因为它的ip还被设定在varnish服务器当中)
server3的apache虚拟主机设定:
vim /etc/httpd/conf.d/vhost.conf ##编写虚拟主机配置文件
<VirtualHost *:80>
DocumentRoot /www ##默认发布目录
ServerName www.yy.com ##域名
</VirtualHost>
<Directory "/www">
Require all granted ##安全设定允许
</Directory>
<VirtualHost *:80>
DocumentRoot /abc
ServerName abc.yy.com
</VirtualHost>
<Directory "/abc">
Require all granted
</Directory>
主机测试:
crul www.yy.com
crul abc.yy.com ##域名不同只能通过域名来访问
四、varnish的图形化管理
1.安装图形化管理工具
本机使用的是安装包为 bansys.zip
yum install httpd php unzip -y ##安装解压工具和apache服务以及php
unzip bansys.zip -d /var/www/html/
cd /var/www/html/bansys/
mv * ../ ##将bansys目录下的所有文件移动到默认发布目录下(/var/www/html/下)
cd ..
vim config.php ##编辑图形化管理配置文件
vim /etc/httpd/conf/httpd.conf ##编辑apache配置文件,将默认的80端口改为8080,因为80端口用来做反向代理接受数据使用
systemctl restart httpd ##重启apache服务
在真机上输入网址并加上端口进行测试:
2.图形化管理的设定:
varnish服务器的设定:
vim /etc/varnish/default.vcl ##编辑varnish配置文件(无特殊说明都为添加内容)
systemctl restart varnish
#return(pass); 不清理缓存
#return(purge); 清空缓存
在主机上测试:
当只清空默认发布文件缓存时,其他目录下的缓存不受影响