Linux 运维:虚拟机封装与CDN服务

虚拟机封装

1.新建6.5版本的虚拟机

物理机中进行图形化操作

本地安装:

Linux 运维:虚拟机封装与CDN服务_第1张图片

选择镜像:

Linux 运维:虚拟机封装与CDN服务_第2张图片

CPU:

Linux 运维:虚拟机封装与CDN服务_第3张图片

虚拟硬盘disk:

Linux 运维:虚拟机封装与CDN服务_第4张图片

虚拟机名称:

Linux 运维:虚拟机封装与CDN服务_第5张图片

安装步骤:

Linux 运维:虚拟机封装与CDN服务_第6张图片

Linux 运维:虚拟机封装与CDN服务_第7张图片

Linux 运维:虚拟机封装与CDN服务_第8张图片

Linux 运维:虚拟机封装与CDN服务_第9张图片

Linux 运维:虚拟机封装与CDN服务_第10张图片

Linux 运维:虚拟机封装与CDN服务_第11张图片

Linux 运维:虚拟机封装与CDN服务_第12张图片

选择语言:

Linux 运维:虚拟机封装与CDN服务_第13张图片

键盘:

Linux 运维:虚拟机封装与CDN服务_第14张图片

Linux 运维:虚拟机封装与CDN服务_第15张图片

时区:

Linux 运维:虚拟机封装与CDN服务_第16张图片

密码:

Linux 运维:虚拟机封装与CDN服务_第17张图片

Linux 运维:虚拟机封装与CDN服务_第18张图片

Linux 运维:虚拟机封装与CDN服务_第19张图片

Linux 运维:虚拟机封装与CDN服务_第20张图片

进行安装:

Linux 运维:虚拟机封装与CDN服务_第21张图片

2.进入虚拟机进行设置

1)删除多余文件

2)设置IP  (#网络状态设置为静态)

Linux 运维:虚拟机封装与CDN服务_第22张图片

Linux 运维:虚拟机封装与CDN服务_第23张图片

 

重启网络:

Linux 运维:虚拟机封装与CDN服务_第24张图片

查看是否更改成功

Linux 运维:虚拟机封装与CDN服务_第25张图片

3)设置yum源

Linux 运维:虚拟机封装与CDN服务_第26张图片

列出:

Linux 运维:虚拟机封装与CDN服务_第27张图片

注意:物理机的httpd一定要保持打开状态

5)修改主机名(永久修改)

6)修改本地解析文件

Linux 运维:虚拟机封装与CDN服务_第28张图片

7)关闭防火墙

chkconfig --list iptables    ##查看火墙状态

chkconfig iptables off     ##关闭火墙开机自启

8)设置selinux

Linux 运维:虚拟机封装与CDN服务_第29张图片

安装常用软件:yum install vim lftp -y

3、物理主机操作

1)virt-sysprep -d base      ##清理base虚拟机

如果virt-sysprep命令不存在,则:

 

Linux 运维:虚拟机封装与CDN服务_第30张图片

2)创建虚拟机

Linux 运维:虚拟机封装与CDN服务_第31张图片

Linux 运维:虚拟机封装与CDN服务_第32张图片

Linux 运维:虚拟机封装与CDN服务_第33张图片

Linux 运维:虚拟机封装与CDN服务_第34张图片

Linux 运维:虚拟机封装与CDN服务_第35张图片

Linux 运维:虚拟机封装与CDN服务_第36张图片

3)关闭封装的虚拟机base

只是怕被误删:

注意:母板要注意关闭后不要再打开

Linux 运维:虚拟机封装与CDN服务_第37张图片

 

CDN服务

      CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。CDN有别于镜像,因为它比镜像更智能,或者可以做这样一个比喻:CDN=更智能的镜像+缓存+流量导流。因而,CDN可以明显提高Internet网络中信息流动的效率。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问网站的响应速度。

      CDN加速将网站的内容缓存在网络边缘(离用户接入网络最近的地方),然后在用户访问网站内容的时候,通过调度系统将用户的请求路由或者引导到离用户接入 网络最近或者访问效果最佳的缓存服务器上,有该缓存服务器为用户提供内容服务;相对于直接访问源站,这种方式缩短了用户和内容之间的网络距离,从而达到加 速的效果。

   搭建CDN系统可以选择3种主流方案:
