注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

Squid配置管理参考  

2013-05-11 03:18:18|  分类: squid系统应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

::内容提要::
1. Web Cache技术简介。
2. Squid安装的硬件要求。
3. Squid安装前的系统优化。
4. Squid安装时补丁管理。
5. Squid configure参数含义。
6. Squid命令参数的含义。
7. Squid的conf配置参数的含义(在这一部分,将其分类进行描述)
8. Squid下一步的发展。
9. 常用Squid配置举例。


一. Web Cache技术简介

       WWW技术是当今Internet上发展最快,使用最广泛的技术; WWW应用也早已取代E-mail成为Internet上数据流量最大的应用。Internet 的飞速发展,对网络的带宽建设提出更高要求。如何在现有带宽的条件下,更有效的使用WWW资源,是Internet世界关注的焦点之一。在此种迫切需求下,Web Cache技术应运而生。
       Web Cache的作用和个人电脑上网页浏览器所带的缓存一样,主要是对网络信息进行缓存。当用户第一次向一个网页发出访问请求,网页从远端服务器传送给用户时,该网页内容被存在缓存服务器中。第二个用户在对同一个网页发出访问请求时,就可以直接从缓存服务器中得到网页,而不必连接到远端服务器。这样对那些访问频繁的网页,访问速度会大大提高。而这一切对用户都是透明的。

Cache Hit:当用户发起请求时,Cache服务器首先会在快取缓冲区内寻找该数据。如果欲查询的数据恰好已存在于缓冲区内(这样的情况我们称之为cache hit ),就直接从内存读出数据。
Cache Miss:当用户发起请求时,Cache服务器首先会在快取缓冲区内寻找该数据。如果欲查询的数据恰好已存在于缓冲区内(这样的情况我们称之为cache Miss ),那么Cache服务器需要到远端服
务器进行请求,然后重新进行缓存。
Uncachable:不允许Cache服务器对该数据进行缓存。
Cache Validation:保证Cache服务器不提供给用户过期信息的一种机制。

二. Squid安装时硬件需求

       相对于其它系统而言,Web Cache系统更依赖于硬件资源。虽然Web Cache系统的高性能关键来自整个软硬件系统的高性能,但下列因素对Web Cache系统性能的影响非常明显,按照重要性按由高到低排列为:
   磁盘随机访问时间
   系统内存的容量
   磁盘的持续吞吐量
 
#CPU能力
上述任何一个要素的不足,都将明显影响缓存系统性能。为了保证系统能够稳定高效的运行,系统冗余是必不可少的。以便于在出现硬件故障情况下,有预先准备的替换部件。如果你的Web Cache服务器非常重要,应该有一个(正在运行的)安装了操作系统和squid的冗余机器,以便于可以进行瞬时切换。下面我们来详细描述如何确定Web Cache服务器所需要的硬件资源:
#硬盘
Web Cache服务器需要使用一个随机访问速度快且高吞吐量的硬盘。但是如果我们设定很少的Web缓存数据,那么它即使是世上最快的硬盘也没什么用处。为了提高缓存的效率,硬盘需要保存大量的下载数据。在硬盘的选择上,硬盘的查找时间(Seek time)是一个很关键的性能参数。我们可以在硬盘的说明文档中查看该参数定义。这个数值越小越好:它是磁头从一个随机磁道移到另一个磁道的平均时间(以毫秒为单位)。 只有一个硬盘的缓存处理一次请求至少访问一次硬盘(忽略硬盘的RAM缓冲和结点更新次数). 如果只有一个硬盘, 我们可以通过下面的公式来计算一秒内硬盘查找次数(由此而得一秒内的请求数):
       每秒请求数 = 1000/查找时间
       当我们在Web Cache服务器中使用多个硬盘时,那么操作系统会在不同的硬盘间交叉写盘,因此如果你在Web Cache服务器中使用多个硬盘,那么每个硬盘的每秒查找次数会低一些。 几乎所有的操作系统,当增加硬盘后,随机查找时间呈半线性方式增加. 如果你在等式中增加磁盘的数量,每秒请求数会更接近! 同时为了简化,我们假定你用的硬盘都有相同的查找时间,从而公式变为:
