CDN加速的实现——varnish

CDN的全称——Content Delivery Network,即内容分发网络。
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
Varnish是一款高性能的开源HTTP加速器,具有反向代理,缓存的功能。

一.部署单个后端服务器的varnish过程

1.在官网下载varnish-libs-3.0.5-1.el6.x86_64.rpm和varnish-3.0.5-1.el6.x86_64.rpm

yum install varnish-3.0.5-1.el6.x86_64.rpm
yum install varnish-libs-3.0.5-1.el6.x86_64.rpm
安装完成后,在系统的/etc/passwd中生成varnish用户,对varnish的访问控制实质上是对varnish用户的控制实现的。

这里写图片描述
2.编辑varnish文件

vim /etc/sysconfig/varnish
  将66行改为:VARNISH_LISTEN_PORT=80
  # 以下不用修改,只是查看8行 NFILES=131072         # 最多能打开的文件数,varnish会自动调整该值12行 MEMLOCK=82000        # 最多能使用的内存空间,varnish会自动调整该值15行 NPROCS="unlimited"   # 单个用户所能运行的最大线程数

3.修改varnish用户的限制文件
  因为varnish这个程序运行在varnish这个用户的私有空间内,内核对普通用户限制的最大文件数为1024.对varnish用户限制的最大文件数为131072,我们需要满足131072这个最大值。

vim /etc/security/limits.conf
  varnish         -       nofile          131073   # 满足最多能打开的文件数
  varnish         -       memlock         82000
  varnish         -       nproc           unlimited
  # 将后边的数字和上边文件中对应项改为相等

4.打开varnish服务

  /etc/init.d/varnish start

5.在varnish默认文件中写上后端服务器的IP及端口

vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.1.2";      # 后端服务器的ip
  .port = "80";              # 后端服务器的端口
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";   
# 在varnish中命中HIT访问的域名
}
else {
set resp.http.X-Cache = "MISS from westos cache";
# 后端服务器中得到MISS访问的域名
}
return (deliver);
}

5.编写配置文件后要重新加载默认文件

/etc/init.d/varnish reload   # 这是必须的

6.在物理机中的/etc/hosts中写www.westos.org的解析—>172.25.1.1(varnish主机)
www.westos.org 172.25.1.1
在server2(后端服务器)中安装httpd服务并在Apach默认发布目录中写默认发布文件
7.在物理机中测试:curl -I www.westos.org
这里写图片描述

二.具有多台后端服务器的varnish

1.打开test3虚拟机,配置test3的ip和主机名为172.25.1.3->server3
hostname server3
vim /etc/sysconfig/network
hostnmae= server3
vim /etc/sysconfig/network-scripts/ifcfg-eth0
IP=172.25.1.3
2.安装httpd服务,在httpd的默认发布目录下编辑默认发布文件index.html bbs.westos.com
3.将bbs解析到物理主机 bbs.westos.org 172.25.77.1
4.配置varnish的server1default文件

backend web1 {     # 后端第一个服务器名web1
  .host = "172.25.1.2";   
  #将server2 www.westos.org作为第一个服务器主机
  .port = "80";
}
backend web2 {     # 后端第二个服务器名web2
.host = "172.25.1.3"
#将server3 bbs.westos.org作为第二个服务器主机
  .port = "80";
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {     
# 解析域名是westos.com 或www.westos.com,均访问172.25.1.2->server2
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {   
# 解析域名为bbs.westos.com,访问172.25.1.3->server 3
set req.backend = web2;
} else {error 404 "westos cache";   
# 如果访问的域名不是这三者,404的错误
}
}

default文件每次编写完后都要reload varnish
5.物理机中的访问测试:
这里写图片描述

三.varnish后端服务器的负载均衡

1.什么是负载均衡
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。
负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据具体的使用场景选取对应的算法。在varnish中我们采用的是轮询法,平衡对待么一个后端服务器。
2.在server3的httpd的默认发布目录中建立两个虚拟主机

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName bbs.westos.org
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /www1
    ServerName www.westos.org
</VirtualHost>

将990行注释打开

3.在server3默认发布目录中书写www.westos.org - server3
在server2默认发布目录中书写www.westos.org - server2
4.在varnish主机server1中的defaults文件中写入负载均衡函数:

 director westos round-robin {   # 采用round-robin算法
{ .backend = web1; }
{ .backend = web2; }
}

Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法。

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westos;  # 调用平衡轮叫函数
#return (pass);    # 写pass表明不经过缓存直接去后端服务器拿数据
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

5.在物理主机中的测试

curl www.westos.org

如果第一次出现server2(server3),那么120秒内都是server2(萨尔ver),因为server2(server3)将数据进行了缓存;
如果访问时间大于120s,它会出现server3(server2)(因为负载均衡采用的算法是平衡轮叫,server2和server3是公平地被访问的)
如果在默认函数中写上pass,那么它每次都直接从后端服务器中直接取,一次server2一次server3
如果server2或者server3其中一个损坏(关闭htpd服务),那么客户端只会访问健康的那一个,不会访问坏的哪一个,即负载均衡的健康检查。

server2和server3中间间隔超过120秒
这里写图片描述
健康检查:
通过健康检查来确定服务器和应用的健康状况是负载均衡器器一个非常重要的功能。没有负载均衡器,客户端可能会将请求发送到已经停机的服务器上。网络管理员必须手动干预替换这台服务器,或者排除服务器的故障。有时服务器可能没有停机,但是因为某种原因,比如软件的漏洞,服务器上面运行的应用系统已经不能正常工作。比如Web应用可能正常运行,但它返回的页面却是错误的内容。负载均衡器能够检测这些情况并立即将客户请求导向到正常的服务器而不需要管理员的干预。

猜你喜欢

转载自blog.csdn.net/jay_youth/article/details/81257591