1. squid 2. varnish 3. Nginx+memcache

此篇博文详细介绍以下varnish的搭建;

 

varnish简介

      Varnish是一款高性能、开源的反向代理服务器和缓存服务器。Varnish使用内存缓 存文件来减少响应时间和网络带宽消耗。这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计和开发总监Poul-Henning Kamp是FreeBSD核心的开发人员之一,最初项目的管理与基础设施及额外开发由挪威一家Linux咨询公司Linpro提供。

说到varnish,squid就不得不提及。squid算得上是古老的缓存服务器。由于varnish先进的设计理念,性能要比squid高上许多,varnish还可以通过端口进行管理,使用正则语句做到清除指定缓存的功能,这些 squid都做不到。但是varnish在高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的缓存数据将全部丢失。

 

varnish架构

varnish是基于现代设备设计的服务项目,所以仅支持64位系统。Manager Process 负责处理请求任务,保证每个任务分配一个worker threads。所以varnish是一个重线程型服务。除此之外,manager process 包含接受CLI命令控制的功能,包括调整运行参数,vcl配置更新。初始化子进程Cacher Process,并按一定频率检测cacher在线与否。

Cacher Process 功能:

  • 监听客户端请求
  • 管理worker 线程
  • 存储缓存数据
  • 记录流量日志
  • 根据统计更新计数器数值

varnish使用工作空间减少每个线程需要请求或者修改内存时发生的争抢。varnish具有多个工作空间,最为重要的是  session 工作空间,用来维护session 相关数据。

在日志记录方面,Cacher process 使用VSL 机制来处理,这是一个共享内存空间,可以有效减少记录阻塞。日志空间分为两个部分,分别记录格式化的请求日志,以及计数器数值。可以通过varnish自带log工具进行查看,分析或者永久存储日志。

处理过程大致分为如下几个步骤:

(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

 

网站基本访问方式:

如果varnish上面没有缓存

client   ->  /hosts/dns   ->  varnish  -> 服务器-> varnish -> client

 如果varnish上面有缓存

client  ->  /hosts/dns   ->  varnish ->  client

 

搭建过程

主机环境: 

rhel6.5   selinux   and  iptables  disabled
实验主机:

server1        172.25.11.1              varnish

server2        172.25.11.2              apache

server3        172.25.11.3              apache

bogon          172.25.11.250          client

varnish的安装与配置

在server1中:

需要安装两个软件包:

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

varnish-3.0.5-1.el6.x86_64.rpm

软件包来源:http :// repo . varnish - cache . org / redhat / varnish -3.0/ el 6/ x 86_64/

安装软件

sysctl -a |grep file      查看虚拟机最大文件数

修改安全限制文件,保证流量大时,服务可以正常运行

打开文件的最大数,有如下的关系:

内核操作 > 操作系统 > 软件

vim /etc/sysconfig/varnish    #varnish的配置文件,配置varnish服务端口

将varnish默认监听端口改为80

vim /etc/security/limits.conf

指定varnish用户可以使用的资源限制

varnish           -             nofile           131072
varnish           -             memlock     82000
varnish           -             nproc           unlimited

缓存配置

vim   /etc/varnish/default.vcl      配置一个后端服务器,缓存配置

/etc/init.d/varnish start  

 netstat -antlp

Linux 运维:虚拟机封装与CDN服务_第38张图片

在server2中:

yum install httpd -y

/etc/init.d/httpd start    #开启apache服务

在server3中:

yum install httpd -y

/etc/init.d/httpd start    #开启apache服务

测试:

在真机中:

访问调度机,会访问到后端服务器的内容

Linux 运维:虚拟机封装与CDN服务_第39张图片

 

查看缓存命中情况

命中即varnish缓存中是否有需要的数据,命中则显示HIT,未命中则显示MISS

vim  /etc/varnish/default.vcl

Linux 运维:虚拟机封装与CDN服务_第40张图片

/etc/init.d/varnish reload      重载文件

真机中测试:

先编辑本地域名解析文件:

vim /etc/hosts

172.25.11.1 www.westos.org

 curl -I www.westos.org     第一次查询varnish上无缓存,显示MISS

Linux 运维:虚拟机封装与CDN服务_第41张图片

 curl -I www.westos.org     第二次查询varnish上有缓存,显示HIT

Linux 运维:虚拟机封装与CDN服务_第42张图片

通过 varnishadm 手动清除缓存
 varnishadm ban.url .*$          清除所有
 varnishadm ban.url /index.html         清除 index.html 页面缓存
varnishadm ban.url /admin/$           清除 admin 目录缓存

 

定义多个不同域名站点的后端服务器

 vim  /etc/varnish/default.vcl

backend web1 {
  .host = "172.25.11.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.11.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";
}
}

