linux文件描述符导致squid拒绝服务

linux 文件描述符导致squid 拒绝服务
 
前几天因工作需要在 RHEL4.8 上面架设了一个 squid 双网代理,刚开始测试一切正常,然后就在前台负载均衡服务器把这个代理地址加上,运行一段时间后,客服反映有一些玩家无法进入游戏房间,通过 cacti 监控发现大量的失败连接,正常的连接只有 900
 
 
 
初步判断为 linux 内核限制了连接数,通过 google 一下发现 linux 默认文件描述符只有 1024 个,对于 squid 等一些服务来说,在大负载的情况下这点文件描述符是远远不够的,因为 squid 的工作方式,文件描述符的限制可能会极大的影响性能。当 squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和 socket 被关闭, squid 不能接收新请求,这样就要扩大 linux 的文件描述符了
一,通过 ulimit 命令修改
 
// 显示当前文件描述符
ulimit -n
 
// 修改当前用户环境下的文件描述符为 65536
ulimit -HSn 65536
 
echo "ulimit -HSn 65536" >> /etcrc.local
 
使用 ulimit 命令的缺点:
 
1 ,只能修改当前登录用户环境下的文件描述符,如果此用户来另外打开一个连接,此链接环境的文件描述符依然是没改前的
2 ,如果系统重启,以前修改都不再生效
 
二,通过修改 limits.conf 文件
 
编辑 /etc/security/limits.conf 文件,在最后加入如下两行
 
*                               soft    nofile  65536
*                               hard    nofile  65536
 
保存退出,都不需要重启服务器,直接重新登陆用 ulimit -n 就能看到效果
 
这样无论使用哪个用户,无论是否重启都不会失效了。
 
扩大 linux 的文件描述符后,再重新编译安装 squid ,安装完成后,重新启用此代理,发现连接数马上就上来了
 
 
 
 
 
Linux squid 编译安装
groupadd squid
useradd -g squid -s /sbin/nologin squid
mkdir -p /cache/{cache,logs}
ulimit -HSn 65536 // 打开文件数为 65536
 
#squid 2.6
tar - xzvf squid-2.6.STABLE9.tar.gz
 
cd squid-2.6.STABLE9
 
./configure --prefix=/usr/local/squid --enable-snmp --enable-storeio=diskd,ufs --enable-poll
--disable-hostname-checks --enable-underscores --enable-x-accelerator-vary
--enable-kill-parent-hack --enable-err-language="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese" --disable-ident-lookups
--with-maxfd=65535;
make;
make install;
--prefix=/usr/local/squid : 指定软件的安装路径 .
--enable-snmp : 此选项可以让 MRTG 使用 SNMP 协议对服务器的流量状态进行监测,因此必须选择此项,使 Squid 支持 SNMP 接口。
--enable-storeio=diskd,ufs : 磁盘 ache 的模式 .
--enable-poll : 应启用 Poll() 函数而不是 select() 函数,通常而言 poll( 轮询 ) select 要好,
configure( 脚本程序 ) 已知 Poll 在某些平台下失效 , 若你认为你比 configure 编译配置脚本程序要聪明的话,
可以用这个选项启用 Poll 。总之就是用这个可以提升性能就是啦。
--disable-hostname-checks : 关闭 hostname 检查 ; 以提高速度 .
--enable-underscore : 允许解析的 URL 中出现下划先,因为默认 squid 会认为带下划线的 URL 地址是非法的,并拒绝访问该地址。
--enable-x-accelerator-vary :Enable support for the X-Accelerator-Vary
HTTP header. Can be used to indicate
variance within an accelerator setup.
Typically used together with other code
that adds custom HTTP headers to the requests.
--enable-kill-parent-hack : 关掉 suqid 的时候,要不要连同父进程一起关掉 .
--enable-err-language="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese" : 指定出错是显示的错误页面为简体中文 .
--disable-ident-lookups : 防止系统使用 RFC931 规定的身份识别方法。
 
--enable-cahce-digests : 加快请求时,检索缓存内容的速度。 ( squid 集群时才有用 )
--enable-linux-netfilter : 可以支持透明代理 for linux2.4.
--enable-arp-acl : 可以在规则设置中直接通过客户端的 MAC 地址进行管理,防止客户使用 IP 欺骗。 ( 和上一行配合用 ; 只有反向代理时没用 ).
--with-maxfd=65535 // 打开文件数为 65536
 
