一、squid及web缓存介绍
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid将web端得到的数据转发给客户端机器,而且同时复制一份,当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
cache命中在squid每次从它的缓存里满足HTTP请求时发生。cache命中率,是所有HTTP请求中命中的比例。Web缓存典型的cache命中率在30%到60%之间。另一个相似的度量单位叫做字节命中率,描绘了cache提供服务的数据容量(字节数)。
cache丢失在squid不能从它的缓存里满足HTTP请求时发生。cache丢失的理由有很多种。最明显的,当squid第一次接受到对特殊资源的请求时,就是一个cache丢失。类似的情况是,squid会清除缓存以释放空间给新对象。另外的可能是资源不可到达。原始服务器会指示cache怎样处理响应。例如,它会提示数据不能被缓存,或在有限的时间内才被重复使用,等等。
cache确认保证squid不对用户返回过时数据。在重复使用缓存对象时,squid经常从原始服务器确认它。假如服务器指示squid的拷贝仍然有效,数据就发送出去。否则,squid升级它的缓存拷贝,并且转发给客户。
二、系统环境
两台web缓存服务器安装CentOS 5.8+squid+memcached,分别命名为squid_cache1和squid_cache2。Squid对于后端的web服务器没有要求,可以是IIS,也可以是apache或是其他的。缓存前端可以有一层负载均衡,如果是LVS的话,那么两台缓存服务器都需要绑定VIP。
Squid_cache1:
Ip:192.168.0.149
子网掩码:255.255.255.0
默认网关:192.168.0.1
Squid_cache2:
Ip:192.168.0.150
子网掩码:255.255.255.0
默认网关:192.168.0.1
三、安装前的准备工作
1、关闭SELinux
查看SELinux的状态
getenforce
如果是开启状态,则
vi /etc/selinux/config
SELINUX=disabled #修改 #SELINUXTYPE=targeted #注释掉重启系统
reboot
2.优化内核参数
vi /etc/sysctl.conf # 编辑sysctl.conf文件添加以下内容
net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 65536 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 = 8192 net.ipv4.tcp_max_tw_buckets = 5000 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 = 786432 1048576 1572864 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.ip_local_port_range = 1024 65000以上配置说明:
net.ipv4.tcp_rmem = 4096 87380 4194304:TCP读buffer,可参考的优化值: 32768 436600 873200
net.ipv4.tcp_wmem = 4096 65536 4194304:TCP写buffer,可参考的优化值: 8192 436600 873200
net.core.wmem_default:表示发送套接字缓冲区大小的缺省值(以字节为单位)
net.core.rmem_default:表示接收套接字缓冲区大小的缺省值(以字节为单位)
net.core.rmem_max :表示接收套接字缓冲区大小的最大值(以字节为单位)
net.core.wmem_max:表示发送套接字缓冲区大小的最大值(以字节为单位)
net.core.netdev_max_backlog = 262144:每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.somaxconn = 262144:web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值。
net.ipv4.tcp_max_orphans = 3276800:系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。
net.ipv4.tcp_max_syn_backlog = 8192:表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000:表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。减少它的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
net.ipv4.tcp_timestamps = 0:时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号,时间戳能够让内核接受这种“异常”的数据包,这里需要将其关掉。
net.ipv4.tcp_tw_recycle = 1:表示开启TCP连接中TIME-WAIT sockets的快速回收。
net.ipv4.tcp_tw_reuse = 1:表示开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接。
net.ipv4.tcp_mem = 786432 1048576 1572864:同样有3个值,net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力;net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段;net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。可根据物理内存大小进行调整,如果内存足够大的话,可适当往上调。建议94500000 915000000 927000000。
net.ipv4.tcp_fin_timeout = 30:表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200:表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000:表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
使配置立即生效:
/sbin/sysctl -p
3.关闭系统无关的服务
接下来关掉一些不必要的系统服务
chkconfig bluetooth off
chkconfig firstboot off
chkconfig cups off
chkconfig ip6tables off
chkconfig isdn off
chkconfig kudzu off
chkconfig sendmail off
chkconfig smartd off
chkconfig autofs off
停止apache服务
service httpd stop
建议卸载掉apache
4.修改文件描述符限制
(1)修改用户级限制
ulimit -n #查看当前用户的文件描述符的限制数目
ulimit -HSn 4096 #修改当前shell环境文件描述符的限制数目
永久修改用户的文件描述符的限制
vi /etc/security/limits.conf #编辑limits.conf文件,添加以下两行
* hard nofile 4096 * soft nofile 4096(2)修改系统级限制
vi /usr/include/bits/typesizes.h #编辑typesizes.h文件找到以下行将1024改为4096
#define __FD_SETSIZE 4096vi /usr/include/linux/posix_types.h #编辑posix_types.h文件找到以下行将1024改为4096
#define __FD_SETSIZE 4096注:刚才编辑的这两个文件是C/C++程序里面的头文件,编译squid的时候会被自动引用。只需要修改其数值,前面的#号不要去掉。
cat /proc/sys/fs/file-max #查看系统级的文件描述符的限制数目
如果小于4096,则执行下面语句,大于4096则跳过此步骤
echo 4096 > /proc/sys/fs/file-max
5.优化TCP/IP栈分配给出去连接的本地端口范围
netstat -n | grep TIME_WAIT #查看当前有多少个出去的连接
cat /proc/sys/net/ipv4/ip_local_port_range #查看分配的本地端口范围
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range #修改端口范围
vi /etc/rc.d/rc.local #编辑rc.local文件使其开机生效
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range注:以上端口范围可根据自己网站的实际情况进行更改
6.配置时间同步
yum install ntp
crontab –e
在最后添加
1 5 * * * /usr/sbin/ntpdate time.nist.gov7.开启防火墙80端口
vi /etc/sysconfig/iptables #添加一条规则
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPTservice iptables restart #重启防火墙使配置生效
8.下载软件
cd /usr/local/src
wget
wget
wget
9.安装编译工具
yum -y install gcc gcc-c++