/etc/init.d/varnish reload      重载文件

测试:

vim /etc/hosts

访问不同的域名会出现相应的内容

负载均衡

主要目的:减轻主服务器的压力

vim  /etc/varnish/default.vcl

director lb round-robin {  ##建立一个名为lb的组,实现web1和web2之间的轮询
   {       .backend = web1; }
   {       .backend = web2; }
   }

set req.backend = lb;   #修改接收为lb,当客户端搜索符合条件的域名时,用lb组实现轮询
return(pass);       #为测试方便,不进行缓存

Linux 运维:虚拟机封装与CDN服务_第43张图片

如果不加pass这一行,他会先访问缓存里面的,直到缓存时间结束,才会轮换

/etc/init.d/varnish reload      重载文件

配置虚拟主机:

server2:

 vim /etc/httpd/conf/httpd.conf

Linux 运维:虚拟机封装与CDN服务_第44张图片

/etc/init.d/httpd restart

mkdir /www

 vim /www/index.html

做本地解析

 vim /etc/hosts

 

测试:

物理机中实现轮询:

Linux 运维:虚拟机封装与CDN服务_第45张图片

关闭server2  httpd服务

关闭server3  httpd服务

Linux 运维:虚拟机封装与CDN服务_第46张图片

都关闭时:

Linux 运维:虚拟机封装与CDN服务_第47张图片

 

搭建CDN推送平台

在varnish中,当web服务器更新了发布页面以后,varnish服务器中的缓存信息不会立即变化,客户还是会通过访问varnish服务器中旧的信息,所以需要我们去推送信息页面,将varnish中的指定缓存清理,让varnish去重新缓存发布页面

在server1中:

yum install   php  httpd   unzip  -y

将监听端口改为8080,防止和varnish主机中的80端口冲突

 vim /etc/httpd/conf/httpd.conf

/etc/init.d/httpd start

下载地址为:http://code.google.com/p/varnish-php-bansys/

下载bansys.zip的压缩包

unzip bansys.zip -d /var/www/html

cd /var/www/html/
[root@server1 html]# ls
bansys
[root@server1 html]# cd bansys/
[root@server1 bansys]# mv * /var/www/html/
[root@server1 bansys]# ls
[root@server1 bansys]# cd /var/www/html/
[root@server1 html]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static

vim /config.php

Linux 运维:虚拟机封装与CDN服务_第48张图片

/etc/init.d/httpd restart

netstat -antlp

 

#bansys 有两种工作模式,分别是:telnet 和 http 模式。
#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
#如果是 http 模式需要对 varnish 做以下设置:

vim  /etc/varnish/default.vcl

写入文件最上面

Linux 运维:虚拟机封装与CDN服务_第49张图片

Linux 运维:虚拟机封装与CDN服务_第50张图片

 service varnish reload

设置成功后推送平台界面:

浏览器输入:http://172.25.11.1:8080

Linux 运维:虚拟机封装与CDN服务_第51张图片

注意:要选择http推送模式

Linux 运维:虚拟机封装与CDN服务_第52张图片

Linux 运维:虚拟机封装与CDN服务_第53张图片

推送一次再刷新

Linux 运维:虚拟机封装与CDN服务_第54张图片

如此每推送一次,会清除记录在缓存中的东西,客户端访问浏览器时,会直接在后端服务器获取,这样就能完成实时更新。

 

你可能感兴趣的:(Linux 运维:虚拟机封装与CDN服务)