Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337475
  • 博文数量: 103
  • 博客积分: 3886
  • 博客等级: 中校
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-28 15:00
文章分类

全部博文(103)

文章存档

2011年(30)

2010年(73)

分类:

2010-08-10 11:09:56

配置一组图片服务器前端CACHE

给的服务器就两台,要求实现: 高可用+负载均衡+SSL支持
才两台服务器,考虑来考虑去还是使用LVS+Heatbeat+ld+squid3.0+openssl的方式实现

一、基础配置(两台服务器同)
A、更新
1、更换更新源(服务器位于国内做此操作)

sed -i "s/mirror.centos.org/centos/mirrors.centos.91.com/g" /etc/yum.repos.d/CentOS-Base.repo
sed -i "s/^mirrorlist/#mirrorlist/g" /etc/yum.repos.d/CentOS-Base.repo
sed -i "s/^#baseurl/baseurl/g" /etc/yum.repos.d/CentOS-Base.repo

2、修改本机DNS(各机房所在位置的DNS)
vi /etc/resolv.conf

nameserver 218.85.157.99
nameserver 202.101.98.55
options nochecknames rotate

3、更新

yum clean all
yum -y update

[sepatator]

B、优化
1、增加以下内容到/etc/sysctl.conf末尾

kernel.core_uses_pid = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5
fs.file-max = 655360
net.core.somaxconn = 4096

执行:

sysctl -p

使之生效

2、加大可允许打开的文件句柄数

echo "* soft nofile 65536" >>/etc/security/limits.conf
echo "* hard nofile 65536" >>/etc/security/limits.conf

3、时间校对

