开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

高性能缓存服务器Squid架构配置

简介:
+关注继续查看

 前言随着网站访问人数越来越多,承受的并发和压力也越来越高,这时候我们需要对网站和架构进行优化,今天我们来讨论使用Squid对架构进行优化,缓存网站。网上对squid描述的文章也有成千上万,我这里简单记录一下实践的步骤。

一、实施环境

1
2
3
系统版本:CentOSx86_64 5.8
Squid版本:squid-2.6
Nginx版本:nginx-1.4.2

二、正式安装

  安装之前我们需要对系统进行优化,主要优化系统内核相关参数,仅供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
vi /etc/sysctl.conf
#sysctl.conf config 2014-03-26
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 15
net.ipv4.ip_local_port_range = 1024    65535

优化Linux文件打开最大数:

1
2
3
4
5
vi  /etc/security/limits.conf 
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

接下来上自动安装Squid脚本,里面分别配置了两个虚拟主机域名,前端有LVSLVS均衡后端多组squid集群,根据命中率去调整squid集群的数量,Squid后端均衡Nginx或者Apache。(完整的架构LVS+Keepalived+Squid+Nginx+Resin/Tomcat/PHP+MySQL集群)

简单逻辑图如下:

wKiom1MyeQCSP8bRAAGXIgAao8Q437.jpg


 直接上脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/sh
#Auto make install squid server
#Author wugk 2014-03-26
SQUID_CNF=/etc/squid/squid.conf
CACHE_DIR=(
    /data/cache1
    /data/cache2
)
#Install squid shell
yum install -y squid
#config squid.conf
cat >>$SQUID_CNF <<EOF
#global config squid.conf 2014-03-26
http_port 80 accel vhost vport
cache_peer 192.168.149.128 parent 80 0 originserver name=wugk1
cache_peer 192.168.149.129 parent 80 0 originserver name=wugk2
cache_peer_domain wugk1 www.wugk1.com
cache_peer_domain wugk2 www.wugk2.com
visible_hostname localhost
forwarded_for off
via off
cache_vary on
#acl config
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8     # RFC1918 possible internal network
acl localnet src 172.16.0.0/12  # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080         # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl all src 0.0.0.0/0
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
acl PURGE method PURGE
http_access allow PURGE localhost
http_access deny PURGE
#squid config 2014-03-25
cache_dir aufs /data/cache1 10240 16 256
cache_dir aufs /data/cache2 10240 16 256
cache_mem 4000 MB
maximum_object_size 8 MB
maximum_object_size_in_memory 256 KB
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440    50%     2880    ignore-reload
refresh_pattern .               0       20%     4320
EOF
#config cache_dir
mkdir -p  ${CACHE_DIR[@]} ;chown -R squid:squid  ${CACHE_DIR[@]}
#restart squid server
/etc/init.d/squid restart
if
    "$?" == "0" ];then
    echo "The Squid Server Install Successfully !!"
else
    echo "The Squid Server Install Failed !!,Please Check Log......"
                                                                                                                                                                              
fi

 最后测试,前端LVS截图(注LVS此处不配置了,博客有专门的安装方法)

wKiom1MyokSjpHrmAAIfiwjj0yc342.jpg

 通过浏览器查看head头,缓存命中情况截图如下:

wKiom1MyjuvyPcYVAAJ2smk3I8A715.jpg

 通过命令

1
squidclient -p 80 mgr:info |egrep "(Request Hit Ratios|Byte Hit Ratios)"

 查看缓存命中率如下:

wKiom1Mzl4DQS5i0AALkpC-Girk997.jpg

 三、批量清空缓存

  使用Shell脚本批量清空squid缓存脚本auto_clean_cache.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh
DIR=/data/cache/
Command=/usr/sbin/squidclient
if
        "$1" "" ];then
        echo "Usage:{$0 "\$1" ,Example exec $0 forum.php}"
        exit
fi
grep -r -a $1 ${DIR} | strings | grep "http:"|grep -v "=" >list.txt
count=`cat list.txt|wc -l`
if
        "$count" -eq "0" ];then
        echo -e "---------------------------------\nThe $1 cache already update,Please exit ......"   
        exit
fi
while read line
do
        $Command -m PURGE -p 80 "$line" >>/dev/null
        if [ $? -eq 0 ];then
        echo -e "----------------------------------\nThe $line cache update successfully!"
        fi
done < list.txt

 脚本执行:

1
2
3
4
[root@node2 ~]# sh auto_clean_cache.sh forum.php
----------------------------------
The http://www.wugk2.com/forum.php cache update successfully!
[root@node2 ~]#

 更多squid优化及深入配置后期更新。。


本文转自 wgkgood 51CTO博客,原文链接:http://blog.51cto.com/wgkgood/1384580


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
边缘计算:一文理解云边端协同架构中的高性能云计算、边缘计算、云边协同
边缘计算:一文理解云边端协同架构中的高性能云计算、边缘计算、云边协同
0 0
《基于飞天的Lustre高可用、高性能架构解析》电子版地址
基于飞天的Lustre高可用、高性能架构解析
0 0
高性能分布式No SQL数据库Aerospike(一)——介绍和架构
高性能分布式No SQL数据库Aerospike(一)——介绍和架构
0 0
阿里藏经阁天花板:高性能Java架构核心原理手册,一定要偷偷看
市面上讲Java框架的书很多,包括Sping Boot、Spring Cloud、Kafka等,但这些书通常只会让你技术的“量”增长,而“质”仍处于SSM的阶段。而且互联网上并没有体系化、结构化的提升技术的“质”的教材,于是这份阿里的高性能java架构核心手册就出来了!
0 0
架构与思维:互联网高性能Web架构
架构与思维:互联网高性能Web架构
0 0
高性能MySQL架构
在前面的文章里,分享了MySQL索引的原理及使用技巧、MySQL查询语句的优化等方面的知识。这些都是针对单个库的性能优化。在微服务和容器、云的时代,应用层可以很方便地水平扩展,用于支撑更大的并发量。
0 0
高性能 MySQL(一):逻辑架构
本篇文章主要描述了 MySQL 的服务器架构,以及对每一层服务进行简短的概述。我们可以使用一张图来表示 MySQL 的逻辑架构,这便于我们的理解与记忆。
0 0
PHP 基于 SW-X 框架,搭建高性能API架构(五)
本章节学习在SW-X框架中,如何过滤404请求,并使用注解限制请求类型,使用Validate验证器组件过滤表单数据。
0 0
PHP 基于 SW-X 框架,搭建高性能API架构(四)
中间件属于AOP切面编程的衍生,SW-X中的中间件可以通过绑定路由地址,实现控制器无切入的关联绑定。在中间件中,可以进行请求拦截(前置操作)、或者请求缓存销毁(后置操作)等业务。
0 0
PHP 基于 SW-X 框架,搭建高性能API架构(三)
在SW-X中,Restful组件是对API返回值结构的封装支持。 \x\Restful类支持定义返回值的结构、Code->Msg关联、返回值强类型转换、抛出的数据类型转换、响应的请求头定义(跨域支持)。
0 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里巴巴高性能GPU架构与应用
立即下载
打造高性能高可用的搜索服务——爱奇艺搜索架构实践
立即下载
高性能Web架构之缓存体系
立即下载