Varnish搭建CDN网络服务

在这里插入图片描述 在这里插入图片描述
企业:
访问杭州阿里云的服务器
client发送数据—>CDN(内容分发网络)—>隔壁的服务器,如果还是不存在时,直接访问总服务器;—>负载均衡F5(硬件负载均衡:路由器的负载均衡;但是相当贵)/LVS(小型企业负载均衡;4:基于ip,效率没有7层(基于应用的)的负载均衡好)+ HA---->haproxy/nginx(7) Temproarily(临时重定向)—>web(apache/nginx):nginx:静态服务器,调度能力器,反向代理,不稳定:一条路线挂掉,全部挂掉;apache:动态资源服务器,稳定,释放了之后才可以访-问---->app(php/jsp(tomcat))---->DB(mysql(关系型数据库)/redis(非关系型数据)) zabbix(监控 ansible(paramiko的模块)/saltstack(zeroMQ):银行数据库:oragle(稳定型超级强) —>

反向代理:10086服务
正向代理:翻墙
网关()CDN(内容分发网络):存放数据,
时间局部性(缓存有时间周期)
空间局部性,LRU(最少最近原则)使用最少的数据进行清理,缓存热点数据(不是频繁更新的),频繁更新的不能缓存,动态的交互数据也不能缓存
处理总服务器的压力:在每个区域建立服务器,相当于代理服务器,如果访问的信息在本地服务器里有的话,直接返回响应;

ansible(paramiko的模块)/saltstack(zeroMQ):ssh调用http页面,直接使用页面的操作;

kvm/docker:基于内核的虚拟机
libvirtd:虚拟化接口
docker
swarm(红帽)
k8s谷歌
docker(容器):使用方式:cow(copy on write: 写实复制) 读取的是原镜像的,写的时侯时间原镜像复制过来然后再开始写;
elk:分布式一直监控,便于日志查询
git(gitlab):
svn:
openstack:搭建环境(一天)
rhcs(集群)(rhel6):只在企业6
pacemasker+haproxy(rhe7):只在企业7

squid/varnish(代理):

#为调度器前提做准备,准备三个快照,server1做调度器,server2,3做后端服务器


#首先安装虚拟机
安装7.3的虚拟机
1.修改区域,KDUMP(disabled Automatic),
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改配置,配置server母盘
1.删除/root/下的文件 rm -fr *
在这里插入图片描述
2.修改网络服务为none(7行),DEVICE是ens3,再重启网络后,再修改为eth0
gateway=172.25.10.250
在这里插入图片描述
3.关闭NetworkManager stop disable
systemctl stop NetworkManager
systemctl disable NetworkManager
在这里插入图片描述
4.配置yum源:vi yum.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.70.250/westos
gpgcheck=0
在这里插入图片描述
在这里插入图片描述
5.yum clean all
6.yum repolist
在这里插入图片描述
7.yum install -y vim lftp net-tools bash-*
在这里插入图片描述

在这里插入图片描述
8.vim /boot/grub2/grub.cfg ---->99行 添加:net.ifnames=0
在这里插入图片描述
9.vim /etc/sysconfig/selinux 关闭selinux=disabled
在这里插入图片描述
10.关闭防火墙 stop disable
systemctl stop firewalld
systemctl disable firewalld
11.设置主机名为server1
hostnamectl set-hostname server1
查看:hostname
在这里插入图片描述
12.网络配置,记得修改名称DEVICE=eth0
在这里插入图片描述
12.vim /etc/hosts 配置解析,8个 172.25.70.1-8
在这里插入图片描述
在这里插入图片描述
13.ping 主机名;网络是否可以ping通
在这里插入图片描述

14.关闭之后,不要打开,否则会保存日志,会导致它内存变大

15.在主机,清理母盘rhel7.3:virt-sysprep -d rhel7.3(母盘名称)
在这里插入图片描述
16.du -sh
17.du -sh rhel7.3.qcow2 查看该文件的磁盘用量;
在这里插入图片描述
18.建立三个快照分别为server1、server2、server3:
qemu-img create -f qcow2 -b rhel7.3small.qcow2 server1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
快照server2和server3修改更改主机名和ip
在这里插入图片描述
在这里插入图片描述

Varnish作用是做缓存
环境搭建:
server1cdn调度器
server2后端服务器web1
server3后端服务器web2

1.只有一个后端服务器web1时的调度

server1配置服务:

安装varnish

[root@server1 ~]# ls
varnish-libs-4.0.5-1.el7.x86_64.rpm
varnish-4.0.5-1.el7.x86_64.rpm
[root@server1 ~]# yum install -y *.rpm
[root@server1 ~]# rpm -qc varnish-4.0.5-1.el7.x86_64   # 查看varnish的配置文件
/etc/logrotate.d/varnish     # varnish的日志文件
/etc/sysconfig/varnish      # varnish的命令参数配置文件 
/etc/varnish/default.params    # varnish的程序主配置文件

在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# vim /etc/sysconfig/varnish
LinitNOFILES=21072    # 最多打开文件的个数
LimitMEMLOCK=64000     # 最大内存锁定大小

在这里插入图片描述

[root@server1 ~]# systemctl start varnish  # 开启varnish服务
[root@server1 ~]# systemctl status varnish

在这里插入图片描述

[root@server1 ~]# netstat -antlp | grep varnish # 查看varnish的端口
在这里插入图片描述

[root@server1 ~]# ps aux | grep varnish # 开启varnish服务之后,会自动开启两个进程
在这里插入图片描述

[root@server1 ~]# sysctl -a | grep file # 查看系统可以打开文件的个数,发现远小于varnish的最大个数
fs.file-nr = 448 0 98864
fs.file-max = 98864

配置varnish配置文件
1.配置一个后端服务器

[root@server1 ~]# vim /etc/varnish/default.vcl   # 配置后端服务器  
 backend default {  
   .host = "172.25.78.2";  
   .port = "80";
[root@server1 ~]# systemctl restart varnish

在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# vim /etc/sysconfig/varnish   # 修改varnish的端口,方便连接后端服务器
VARNISH_LISTEN_PORT=80

在这里插入图片描述

后端服务器server2配置服务

1.yum install -y httpd
在这里插入图片描述
2.systemctl start httpd
3.vim /var/www/html/index.html
添加默认页面显示内容:server2.example.com
在这里插入图片描述
4.查看80/端口是否打开:netstat -tnlp
在这里插入图片描述

客户端测试

测试当访问调度器的时候,会自动跳转到后端服务器上
在这里插入图片描述

查看缓存命中情况

在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl 
 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); 
}