每秒请求数的理论值 = 1000/(查找时间)/(硬盘数)
如果我们有3个硬盘 - 它们的查找时间都是12ms.,因而理论上的请求处理速度,
每秒请求次数 = 1000/(12/3) = 1000/4 = 250 次/秒
另外由于目前IDE技术的发展使得IDE硬盘的查找时间与SCSI硬盘的非常接近,所以(带有DMA兼容的IDE控制器)数据传输速度不会降低整个机器的运行速度。在确定了使用的硬盘类型之后,我们需要确定为Web Cache服务器分配多大的硬盘空间。当决定分配给缓存的硬盘空间数量时,应该确定每天经过缓存的数据的大概容量。如果你不能确定这个数值,那么你可以使用平均传输速度为基础来计算该数值。一个 10Mb/s 的线缆每秒大约传输1,250,000字节. 如果所有客户端都来访问这个缓存, 硬盘将以每秒1250k的速度被使用,如果全速运转一天(24小时),你大约传输了36 G字节. 那么我们则要分配给Web Cache服务器一个36G的空间。
使用RAID系统来建造缓存系统. 这可以显著地增加数据的可用性,但一个RAID-5系统严重地降低硬盘的吞吐量。如果你非常关心系统的正常运行时间,选择一个RAID系统确实不错. 但是,由于缓存中存储的数据并不重要,你可手工清除这些数据,重新格式化或替换磁盘。

#RAM 需求

       Squid在内存中维护着一个对象对列。由于Squid需要检查一个对象是否已经缓存,所以这个表的快速查找非常重要。当由于系统内存不足,这个表的一部分被放在交换分区中时,squid的性能就会显著下降。这时因为squid是一个很大的进程,所以对它做进程切换将严重影响其性能。并且由于操作系统在切换进程时,squid会被放入'睡眠任务'队列中, 它将暂时不能处理已经建立的请求连接。
       每一个硬盘上的Cache对象,其索引项大约占用75个字节的内存。据统计Web Service中每个对象的平均大小约为3K, 因此如果你有一个1G的硬盘空间,你可以存放大约350000个Web Service对象。而一个Web Service对象需要占用75字节RAM, 80 000对象大约需要30M内存。如果你有8G硬盘空间,则需要250M内存来建立对象索引。但是这些内存需求并不包括操作系统、Squid进程以及系统其他使用的内存,明白这一点很重要。

#硬盘持续吞吐量
Squid倾向于取小的数据块,所以吞吐量的重要性不比随机访问时间。通常,能快速查找的硬盘一般具备很大的吞吐量,而硬盘越多(在现在,即使是IDE硬盘) 能传输越多的数据,从而超过客户端所能从缓存下载数据的速度。

#CPU 能力
一般说来,Squid不是一个多CPU敏感程序,在启动时,Squid会使用大量的CPU资源来查找缓存里有哪些内容,一个低速的CPU会降低Squid刚启动后几分钟内的缓存访问速度。一个多处理器的机器通常不会明显地增加访问速度: 虽然一部分Squid代码可以跑多线程,但是这个代码片段也不是CPU密集的。
由上面的分析可以了解更多的内存或更多的硬盘会更大幅度的提升Squid的性能。

三. Squid安装前的系统优化。

Squid的系统优化包括Squid运行操作系统的选择和操作系统性能参数的调整两个部分:
选择操作系统
Squid支持大部分的类Unix操作系统,这些操作系统列表可以在Squid的官方网站上看到。不过据Squid的作者推荐,一般采用FreeBSD和Linux系统。

###系统性能参数调整

1. FD调整
Linux:
a) 打开/usr/include/bits/typesize.h ,修改#define __FD_SETSIZE为你想要的数值。
b) echo 8192 > /proc/sys/fs/file-max
c) Ulimit –Hn 8192
d) 然后再开始编译Squid。(这些参数都是暂时生效的,机器重新启动后,这些参数会丢失,你需要把这些写在squid的启动脚本中。
FreeBSD:
a) 修改Kernel的配置文件,将Maxfile改为”options    MAXFILES=8192”
b) 重新编译内核,使用新的内核启动。

2. 本地端口调整
Linux:
a)   echo "minport maxport" > /proc/sys/net/ipv4/ip_local_port_range
b) 这个值同样是暂时生效的,机器重新启动后,这些参数会丢失,所以也需要将这些参数写入Squid的启动脚本里面。
FreeBSD:
a) sysctl -w net.inet.ip.portrange.last=maxport

四. Squid的补丁管理。