#squid 3.0
tar -zxvf squid-3.0.STABLE7.tar.gz
cd squid-3.0.STABLE7
./configure --prefix=/usr/local/squid --enable-gnuregex --enable-arp-acl --enable-auth="basic" --enable-basic-auth-helpers="NCSA" --enable-async-io=80 --enable-storeio=ufs --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cache-digests --enable-ssl --enable-delay-pools --enable-poll --enable-linux-netfilter --enable-underscore --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese"
 
解释说明:
--prefix=/usr/local/squid // 指定安装路径
--enable-arp-acl // 这样可以在规则设置中直接通过客户端的 MAC 地址进行管理,防止客户使用 IP 欺骗
--enable-async-io=80 // 这个主要是设置 async 模式来运行 squid ,我的理解是设置用线程来运行 squid ,如果服务器配置很不错,有 1G 以上内存, cpu 使用 SMP 的方式的话可以考虑设成 160 或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另 cache 文件支持 aufs
--enable-auth-modules // 此编译选项启用认证模块,可以对访问代理用户进行授权。
--enable-cache-digests // 使能缓存摘要,本来此项目的是为了在 Squid 集群服务之间迅速发现缓存对象,这里在本地使用,可以加快请求时,检索缓存内容的速度。
--enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese" // 指定出错是显示的错误页面为简体中文
--enable-delay-pools // 此选项使能一个延时池,这样能对某些特定的请求限制额定带宽。
--enable-gnuregex // 由于 Squid 大量使用字符串处理做各种判断,加此项能更好处理。
--enable-icmp // 加入 icmp 支持
--disable-ident-lookups // 防止系统使用 RFC931 规定的身份识别方法。
--enable-kill-parent-hack // 关掉 suqid 的时候,要不要连同父进程一起关掉,这个当然要啦
--enable-linux-netfilter // 允许使用 Linux 的透明代理功能。
--enable-poll // 应启用 Poll() 函数而不是 select() 函数,通常而言 poll( 轮询 ) select 要好,但 configure( 脚本程序 ) 已知 Poll 在某些平台下失效 , 若你认为你比 configure 编译配置脚本程序要聪明的话,可以用这个选项启用 Poll 。总之就是用这个可以提升性能就是啦。
--enable-snmp // 此选项可以让 MRTG 使用 SNMP 协议对服务器的流量状态进行监测,因此必须选择此项,使 Squid 支持 SNMP 接口。
--enable-storeio=ufs,null // 使用的文件系统通常是默认的 ufs ,不过如果想要做一个不缓存任何文件的代理服务器,就需要加上 null 文件系统。
--enable-underscore // 允许解析的 URL 中出现下划先,因为默认 squid 会认为带下划线的 URL 地址是非法的,并拒绝访问该地址。
 
 
Make;make install
 
chown -R squid.squid /cache/cache
chown -R squid.squid /cache/logs
 
vi /usr/local/squid/etc/squid.conf
visible_hostname squid17
 
http_port 8008
http_port 80
 
cache_mgr [email protected]
 
cache_mem 1024 MB
 
maximum_object_size_in_memory 10 MB
 
memory_replacement_policy lru
 
cache_replacement_policy lru
 
cache_dir ufs /cache/cache 8000 32 128
 
max_open_disk_fds 0
 
maximum_object_size 300 MB
 
cache_swap_low 90
cache_swap_high 95
 
http_access allow all
 
 
#logs
 
access_log none
 
cache_log /cache/logs/cache.log
 
cache_store_log none
 
error_directory  /usr/local/squid/share/errors/Simplify_Chinese
 
 
 
/usr/local/squid/sbin/squid -z      // 测试 Squid 运行状况
/usr/local/squid/sbin/squid start   // 启动 squid
 
Echo “/usr/local/squid/sbin/squid start”  >> /etc/rc.local
 
/usr/local/squid/sbin/squid -k reconfigure �Cf /usr/local/squid/etc/squid.conf   // 重新加载配置文件

你可能感兴趣的:(linux,squid,文件描述符,休闲,limits)