在这里插入图片描述
在这里插入图片描述
[root@server1 ~]#systemctl resatrt varnish
在这里插入图片描述

[root@server1 ~]# varnishadm ban.url .*$     # 清除所有的缓存
[root@server1 ~]# varnishadm ban.url /index.html   # 清除index.html的缓存
[root@server1 ~]#systemctl reload varnish  # 重新加载服务

测试,查看缓存命中情况

[root@foundation70 Downloads]# curl -I 172.25.70.1

在这里插入图片描述

[root@foundation70 Downloads]# curl -I 172.25.70.1

在这里插入图片描述

2.定义多个不同域名站点的后端服务器上(web1,web2)

当访问www.westos.org 就会从web1(172.25.70.2)中取数据缓存到cdn中
当访问bbs.westos.org 就会从web2(172.25.70.3)中取数据缓存到cdn中
而访问其他的页面报错
在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl
backend web1 {  
.host = "172.25.78.2";  
.port = "80";
}
backend web2  {
  .host = "172.25.78.3";
  .port = "80";
}
sub vcl_recv {
     if (req.http.host ~ "^(www.)?westos.org") {          # 当访问信息以www.开头时,跳转到web1服务器上        
     set req.http.host = "www.westos.org";        
     set req.backend = web1;        
     return (pass);     #为了测试方便,不进行缓存    
     } elsif (req.http.host ~ "^bbs.westos.org") {  # 当访问信息以bbs开头时,跳转到web2服务器上        
     set req.backend = web2;       
      } else {            
      error {return(synth(405));   # 其他报错            }
      }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在web2服务器上配置
[root@server3 ~]# yum install -y httpd
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html
server3.example.com
[root@server3 html]# systemctl start httpd 

测试
(1)先写解析(可以通过访问域名来访问服务)
[root@foundation70 ~]# vim /etc/hosts
172.25.70.1 server1 www.westos.org bbs.westos.org
在这里插入图片描述
(2)开始测试
[root@foundation70 ~]# curl www.westos.org
server2.example.com
[root@foundation70 ~]# curl bbs.westos.org
server3.example.com
在这里插入图片描述

3. 负载均衡

把一个文件发布到两个服务器上面,从而缓解后台服务器的压力,提高数据的稳定性,这种情况多用于当访问量过大时负载均衡到两个服务器上,即使有一个服务器坏掉了,还有一个服务器来顶替他的工作。varnish还是可以从终端的服务器中取出客户端访问的数据缓存起来。
在server1上
[root@server1 ~]# vim /etc/varnish/default.vcl  # 把多个后端聚合为一个组,并检测后端健康状况 

 sub vcl_init {
              new li = directors.round_robin();
              li.add_backend(web1);
              li.add_backend(web2);
          } # 当访问 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 = lb; 
         return (pass); #为了测试方便,不进行缓存,pass生效表示不在cdn中取缓存据,直接在后台取数据,	  
			这样的话,了在测试中更好的看到实验效果,实际中不需要添加.实验中
			当清空了缓存数据,有一端的后台服务器挂掉之后,另一个服务器会顶
			替他,如果挂掉的服务器数据还在有效期,还是可以在cdn中方问到  
     

	} elsif (req.http.host ~ "^bbs.westos.org") { 
         set req.backend = web2; 
         } else { 
             error 404 "westos cache"; 
             } 
 }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
