高负载squid配置经验最新版.docx
《高负载squid配置经验最新版.docx》由会员分享,可在线阅读,更多相关《高负载squid配置经验最新版.docx(7页珍藏版)》请在冰点文库上搜索。
高负载squid配置经验最新版
编译squid
./configure
--perfix=PREFIX
这里设置安装目录。
--localstatedir=DIR
该选项允许你改变var目录的安装位置。
默认是$prefix/var。
--sysconfdir=DIR
该选项允许你改变etc目录的位置。
默认的是$prefix/etc。
--enable-async-io[=N_THREADS]
(用以提升存储性能。
aufs模块使用大量的线程来执行磁盘I/O操作。
该代码仅仅工作在linux和solaris系统中。
=N_THREADS参数改变squid使用的线程数量。
请注意--enable-async-io是打开其他三个./configure选项的快捷方式,它等同于:
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
--with-pthreads
该选项导致编译过程链接到你系统中的P线程库。
aufs存储模块是squid中唯一需要使用线程的部分。
通常来说,如果你使用--enable-saync-io选项,那么不必再单独指定该选项,因为它被自动激活)
--enable-storeio=LIST
Squid支持大量的不同存储模块。
通过使用该选项,你告诉squid编译时使用哪个模块。
LIST=afus,diskd,ufsnull
--with-aufs-threads=N_THREADS
指定aufs存储机制使用的线程数量。
squid默认根据缓存目录的数量,自动计算需要使用多少线程。
--enable-removal-policies=LIST
排除策略是squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。
支持3个排除策略:
最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。
LRU是默认的,它以双链表数据结构执行。
GDS和LFU使用堆栈的数据结构。
为了使用GDS或LFU策略,你指定:
%./configure--enable-removal-policies=heap
然后你在squid的配置文件里选择使用GDS或LFU。
假如你想重新使用LRU,那么指定:
%./configure--enable-removal-policies=heap,lru
--enable-icmp
squid能利用ICMP消息来确定回环时间尺寸,你能使用该选项来激活这些功能。
--enable-snmp
简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。
--enable-gnuregex:
由于Squid大量使用字符串处理做各种判断,加入此项能更好的处理。
--enable-kill-parent-hack:
关掉suqid的时候,要不要连同父进程一起关掉,这个当然要啦
--enable-cahce-digests:
加快请求时,检索缓存内容的速度。
--enable-err-language="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese":
指定出错是显示的错误页面为简体中文
--enable-linux-netfilter:
可以支持透明代理
--with-maxfd=99999
文件描述符
--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。
使用--enable-dlmalloc选项将squid源代码包中的dlmalloc包编译和链接进来。
假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。
。
--enable-gnuregex
可以激活使用GNU正则表达式。
如果因为某些理由,你想强制使用GNU正则表达式,可以将这个选项加到./configure命令后。
--enable-carpCache
数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluster。
--enable-heap-replacement
该选项不再使用,但被保留用于向后兼容性。
你该使用--enable-removal-policies来代替。
--enable-delay-pools
延时池是squid用于传输形状或带宽限制的技术。
该池由大量的客户端IP地址组成。
当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工延迟。
--enable-useragent-log
该选项激活来自客户请求的HTTP用户代理头的日志。
--enable-referer-log
该选项激活来自客户请求的HTTPreferer日志。
--disable-wccp
Webcache协调协议(WCCP)是CISCO的专有协议,用于阻止或分发HTTP请求到一个或多个caches。
WCCP默认被激活,假如你愿意,可以使用该选项来禁止该功能。
--enable-cachemgr-hostname[=hostname]
cachemgr是一个CGI程序,你能使用它来管理查询squid。
默认cachemgr的hostname值是空的,但你能使用该选项来指定一个默认值。
例如%./configure--enable-cachemgr-hostname=
--enable-arp-acl
squid在一些操作系统中支持ARP,或者以太地址访问控制列表。
该代码使用非标准的函数接口,来执行ARP访问控制列表,所以它默认被禁止。
假如你在linux或solaris上使用squid,你可能用的上这个功能。
--enable-htcp
HTCP是超文本缓存协议--类似于ICP的内部缓存协议。
--enable-ssl
使用该选项赋予squid终止SSL/TLS连接的能力。
注意这仅仅工作在web加速器中用以加速请求。
--with-openssl[=DIR]
假如必要,你使用该选项来告诉squid到哪里找到OpenSSL库或头文件。
假如它们不在默认位置,在该选项后指定它们的父路径。
例如:
%./configure--enable-ssl--with-ssl=/opt/foo/openssl
在这个例子中,你的编译器将在/opt/foo/openssl/include目录中找头文件,在/opt/foo/openssl/lib中找库文件。
--enable-err-languages="lang1lang2..."squid
支持定制错误消息,错误消息可以用多种语言报告。
该选项指定复制到安装目录($prefix/share/errors)的语言。
假如你不使用该选项,所有可用语言被安装。
--with-coss-membuf-size=N
循环目录存储系统(coss)是squid的试验性存储机制。
该选项设置coss缓存目录的内存缓冲大小。
注意为了使用coss,你必须在--enable-storeio选项里指定存储类型。
该参数以字节形式赋值,默认是1048576字节或1M。
你能指定2M缓冲如下:
%./configure--with-coss-membuf-size=2097152
--disable-http-violationssquid
默认可以被配置成违背HTTP协议规范。
你能使用该选项来删除违背HTTP协议的代码。
--enable-ipf-transparent
描述如何配置squid来拦截缓存。
一些操作系统使用IPFilter包来协助拦截缓存。
在这些环境下你应该使用该./configure选项。
如果你使用了该选项,但是编译器提示src/client_side.c文件出错,那是因为IPFilter包没有或没有正确的安装在你的系统中。
--enable-pf-transparent
你可能需要指定该选项,使用PF包过滤器在操作系统中拦截HTTP。
PF是OpenBSD的标准包过滤器,也可能被发布到其他系统中。
假如你使用该选项,但是编译器提示src/client_side.c文件出错,那是因为PF没有实际安装到你的系统中。
--enable-linux-netfilter
Netfilter是linux2.4系列内核的包过滤器名字。
假如你想在linux2.4或以后的版本中使用HTTP拦截功能,那么激活该选项。
--disable-ident-lookups
ident是一个简单的协议,允许服务器利用客户端的特殊TCP连接来发现用户名。
假如你使用该选项,编译器将把执行这些查询的代码排除出去。
即使你在编译时保留了这些代码,除非你在squid.conf文件里指定,squid不会执行ident查询。
--disable-internal-dns
squid源代码包含两个不同的DNS解决方案,叫做“内部的”和“外部的”。
内部查询是默认的,但某些人可能要使用外部技术。
该选项禁止内部功能,转向使用旧的方式。
内部查询使用squid自己的DNS协议执行工具。
也就是说,squid产生未完成的DNS查询并且将它们发送到一个解析器。
假如超时,它重新发送请求,你能指定任意数量的解析器。
该工具的有利处之一是,squid获得准确无误的DNS响应的TTLs。
外部查询利用C库的gethostbyname()和gethostbyaddr()函数。
squid使用一个外部进程池来制造并行查询。
使用外部DNS解析的主要弊端是你需要更多的辅助进程,增加squid的负载。
另一个麻烦是C库函数不在响应里传输TTLs,这样squid使用postive_dns_ttl指令提供的一个常量值。
--enable-truncate
truncate()系统调用是unlink()的替代品。
unlink()完全删除cache文件,truncate()将文件大小设为零。
这样做释放了分配给该文件的磁盘空间,但留下适当的目录接口。
该选项存在的理由是,某些人相信(或希望)truncate()比unlink()性能表现更好。
然而,压力测试显示两者有很少的或根本没有区别。
--disable-hostname-checks
默认的,squid要求URL主机名在一定程度上遵守古老的RFC1034规范。
--enable-underscores
该选项控制squid针对主机名里下划线的行为。
通用的标准是主机名里不包含下划线字符。
squid默认会对URL主机名里带下划线的请求产生一条错误消息。
你能使用该选项,让squid信任它们.
--enable-auth[=LIST]
该选项控制在squid的二进制文件里支持哪种验证机制。
你能选择下列机制的任意组合:
basic,digest,ntlm。
假如你忽略该选项,squid仅仅支持basic验证。
假如你使用不带参数的--enable-auth选项,编译进程将增加对所有验证机制的支持。
你可以使用以逗号分隔的验证机制列表:
%./configure--enable-auth=digest,ntlm
将硬盘分区格式化为reiserfs具体方法为:
1、fdisk-l//查看硬盘分区默认是fdisk/dev/sda-l,也可能能过指定设备查看,如fdisk/dev/sdb-l(如果存在该硬盘)
2、fdisk/dev/sda,进入命令行进行分区管理。
Command(mforhelp):
m//查看所有的指令
Commandaction
atoggleabootableflag
beditbsddisklabel
ctogglethedoscompatibilityflag
ddeleteapartition
llistknownpartitiontypes
mprintthismenu
naddanewpartition
ocreateanewemptyDOSpartitiontable
pprintthepartitiontable
qquitwithoutsavingchanges
screateanewemptySundisklabel
tchangeapartition'ssystemid
uchangedisplay/entryunits
vverifythepartitiontable
wwritetabletodiskandexit
xextrafunctionality(expertsonly)
要创建新的分区键入n,提示你是划分主分区,还是逻辑分区,指定分区大小是以(10240MB),注意单位,如果不使用单位,会认为是硬盘的扇区块,不能超过总的大小划分完成后别忘输入w,将分区写入分区表。
例如:
fdisk-l/dev/sda查看第一块硬盘分区情况
fdisk/dev/sdb给第二块硬盘分区
commandacton(mforhelp):
m#显示命令列表
a-设置可引导标志;
b-设置卷标;
d-删除一个分区;
n-新建分区
p-显示分区信息;
v-校验分区表;
q-不存盘退出;
w-存盘退出;
t-改变分区类型
commandacton(mforhelp):
n新建分区
commandaction
eextended#扩展分区
pprimarypartition(1-4)#主分区
p#创建主分区
partitionnumber(1-4):
1#创建第一个主分区
firstcylinder(1-522,default1):
1#起始柱面(第一个分区始终为1)
lastcylinderor+sizeor+sizeMor+siezK(1-522,default522):
10#截止柱面(若522则整个硬盘分给了一个区)此分区大小是系统按照柱面大小自动计算出来的
3、格式化
mkfs.reiserfs/dev/sdb1把第二块硬盘的第一个主分区格式化为reiserfs
squid在高负载的情况如果/var/logs/sys.log文件中出现了outofsocketmemory或者possibleSYNfloodingonport80.Sendingcookies得警告信息,如果系统资源还没问题的话,应该多数不是受到synflood,而是并发连接过多。
解决方法如下:
编辑/etc/sysctl.conf文件加入以下信息
net.ipv4.ip_local_port_range=102465536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=40968738016777216
net.ipv4.tcp_wmem=40966553616777216
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
dev_max_backlog=3000000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn=262144
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_orphans=262144
net.ipv4.tcp_max_syn_backlog=81920000
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_mem=78643210485761572864
filter.ip_conntrack_max=1048576
保存退出后输入sysctl–p使配置生效。