Squid目前的版本是3.3,但是随着Squid的使用,大家不断的对Squid进行修改,不断的发行补丁,而这些补丁往往都没有集成到用户下载的软件包中,所以我们需要在编译之前,首先对
现有的Squid打补丁,具体步骤为:
1. 下载所需补丁。
2. 进入Squid的源代码目录。
3. 运行patch –p1 < Squid补丁存放路径。
在完成系统调整、给Squid进行补丁安装后,我们就可以开始编译安装了。

五. Squid Configure参数含义。

在正式开始编译、运行Squid之前,我们需要对Squid进行一系列的配置。下面我们分别解释其参数的具体含义:
   --cache-file=FILE       把运行configure时的输出信息放置到指定文件中。
   --help                输出帮助信息
   --no-create              只是检测系统是否可以安装Squid,而不生成任何文件。
   --quiet, --silent       不显示运行configure时输出信息
   --site-file=FILE       use FILE as the site file
   --version             显示生成configure脚本的autoconf版本号
Directory and file names:
   --prefix=PREFIX       将Squid的安装文件放置到此目录下
   --bindir=DIR          将Squid安装目录的bin目录放置在此目录下
   --sbindir=DIR           将Squid安装目录的sbin目录放置在此目录下
   --libexecdir=DIR       将Squid安装目录的libexec目录放置在此目录下
   --datadir=DIR           将Squid安装目录的share目录放置在此目录下
   --sysconfdir=DIR        将Squid安装目录的etc目录放置在此目录下
   --localstatedir=DIR     将Squid安装目录的var目录放置在此目录下
   --libdir=DIR          将Squid安装目录的lib目录放置在此目录下
   --includedir=DIR        C header files in DIR [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
   --infodir=DIR           info documentation in DIR [PREFIX/info]
   --mandir=DIR          将Squid安装目录的man目录放置在此目录下
--enable and --with options recognized:
   --enable-dlmalloc[=LIB] 使用新的malloc函数
   --enable-gnuregex    支持GNUregex
   --enable-xmalloc-statistics 支持在统计页面中显示malloc统计
   --enable-carp           支持CARP协议
   --with-aufs-threads=N_THREADS 设定aufs所使用的线程数
   --with-pthreads       支持POSIX Threads
   --with-aio              使用POSIX AIO
   --with-dl             使用动态链接
   --enable-storeio="list of modules" 选择支持的存储种类
   --enable-delay-pools 支持带宽管理功能
   --disable-wccp       不支持WCCP协议
   --enable-kill-parent-hack   在关闭child进程时同时关闭父进程。
   --enable-snmp           支持SNMP监控
   --enable-cachemgr-hostname[=hostname] 设定cachemgr.cgi缺省名称
   --enable-arp-acl        支持ARP ACL功能
   --enable-htcp           支持HTCP协议
   --enable-ssl          支持SSL协议。
   --with-openssl[=prefix] 设定Openssl的开发库路径。
   --enable-cache-digests   使用缓存摘要
   --enable-default-err-language=lang   设定缺省的错误语言
   --enable-err-languages="lang1 lang2.." 选择支持的语言种类
   --with-coss-membuf-size 设定COSS membuf 大小 (缺省为1048576 bytes)
   --enable-poll           使用poll()代替select()。
   --disable-poll       不使用poll
   --disable-http-violations 不支持HTTP标准不兼容的命令
   --enable-linux-netfilter   支持透明代理
   --disable-internal-dns   禁止Squid进行DNS解析,由外部程序”dnsserver”来完成。
   --enable-truncate       使用truncate()代替unlink()。
   --disable-hostname-checks 支持在主机名中使用特殊字符。
   --enable-underscores 支持带“_”的域名。
   --enable-auth="list of auth scheme modules"   配置支持的认证模块种类

六. Squid命令参数含义。

下面介绍squid的运行命令:
Usage: squid [-dhsvzCDFNRVYX] [-f config-file] [-[au] port] [-k signal]
   -a port 指定Squid使用的Http端口号.
   -d level   设定Squid调试信息等级。
   -f file 指定Squid所使用的配置文件
   -h    输出帮助信息
   -k reconfigure 重新载入新的配置文件而不重新启动Squid进程。
Rotate   进行日志回滚
Shutdown 等待所有请求完成后再停止Squid。
Interrupt   拒绝Squid接受新的请求,立即结束Squid。
Check   检查Squid当前的运行状态
Kill 直接停止Squid。
Debug 调试模式
Parse 检查配置文件是否正确
   -s        将信息输出到syslog中.
   -u port 设定ICP端口,0表示禁止使用ICP.
   -v        打印Squid版本号
   -z        创建Squid Swap目录。
   -C        不捕捉错误信号.
   -D        禁止进行初始化DNS解析
   -F        在Store没有建立之前不接受任何请求。
   -N        不作为Damon形式运行。
   -V        设定主机的Http加速模式为Virtual,直接设定http_accel_host值。
   -X        输出完整的调试信息
   -Y        在快速reload时只输出UDP_HIT或 UDP_MISS_NOFETCH信息。

七. Squid Conf配置参数含义。

Squid配置文件中的参数主要分为以下几类:
1. 通用参数。
2. 访问控制参数。
3. Cache相关参数。
4. 服务器加速模式相关参数。
5. ICP参数。
6. 日志文件相关参数。
7. Squid监控相关参数
8.关于smp支持

一. 通用参数
Http_port:Squid缺省监听端口,可以设定多个监听端口。
Icp_port:发送和接收ICP的端口号。
Htcp_port:发送和接收HTCP端口号。
Mcast_groups:接收ICP多播地址范围。
Visible_hostname:设定Squid的本地主机名。(必须设定)
cache_effective_user:Squid进程所使用的用户。
cache_effective_group:Squid进程所使用的组。

二. 访问控制参数。

访问控制条目语法为:
acl name type value1 value2 ……
其中acl为关键字,name是用户定义的名称,type是表明acl的类型,value1 and value2是具体值。
在大多数情况下,下面两种形式是等效的:
Acl http_ports port 80 8000 8080与
Acl http_ports port 80
Acl http_ports port 8000
Acl http_ports port 8080是等效的。

Acl主要的类型包括:
1. IP地址:src, dst, myip。
2. 域名:srcdomain, dstdomain,和the cache_host_domain
3. 用户名:ident, proxy_auth
4. 正则表达式:srcdom_regex, dstdom_regex, url_regex, urlpath_regex, browser, referer_regex, ident_regex, proxy_auth_regex, req_mime_type, rep_mime_type。
5. 端口号:port, myport。
6. 其他:method, proto, time, snmp_community, maxconn, arp,
在Squid-2.5以后,引入了一种新的模式――ACL支持使用外部应用程序,这使得用户可以更加自主的定义ACL列表,并进行相关的操作。
另外,如果用户所定义的ACL元素过多,Squid还支持将这些数值写入一个文件,并且在acl中直接指定该文件:例如:如下的acl列表就可以修改为
Acl test port 80 90 8080 8000 8100 21 23 445
Acl test port “/usr/local/squid/etc/portlist”
其中portlist文件格式如下:
80
90
8080
……
访问控制规则定义语法为:
(Rule) deny|allow (ACL 名称)

三. Cache相关参数。

cache_mem:设定Squid所使用的内存数量。
maximum_object_size:设定Squid可以缓存的Object最大大小。
minimum_object_size:设定Squid可以缓存的Object最小大小。
maximum_object_size_in_memory:设定Squid内存中可以缓存的Object最大大小。
cache_replacement_policy:Cache中的Object更新策略,包括(lru、heap GDSF、heap LFUDA和heap LFU)
memory_replacement_policy:代理服务器内存中Object更新策略,类型同上。
cache_dir:设定Cache的存储路径以及存储类型。
Ufs:传统的UNIX文件系统存取方式。
Aufs:使用多线程技术进行文件存取。
Diskd:使用额外的独立进程进行文件存取。
Coss:最新开发的专为Squid优化的文件系统,还处于试验阶段。

request_header_max_size:用户请求的HTTP头大小。
refresh_pattern:用户可以单独指定某种文件的更新策略。

四. 服务器加速模式相关参数。

httpd_accel_host:指定目标主机IP地址。
httpd_accel_port:指定目标主机Web服务IP地址。
httpd_accel_uses_host_header:是否使用用户请求中的header。
httpd_accel_single_host:是否将所有用户请求都转发到目标主机。
httpd_accel_with_proxy:是否在提供加速模式时同时提供代理功能。

五. Cache服务器互联相关参数

这些选项是在使用Squid建立大型的缓存服务器集群时使用的。
Cache_peer:设定该缓存服务器可以与之互通的其他Cache服务器。
Cache_peer_domain:设定某个特定的域名(如:.net)到指定的Cache服务器去读取缓存信息。
Neighbor_type_domain:设定该缓存服务器的邻近服务器类型。
Icp_query_timeout:ICP请求过期时间。
Maxium_icp_query_timeout:最大ICQ请求时间。
Dead_peer_timeout:判断某个端点是否失效时间。

六. 日志文件相关参数。

cache_access_log:用户访问记录Log。
cache_log:Squid本身进程的日志记录。
cache_store_log:记录Cache缓存信息。
cache_swap_log:记录cache交换信息。
emulate_httpd_log:改变Squid日志格式。
log_mime_hdrs:记录所有Accept头信息。
useragent_log:记录用户客户端信息。
referer_log:记录用户请求日志
log_fqdn:记录用户完整的主机名。
client_netmask:是否屏蔽用户的真实IP地址
strip_query_terms:是否屏蔽用户的详细请求信息。
logfile_rotate:设定日志回滚时间。

七. Squid监控相关参数。

snmp_port:设定SNMP监听端口。
snmp_access:为了安全考虑,用户可以设定SNMP的访问范围。
high_response_time_warning:设定响应事件报警。(如果响应时间过长,可以通知用户)
high_page_fault_warning:设定页面错误事件报警。
high_memory_warning:设定Squid内存使用报警。

八. Squid的下一步发展
Squid 3.0的主要变化包括:
1.完全使用C++。
2.支持64位系统。
3.更加完善的带宽管理功能。
4.支持动态文件句柄数。
5.3.2开始支持SMP;
6.3.3支持LOG直接存入sql;
7. 认证开始直接使用sql;

九. 常用Squid配置举例

下面介绍一个我们配置hexun首页加速的实例。
预先设定了cache的存储路径为/cache,log的存储路径为/log/,squid程序的存放路径为/squid/。
1.首先下载最新版本的Squid和相应的补丁。
2.解压Squid,打上所有补丁。
3.运行
./configure --prefix=/squid/ --enable-gnuregex --enable-async-io=30 --with-aufs-threads=16 --enable-storeio="ufs,aufs,diskd,coss" --enable-heap-replacement --enable-snmp --disable-internal-dns --enable-underscores --enable-useragent-log --enable-referer-log

进行配置。
4.make; make install;
5.修改/log和/cache的所有者为nobody.nobody
Chown nobody.nobody /log/
Chown nobody.nobody /cache/

6.安装完毕后,按照如下方式配置squid.conf,

http_port 80
cache_mem 1228 MB           (最大内存为2GB)
maximum_object_size 5096 KB
maximum_object_size_in_memory 5096 KB
cache_replacement_policy heap LFUDA          (采取这两种方式性能更高效)
memory_replacement_policy heap LRU
cache_dir aufs /cache 27970 16 256
cache_access_log /log/access.log
cache_log /log/cache.log
cache_store_log none       (不需要store.log,如有必要,可以设定其存放路径)
emulate_httpd_log on       (由于日志分析需要,将其日志类型设定为和Apache一致)
cache_dns_program /squid/libexec/dnsserver        (使用外部DNS程序,这样可以加快Squid请求处理速度)
dns_children 30                                (设定外部DNS程序数量(0-32))
request_header_max_size 70 KB       (用户请求的HTTP头大小可以自行调整)
acl PURGE method PURGE
http_access allow PURGE localhost
http_access deny PURGE all
cache_effective_user nobody
cache_effective_group nobody
visible_hostname squid-3
httpd_accel_port 80    (设定需要加速的服务器服务端口)
httpd_accel_host 192.168.158.81    (需要加速服务器IP地址)
httpd_accel_single_host on    (用户的所有请求都转发到真正的服务器上)
httpd_accel_with_proxy off       (不允许用户将此加速服务器作为代理服务器使用,访问其他网站)
httpd_accel_uses_host_header on    (由于该加速服务器上有多个域名,所以需要打开该选项以便对不同的用户请求进行区分)
logfile_rotate 5    (保存5天内的日志)
forwarded_for on     (将用户的真实IP地址通过X-Forwarded-For中传递下去,主要是为了保证正确显示lucene.com.cn网站中的用户评论的真实IP地址)
snmp_port 3401     (设定SNMP端口为3401)
acl snmp src 202.99.16.0/24     (只允许这个网段的用户进行SNMP请求)
snmp_access allow snmp
strip_query_terms off    (由于咱们的日志统计系统需要获得用户的具体请求内容,而Squid缺省配置中,日志记录是不记录用户的具体请求,所以需要关闭该项,这样就可以显示用户的整个请求内容)

7.运行/squid/sbin/squid –z来创建/cache/目录。
8.运行/squid/sbin/squid –F –D –s来启动Squid进程。
  评论这张
 
阅读(525)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017