当前位置 主页 > 服务器问题 > Linux/apache问题 >

    基于Centos7 部署Varnish缓存代理服务器

    栏目:Linux/apache问题 时间:2020-01-16 14:13

    一.Varnish概述

    1.Varnish 简介

    Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合。与传统的squid相比,Varnish具有高性能、速度快、管理更加方便等优点,目前很多大型的网站都开始尝试使用Varnish来代替squid,这便是Varnish迅速发展的最根本的原因。

    Varnish的主要特征:

    (1)缓存代理位置:可以使用内存也可以使用磁盘;
    (2)日志存储:日志存储在内存中;
    (3)支持虚拟内存的使用;
    (4)有精确的时间管理机制,即缓存的时间属性控制;
    (5)状态引擎架构:在不同的引擎上完成对不同的缓存和代理数据进行处理;
    (6)缓存管理:以二叉堆管理缓存数据,做到数据的及时清理;

    2.Varnish 与 Squid 的对比相同点

    都是开源软件; 都是一个反向代理服务器;

    Varnish 的优势

    (1)稳定性:Varnish和Squid在完成相同负载的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid需要经常重启;
    (2)访问速度更快:Varnish所有缓存的数据都是直接从内存中读取,而Squid是从硬盘中读取;
    (3)支持更多的并发连接:因为Varnish的TCP连接和释放的速度比Squid快很多

    Varnish 的劣势

    (1)Varnish进程一旦重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力;
    (2)在Varnish使用中如果使用单个URL的请求通过负载均衡时,则每次请求都会落在不同的Varnish服务器中,造成请求都会到后端服务器;而且同样的秦桂在多台服务器上缓存,也会造成Varnish的缓存资源的浪费,造成性能下降;

    Varnish 劣势的解决方案

    针对劣势一:在访问量很大的情况下推荐使用 varnish 的内存缓存方式启动,而且后面需要 跟多台 squid/nginx 服务器。主要为了防止前面的 varnish 服 务、服务器被重启的情况下, 大量请求穿透 varnish,这样 squid/nginx 可以就担当第二层 CACHE,而且也弥补了 varnish 缓 存在内存中重启都会释放的问题;
    针对劣势二:可以在负载均衡上做 url 哈希,让单个 url 请求固定请求到一台 varnish 服务器 上;

    3.Varnish的工作原理

    当Varnish服务器收到客户端的请求时,首选检查缓存中是否有数据,如果有,则直接响应客户端;如果没有则向后端服务器请求相应的资源,缓存到Varnish服务器本地,再响应客户端;

    根据规则和请求页面的类型选择数据是否需要进行缓存,可以根据请求头中Cache-Contorl判断是否缓存,以及cookis是否有标记,这些功能都可以通过编写配置文件的方式来实现。

    4.Varnish简单架构

    Varnish分为management进程和child进程

    management进程:对child进程进行管理,同事对VCL配置进行编译,并应用到不同的状态引擎中; child进程:生成线程池,负责对用户请求进行处理,并通过hash查找返回用户结果;

    child进程生成的常见线程有

    accept线程:接收新的连接请求并响应; worker线程:会话,处理请求资源; expiry线程:清除缓存中过期的内容;

    5.varnish 主要配置部分

    后端配置:给Varnish添加反向代理服务器节点,最少配置一个; ACL配置:给Varnish添加访问控制列表,可以指定这些列表访问或禁止访问; probes配置:给Varnish添加探测后端服务器是否正常的规则,方便切换或禁止对应后端服务器; directors配置:给Varnish添加负载均衡模式管理多个后端服务器; 核心子程序配置:给Varnish添加后端服务器切换,请求缓存、访问控制、错误处理等规则;