大型网站架构与自动化运维——Squid缓存服务器

                                                       Squid缓存服务器

一、网络架构图
大型网站架构与自动化运维——Squid缓存服务器_第1张图片
二、Squid服务基础
1、缓存代理概述
(1)代理的工作机制
        当客户机通过代理来请求的时候,指定待服务器会先查询自己缓存,如果缓存有,则直接将缓存内容发送给客户机。否则由代理服务器向internet发送请求,并将返回信息缓存并发送给客户机
(2)代理的基本类型
        ①传统代理:需要在客户机程序中手动设置代理服务器地址和端口,才能使用代理服务器来访问网络
        ②透明代理:通过默认路由、防火墙策略将web访问重定向。
2、安装及运行控制
(1)编译安装
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
        ①选项含义:
        --prefix:目录
        --sysconfdir:配置文件位置
        --enable-arp-acl:通过客户端MAC进行管理,放置IP欺诈
        --enable-linux-netfilter:使用内核过滤
        --enable-linux-tproxy:支持透明模式
        --enable-async-io:异步IO,提升存储性能
        --enable-err-language:错误信息语言
        --enable-underscore:允许URL中有下划线
        --enable-poll:使用poll()模式,提升性能
        --enable-gnuregex:使用GUN正则表达式
        ②创建连接文件、用户
        ln -s /user/local/squid/sbin/* /usr/Local/sbin/
        useradd -M -s /sbin/nologin squid
        chown -R squid:squid /usr/local/squid/var/
(2)配置文件:squid.conf
http_port 3128:监听端口
cache_effective_user squid:指定账号
cache_effective_group squid:指定组
(3)运行控制
        ①检查配置文件语法
        squid -k parse
        ②启动、停止
        squid -z 启动前需要先初始化
        squid 启动
        squid -k kill 停止
        rm -rf /usr/local/squid/var/run/squid.pid 删除PID文件
        ③问题
        centos7版本出现只监听IPV6时,修改3128为0.0.0.0:3128

三、构建代理服务器
1、传统代理
(1)squid服务器配置
        ①修改配置文件
        repliy_body_max_size 10MB:允许下载的最大文件大小
        http_access allow all:放在http_access deny all之前

2、透明代理
(1)配置squid支持透明代理
http_port 192.168.11.101:3128 transparent
(2)设置iptables策略
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

2、ACL访问控制
    在配置文件中,ACL访问控制通过两个步骤实现:其一,使用acl配置项定义需要控制的条件;其二,通过http_access配置项对已定义的列表做允许或拒绝控制
(1)定义访问控制列表:acl 列表名称 列表类型 列表内容
大型网站架构与自动化运维——Squid缓存服务器_第2张图片
(2)设置访问权限
        ①httpd_access allow/deny 列表名
        ②取反可以在列表前加“!”
        ③没有设置任何规则时将拒绝客户端请求
        ④有规则时,没有匹配到,则执行最后一条规则
        ⑤deny MYLAN MEDIAFILE:禁止下载mp3、mp4等文件
                deny MYLAN IPBLOCK:禁止访问黑名单IP
                deny MYLAN DMBLCK:禁止访问黑名单网址
                deny MYLAN MC20:并发链接超过20则禁止
                deny allow MYLAN WORKTIME:允许工作时间上网
                deny all:禁止所有客户端使用代理


四、squid反向代理配置
1、修改配置文件
    http_port 192.168.11.10:80 vhost vport
    cache_peer  192.168.11.11 parent 80 0  www.abc.com
2、重启squid
 

五、varnish与nginx缓存服务器
1、varnish
(1)优点
具有更高的稳定性、更快的访问速度、更多的并发链接支持数,可以通过管理端口来管理缓存
(2)缺点
在高并发状态下,消耗更多的CPU/IP和内存资源
进程一旦挂起、崩溃或重启,缓存的数据会从内存中释放,此时所有的请求都会转发到后端服务器上

2、nginx
(1)缓存功能十分稳定、运行速度不逊于squid
(2)对多核CPU的利用率比其他开源软件要好
(3)支持高并发请求,能同时承受更多访问请求
六、varnish
1、varnish概述
(1)Varnish是一款高性能的开源HTTP加速器,其主要用来做为反向代理中的缓存服务器使用。
        Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
varnish的设计架构就是利用操作系统的缓存机制处理访问
(2)Varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)
        ①Child进程包含多种类型的线程,常见的如:
        Acceptor线程:接收新的连接请求并响应;
        Worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;
        Expiry线程:从缓存中清理过期内容;
(3)Varnish Configuration Language (VCL)是varnish配置缓存策略的工具
        使用VCL编写的缓存策略通常保存至.vcl文件中

2、部署
(1)安装支持软件
yum -y install libtool ncurses-devel pcre-devel libxslt groff pkgconfig libedit-devel libedit python-docutils python-imaging gcc gcc-c++ tar
(2)编译安装varnish
./configure --prefix=/usr/local/varnish --enable-debugging-symbols
make && make install
ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln -s /usr/local/varnish/bin/* /usr/local/bin/
(3)添加配置文件
cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl
(4)修改配置文件
vim /usr/local/varnish/default.vcl

backend web1 {
        .host = "192.168.11.101";
        .port = "80";
        .probe = {  #开启健康检查
                .url = "/";  #请求的URL路径
                .interval = 5s;  #查询间隔时间
                .timeout = 1s;  #超时时间
                .window = 5; #varnish保持的结果滑动窗口,该滑动窗口是一种流量控制方法,允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发送一个分组就停下来等待确认,所有此协议可以加速数据传输
                .threshold = 3; #上次检查.window数量的多少,才代表后端是健康的
        }
}

backend web2 {
        .host = "192.168.11.102";
        .port = "80";
        .probe = {
                .url = "/";
                .interval = 5s;
                .timeout = 1s;
                .window = 5;
                .threshold = 3;
        }
}

sub vcl_init {
     new bar = directors.round_robin(); #定义调度算法:random/dns
     bar.add_backend(web1);
     bar.add_backend(web2);
}
sub vcl_recv {
    set req.backend_hint = bar.backend();  #把流量转发给directors
    return(pass);  #设置不进行缓存
}

(5)启动与停止
varnishd -f /usr/local/varnish/default.vcl -a 192.168.11.21:8080
pkill varnish

你可能感兴趣的:(大型网站架构与自动化运维)