yum -y install ntp
service ntpd restart
service ntpd stop
echo "#time update" >> /etc/crontab
echo "0 23 * * * root /usr/sbin/ntpdate time.windows.com" >> /etc/crontab[/code

C、硬盘分区挂载
查看硬盘

fdisk -l

根据实际物理机器是否硬raid及硬盘数量做不同的raid及分区情况

因为这里是做cache,不建议使用软raid

二、squid的编译安装配置
1、squid的安装
安装gcc等工具包
yum install gcc gcc+ gcc-c++ gcc-g77 autoconf automake ncurses-devel flex openssl-devel mod_ssl

cd /usr/local/src
wget
tar zxvf squid-3.0.STABLE8.tar.gz
cd squid-3.0.STABLE8

./configure --prefix=/usr/local/squid-3.0.STABLE8 --enable-gnuregex --enable-dlmalloc --with-pthreads --enable-ssl --enable-stacktrace --enable-removal-policies=heap,lru --enable-delay-pools --enable-kill-parent-hack --enable-snmp --enable-icmp --enable-err-language=simplify_Chinese --enable-default-err-languages=Simplify_Chinese --enable-cahce-digests --disable-ident-lookups --with-filedescriptors=65536 --enable-underscore --enable-large-cache-files --with-large-files --enable-storeio=aufs,coss,diskd,ufs --enable-linux-netfilter --enable-async-io=160 --enable-cachemgr
make

make install

cd /usr/local
ln -s squid-3.0.STABLE8 squid

2、生成证书并申请新证书

openssl genrsa -des3 -out *.91.com.key 1024
openssl req -new -key *.91.com.key -out *.91.com.csr

这是需要生成正式证书使用的,如果只是需要未认证的证书,可使用以下命令生成:

openssl req -utf8 -new -key *.91.com.key -out *.91.com.csr

这里生成的证书不要使用密码,貌似squid不能使用密码,我第一次使用了密码能正常启动,但会提示未认证,让我搞了好久的时间。

3、squid配置

mkdir /data/cache1
mkdir /data/cache2
mkdir /data/cachelog
chown squid /data/cache*

把服务商提供的证书放到/data/key/目录下,包括中级根证书,证书,公钥三个文件。

修改squid.conf文件内容:

##cache port setting
#http_port 80 vhost vport
http_port 80 transparent
https_port 443 cert=/data/key/91_com.crt key=/data/key/key.pem cafile=/data/key/intermediate.crt defaultsite=hsimages.91.com

##cache directory setting
cache_dir ufs /data/cache1 15000 32 256
cache_dir ufs /data/cache2 15000 32 256
cache_mem 2048 MB
cache_swap_low 90
cache_swap_high 95

##cache storage setting
maximum_object_size_in_memory 4096 KB
max_open_disk_fds 0
minimum_object_size 0 KB
maximum_object_size 32768 KB
maximum_object_size_in_memory 80 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
half_closed_clients off
cache_swap_high 95
cache_swap_low 80

memory_replacement_policy lru
cache_replacement_policy lru

##cache time out setting
forward_timeout 20 seconds
connect_timeout 15 seconds
read_timeout 3 minutes
request_timeout 1 minutes
persistent_request_timeout 15 seconds
client_lifetime 15 minutes
shutdown_lifetime 5 seconds
negative_ttl 10 seconds

##common standard setting
visible_hostname cache1.91-cdn.cn
cache_mgr 1870817@qq.com
cachemgr_passwd password all
client_persistent_connections off
server_persistent_connections on
cache_effective_user squid
cache_effective_group squid
tcp_recv_bufsize 65535 bytes
half_closed_clients off

##cache log setting
emulate_httpd_log on
#logformat apache %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
#access_log /data/cachelog/access_log combined
logformat Squid %ts.%03tu %6tr %>a %Ss/%03Hs %access_log /data/cachelog/access.log common
cache_log /data/cachelog/cache.log
cache_store_log /data/cachelog/store.log
cache_swap_log /data/cachelog/cache_swap.log
mime_table /usr/local/squid/etc/mime.conf
pid_filename /usr/local/squid/Squid.pid
logfile_rotate 5

##vhost setting
cache_peer 192.168.0.127 parent 80 0 no-query name=hsimages
#cache_peer images.vip.91.com parent 80 0 no-query name=imagesvip
#cache_peer 121.207.254.21 parent 80 0 no-query name=ssltest
#cache_peer 192.168.0.127 parent 80 0 no-query no-digest originserver name=sslvip

#cache_peer_domain sslvip hsimages.91.com
cache_peer_domain hsimages hsimages.91.com
#cache_peer_domain ssltest hsimages.91.com

##refresh_pattern
#refresh_pattern ^ftp: 1440 20% 10080
#refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern . 0 20% 4320
#refresh_pattern -i .gif$ 10 1000% 10 ignore-reload
#refresh_pattern -i .jpg$ 10 1000% 10 ignore-reload
#refresh_pattern -i .png$ 10 1000% 10 ignore-reload
#refresh_pattern -i .bmp$ 10 1000% 10 ignore-reload
#refresh_pattern -i .css$ 10 50% 60 reload-into-ims
#refresh_pattern -i .js$ 10 50% 60 reload-into-ims
#refresh_pattern -i .htm$ 5 50% 10 reload-into-ims
#refresh_pattern -i .shtm$ 5 50% 10 reload-into-ims
#refresh_pattern -i .html$ 5 50% 10 reload-into-ims
#quick_abort_min 0 KB
#quick_abort_max 0 KB
#range_offset_limit -1 KB

##Acl policy setting
acl Localhost src 127.0.0.1 218.5.2.219 121.207.254.240/28
acl AntiBaidu req_header User-Agent Baiduspider
acl QUERY urlpath_regex cgi-bin .php .cgi .aspx
acl Manager proto cache_object
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl domian dst 91.com

http_access deny AntiBaidu
cache deny QUERY
http_access allow Manager Localhost
#http_access deny Manager
http_access deny !Safe_ports

acl 91 dstdomain .91.com
http_access deny !91
http_access allow all

hosts_file /etc/hosts

4、启动
/usr/local/squid/sbin/squid -z 生成缓存目录
/usr/local/squid/sbin/squid -s

netstat -na |grep 443
netstat -na |grep 80
看端口监听是否启动了

如果OK,那么squid配置完毕,这里不做squid配置的一些讲解,因为我本人也不是非常熟悉!

三、双机高可用

一些关于squid调试的命令:
1,初始化你在 squid.conf 里配置的 cache 目录
#squid/sbin/squid -z
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,在前台启动squid,并输出启动过程。
#squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4,启动squid在后台运行。
#squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
5,停止 squid
#squid/sbin/squid -k shutdown
这个不用解释吧。
6,重引导修改过的 squid.conf
#squid/sbin/squid -k reconfigure
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。

再来点其他的。
1,修改cache 缓存目录的权限。
#chown -R squid:squid /home/cache
我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。
2,修改squid 日志目录的权限
#chown -R squid:squid /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。
例如生成 access.log cache.log store.log
3,查看你的日志文档。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。

阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~