[root@server1 ~]#systemctl restart varnish
测试(实现了负载均衡)

[root@foundation70~]# curl  www.westos.org
server2.example.com
[root@foundation70~]# curl  www.westos.org
server3.example.com
[root@foundation70 ~]# curl  www.westos.org
server2.example.com
[root@foundation70~]# curl  www.westos.org
server3.example.com

在这里插入图片描述
当我们在cdn上把从服务器上缓存清空时,如果有一个服务器坏掉了我们依然能够访问到但此时只有从开启的服务器中缓存数据

4.一台主机上定义多个域名服务(虚拟主机的搭建)

虚拟主机:vim vhost.conf,一台主机是可以接受多个域名解析;,不仅仅是appach,也可以是其他的

在server3上
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80           # 打开虚拟主机的端口
<VirtualHost *:80>    
DocumentRoot /www    S
erverName www.westos.org
</VirtualHost>
<VirtualHost *:80>    
DocumentRoot /bbs    
ServerName bbs.westos.org
</VirtualHost>
[root@server3 ~]# mkdir /www /bbs
[root@server3 ~]# vim /www/index.html   # 写测试页面
server3 -www-vhost.exmple.com 
[root@server3 ~]# vim /bbs/index.html   # 写测试页面
server3 -bbs-vhost.exmple.com 
[root@server3 ~]# systemctl restart httpd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:

(1)写解析

[root@foundation70 ~]# vim /etc/hosts
172.25.70.3   server3 bbs.westos.org www.westos.org 

(2)测试
[root@foundation70 ~]# curl  www.westos.org
server2.examlpe.com
[root@foundation70 ~]# curl  www.westos.org
server3 -www-vhost.exmple.com 
[root@foundation70 ~]# curl  bbs.westos.org
server3 -bbs-vhost.exmple.com 

在这里插入图片描述

5.varnish cdn 推送平台(web界面清除缓存)

在 server1 上
[root@server1 ~]# yum install -y unzip httpd php  # 如果下不了,就重启一下真机的httpd
[root@server1 ~]# ls
bansys.zip  
[root@server1 ~]# unzip bansys.zip -d /var/www/html   # 解压到/var/www/html 下
[root@server1 ~]# cd /var/www/html
[root@server1 html]# ls
bansys  

在这里插入图片描述

[root@server1 html]# cd bansys/
[root@server1 ~] # yum install -y httpd
[root@server1 ~] # yum install -y php

在这里插入图片描述

[root@server1 bansys]# ls
class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 bansys]# vim config.php  
//varnish主机列表 
//可定义多个主机列表 
$var_group1 = array(
                        'host' => array('172.25.78.1'),  
                                       'port'=>'8080', 
                             ); 
//varnish群组定义 
//对主机列表进行绑定 
$VAR_CLUSTER = array( 
                        'www.westos.org' => $var_group1,   
                               );
 //varnish版本 
 //2.x和3.x推送命令不一样 
 $VAR_VERSION = "3";

在这里插入图片描述

[root@server1 bansys]# vim /etc/varnish/default.vcl	
#设置访问控制列表,在列表中的主机才能进行推送操作
acl westos {
"127.0.0.1";
"172.25.78.0"/24
}

backend web1 {  
 .host = "172.25.78.2";  
 .port = "80"; 
  }
backend web2 {  
 .host = "172.25.78.3";   
 .port = "80"; 
 } 
director lb 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 = lb;
	         #return (pass);    # 注释掉此行的目的是为了进行缓存
	  } elsif (req.http.host ~ "^bbs.westos.org") { 
	          set req.backend = web2; 
	  } else { 
	          error 404 "westos cache"; 
        }
 }
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_recv {
 if (req.request == "BAN") {                     #BAN为设置缓存 
 if (!client.ip ~ westos) {                      #westos为访问控制列表 
 error 405 "Not allowed."; 
  }
 ban("req.url ~ " + req.url); 
 error 200 "ban added"; 
  }
}

在这里插入图片描述

[root@server1 bansys]# /etc/init.d/varnish reload
[root@server1 bansys]# vim /etc/httpd/conf/httpd.conf   # 修改httpd端口,因为80端口被varnish占用了,所以把httpd的端口改为8080
Listen 8080

在这里插入图片描述

[root@server1 bansys]# mv * ..   # 把bansys所有的配置文件移动到html里
[root@server1 bansys]# systmectl restart httpd

测试:

(1)修改解析
[root@foundation78 ~]# vim /etc/hosts
172.25.78.1   server1  bbs.westos.org www.westos.org 

(2)浏览器测试	

在这里插入图片描述
在这里插入图片描述

返回到shell测试(查看命中情况)

[root@foundation78 ~]# curl -I www.westos.org # 推送成功之后,再次查看,没有缓存命中,说明成功
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值