lvs的activeconn与netstat的conn

02 Apr 2010 Posted in  linux

曾经有过一组高并发请求的服务器,在lvs上看到单台 activeconn 约等于 220000;同时,在RS上执行 netstat -s -t|grep "connections established" 结果大概是 65000,而 squidclient mgr:5min|grep client_http.requests 结果却只有 180。后来说起并发数的时候,有些茫然,到底哪个才算是呢? 继续阅读……


perl边学边练(purge脚本)

30 Mar 2010 Posted in  CDN

squid的purge,一般有两种方式,squidclient -m purge url或者http request (method)purge url。如果任务不太多的情况下,直接使用squidclient -p 80 -h 1.2.3.4 -m purge url即可。如果任务比较繁重的情况下,telnet80后直接发送purge请求稍微好一些。作为初学perl的练手,写一个purge脚本。如下: 继续阅读……


squid源站故障转向(终结篇)

28 Mar 2010 Posted in  CDN

因为这么一个想法,我陆陆续续的把squid很多功能都理了一遍,今天终于打算写个不完美的终结篇。而就在写这个终结篇的同时,公司里也已经开始把这批别扭的客户改往nginx平台加速了。 继续阅读……


zabbix_proxy部署

25 Mar 2010 Posted in  monitor

continue 继续阅读……


cacti优化

25 Mar 2010 Posted in  monitor

首先,采用spine代替cmd.php来采集数据。
下载与cacti相应版本的spine和补丁:
bash wget http://www.cacti.net/downloads/spine/cacti-spine-0.8.7e.tar.gz tar zxvf cacti-spine-0.8.7e.tar.gz -C /tmp cd /tmp/cacti-spine-0.8.7e wget http://www.cacti.net/downloads/spine/patches/snmp_v3_fix.patch wget http://www.cacti.net/downloads/spine/patches/mysql_client_reconnect.patch wget http://www.cacti.net/downloads/spine/patches/ping_reliability.patch patch -p1 -N < snmp_v3_fix.patch patch -p1 -N < mysql_client_reconnect.patch patch -p1 -N < ping_reliability.patch ./configure –prefix=/cache/data/cacti --with-mysql=/home/mysql make # 这个时候发现报错了,spine0.8.7e编译安装要求最新版本的automake1.11,于是去下automake: wget http://ftp.gnu.org/gnu/automake/automake-1.11.tar.gz tar zxvf automake-1.11.tar.gz -C /tmp/ cd /tmp/automake-1.11/ ./configure --prefix=/usr # 又报错,automake1.11要求新版本的autoconf2.64,于是去下autoconf: wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.65.tar.gz tar zxvf autoconf-2.65.tar.gz -C /tmp/ cd /tmp/autoconf-2.65/ ./configure --prefix=/usr && make && make install 继续阅读……


cacti自建tcp80连接数监控

24 Mar 2010 Posted in  monitor

同样作为提供web服务的机器,因为不同业务的关系,除了流量以外,还需要参考TCP80连接数来分析服务器性能状况。下面就试试cacti对连接数的监控。
最简单的方法,利用snmpnetstat这个命令,自动搞定一切。cactiuser.org上提供一个现成的模板,只要import就能直接用。下载地址如右:http://www.iammecn.com/wp-content/uploads/2009/12/cacti_graph_template_snmp_connections.zip 继续阅读……


squid和nginx的error_page差别

24 Mar 2010 Posted in  CDN

nginx的error_page,有两个种办法。 继续阅读……


nginx的默认主机头问题

24 Mar 2010 Posted in  nginx

今天发现nginx做多域名混跑的proxy_cache时有一个小问题:当一个非加速server_name的请求到达的时候,nginx不会像squid那样返回一个ERR_DNS_FAIL,反而假装很正常的返回一个页面:
nginx http { server { server_name www.aaa.com; proxy_pass http://1.1.1.1; } server { server_name www.bbb.com; proxy_pass http://2.2.2.2; } }
访问www.ccc.com的时候,nginx毫不犹豫的把www.aaa.com的页面内容返回给了client。在日志里记录: 继续阅读……


fms3.5试用

21 Mar 2010 Posted in  CDN

flash和flex应该是现在网络上红到发紫的技术了,要flv不要tv,要sns不要bbs,连春晚节目都满嘴偷菜~~~我也试着用用fms3.5,一些基本搭建,过过瘾,免得自己太过OUT了。
fms是adobe的付费产品,不过不花钱买序列号,也可以用免费的开发版,限制是10个链接而已。上www.adobe.com注册一个帐号,就可以下载了。下载下来的zip中包含了win版的exe和linux版的tar.gz。网上教程大多是win的,不过不要紧,除了字符和图形,真正使用上没啥区别。
上传FlashMediaServer3.5.tar.gz到linux服务器上,解压开,./installFMS -platformWarnOnly,然后按提示,设定安装目录、管理员帐号密码、监听端口、是否安装自带的apache2.2.9,是否设为守护进程等,最后完成。
ps看看,已经有几个fms的进程了吧;netstat看看,也有1935/19350/1111端口的监听吧(前提是你没改),OK了。
注:这里有几个问题。如果install的时候,端口选择了默认的1935,80,而本身服务器上又开着httpd的80,就会有冲突;这时候关掉FMSHttpd是不够的,因为fmsedge也监听这80端口,需要在conf/fms.ini中,把SERVER.HTTPD_ENABLED设为false,再删除ADAPTOR.HOSTPORT里的80,然后/etc/init.d/fms restart,这样就可以了。 继续阅读……


zabbix安装试用

18 Mar 2010 Posted in  monitor

在CU上看到有帖子比较各开源monitor软件,其中对zabbix颇多赞誉。决定试用一下。
bash #为快速安装方便,LAMP环境都采用yum获取。 yum install httpd mysql* php* gcc net-snmp* curl* #然后编译安装zabbix,步骤如下: groupadd zabbix useradd -g zabbix zabbix wget http://cdnetworks-kr-1.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/1.8.1/zabbix-1.8.1.tar.gz tar zxvf zabbix-1.8.1.tar.gz cd zabbix-1.8.1 mysql -uroot -p >create database zabbix; >grant all privileges on zabbix.* to zabbix@"localhost" identified by '123456'; >flush privileges; mysql -uroot -p zabbix < create/schema/mysql.sql mysql -uroot -p zabbix < create/data/data.sql mysql -uroot -p zabbix < create/data/images_msql.sql ./configure --prefix=/home/zabbix --enable-server --enable-proxy --enable-agent --with-mysql --with-net-snmp --with-libcurl make && make install cat >> /etc/services <<EOF zabbix-agent    10050/tcp            # Zabbix Agent zabbix-agent    10050/udp            # Zabbix Agent zabbix-trapper    10051/tcp            # Zabbix Trapper zabbix-trapper    10051/udp            # Zabbix Trapper EOF make /home/zabbix/conf cp misc/conf/* /home/zabbix/conf/ ln -s /home/zabbix/conf /etc/zabbix chown -R zabbix.zabbix /etc/zabbix i=`hostname`;sed -i "s/^Hostname=system.uname/Hostname=$i" /etc/zabbix/zabbix_agentd.conf sed -i 's/^DBUser=root/DBUser=zabbix/g' /etc/zabbix/zabbix_server.conf sed -i 's/^# DBPassword=/DBPassword=zabbix/g' /etc/zabbix/zabbix_server.conf mv frontends/php /var/www/html/zabbix chown -R zabbix.zabbix /var/www/html/zabbix
根据zabbix需求修改LAMP,vi /etc/php.ini修改相关参数如下: 继续阅读……


squid 灵异日志

17 Mar 2010 Posted in  squid

今天在 squid 服务器上,无意看到一个让我无比惊讶的访问日志,随后一统计,同样的日志居然还不在少数,…… 继续阅读……


consistent_hash的perl脚本模拟

16 Mar 2010 Posted in  web

#!/usr/bin/perl -w
use String::CRC32;
my $url = shift;
my @peer = ('10.13.12.14:80',
'10.13.12.15:80',
'10.13.12.16:80',
'10.13.12.17:80',
'10.13.12.18:80');
my $new = 9999999999;
my $sum = $#peer+1;
my $uricrc = crc32("$url",length($url));
for (my $i=0;$i<$sum;$i++) {
my $peercrc = crc32($peer[$i],length($peer[$i]));
my $res = $peercrc - $uricrc;
if ($res > 0 && $res < $new){
$new = $res;
$haha = "$i\t$new";
}
}
my @num = split(/\t/,$haha);
printf("%s cached at the %s peer by the key %010.0f.\n",$url,$peer[$num[0]],$uricrc);
_END_

测试如下:
bash ./crc.pl http://www.hapi.com.cn/FLASH/age.swf http://www.hapi.com.cn/FLASH/age.swf cached at the 10.13.12.14:80 peer by the key   1007905459.
方法很拙劣,在比较运算和数组传递之间捣腾了很久,最后还是没能用%var{}和sort的办法搞定,而是采用了赋值单一变量然后切割获取序号的办法,反正只是做个小模拟,~~ 继续阅读……


一致性哈希研究

15 Mar 2010 Posted in  web

今天继续看nginx的consistent_hash_module,因为想可能的话可以把url和对应的peer关系查出来,形成一个类似squidclient一样的方式。以下内容都是我从百度、谷歌、nginx模块应用指南和ngx_upstream_consistent_hash_module的src中自我理解得出的,欢迎指正。 继续阅读……


nginx泛域名cache_store

13 Mar 2010 Posted in  nginx

回到nginx的cache_store方式上来。这是传统的nginx缓存方式,配置一般如下:
nginx upstream test{ server 211.152.60.180:80; } server { listen       80; server_name  images6.static.com; location / { root /cache/images6.static.com/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_store on; proxy_store_access   user:rw  group:rw  all:r; proxy_temp_path     /cache/temp; if (!-f $request_filename) { proxy_pass http://test; } } }
很简单明了。不过如果如果碰上img[1-16].static.com这样的客户,难不成把这一大段复制粘贴上16遍?汗~~必然得采用泛域名方式了。 继续阅读……


忽略大小写(nginx)

13 Mar 2010 Posted in  nginx

刚才发现使用perl_set忽略大小写,完全不用perl_module和perl_require那么兴师动众,同样也能达到不错的效果。比如这个用perl做伪静态路径的例子。随即就动手试验一下。 继续阅读……


忽略大小写(刚在nginx的maillist看到的)

13 Mar 2010 Posted in  nginx

想找找解决不同client请求中文url产生多份cache的办法,结果在nginx的maillist里看到也有人问《rewrite to lowercase?》下面有人回答了这个问题,做法和我一样~~呵呵。随后他也附上了这种做法的思路和问题。 继续阅读……


nginx日志(upstream)

11 Mar 2010 Posted in  nginx

作为一个web服务器,我们已经习惯了nginx的类apache日志,即$status。其实nginx的upstream模块下,带有几个变量,却是类squid日志的。他们是: 继续阅读……


忽略大小写(nginx|apache)

11 Mar 2010 Posted in  nginx

看了看nginx的perl_module,差不多知道了个大概。
在nginx.conf的http域中,通过perl_modules指定模块路径,perl_require指定模块名称;location域中通过perl引用函数。
引用对象为$r->**,列举一下主要的参数:
·$r->args - 返回请求的参数。
·$r->discard_request_body - 告诉nginx忽略请求主体。
·$r->filename - 更具URI的请求返回文件名。
$r->has_request_body(function) - 如果没有请求主体,返回0,但是如果请求主体存在,那么建立传递的函数并返回1,在程序的最后,nginx将调用指定的处理器。
·$r->header_in(header) - 检索一个HTTP请求头。
·$r->header_only - 在我们只需要返回一个应答头时为真。
·$r->header_out(header, value) - 设置一个应答头。
·$r->internal_redirect(uri) - 使内部重定向到指定的URI,重定向仅在完成perl脚本后发生。
·$r->print(args, …) - 为客户端传送数据。
·$r->request_body - 在请求主体未记录到一个临时文件时为客户返回这个请求主体。为了使客户端的请求主体保证在内存里,可以使用client_max_body_size限制它的大小并且为其使用的缓冲区指定足够的空间。
·$r->request_body_file - 返回存储客户端需求主体的文件名,这个文件必须在请求完成后被删除,以便请求主体始终能写入文件,需要指定client_body_in_file_only为on。
·$r->request_method - 返回请求的HTTP动作。
·$r->remote_addr - 返回客户端的IP地址。
·$r->rflush - 立即传送数据到客户端。
·$r->sendfile(file [, displacement [, length ] ) - 传送给客户端指定文件的内容,可选的参数表明只传送数据的偏移量与长度,精确的传递仅在perl脚本执行完毕后生效。
·$r->send_http_header(type) - 为应答增加头部,可选参数“type”在应答标题中确定Content-Type的值。
·$r->sleep(milliseconds, handler) - 设置为请求在指定的时间使用指定的处理方法和停止处理,在此期间nginx将继续处理其他的请求,超过指定的时间后,nginx将运行安装的处理方法,注意你需要为处理方法通过一个reference,在处理器间转发数据你可以使用$r->variable()。
·$r->status(code) - 设置HTTP应答代码。
·$r->unescape(text) - 以%XX的形式编码text。
·$r->uri - 返回请求的URI。
·$r->variable(name[, value]) - 返回一个指定变量的值,变量为每个查询的局部变量。 继续阅读……


忽略大小写(squid)

09 Mar 2010 Posted in  squid

在配置squid.conf的refresh_pattern或者url_regex的时候,我们习惯性的都会加上一个options:“-i”,用于忽略大小写。
前不久配置nginx.conf的location时,也用上了~*忽略大小写。
但是这个“忽略大小写”,其实只是整个请求处理流程中部分过程——配置规则的匹配过程——中的忽略。
在使用了这些options以后,一个http://www.test.com/a.htm和另一个http://www.test.com/A.HTM请求在到达squid/nginx的时候,会统一无视大小写的进行规则匹配,然后可能proxy_pass到oringin获取数据;接下来有两种情况:
oringin是windows主机,不区分大小写,返回200数据,缓存下来——分别是a和A两份!
oringin是类unix主机,区分大小写,返回一个正确的200,一个错误的404……甚至可能两个都404~~
(根据测试,完整的url中,host是不用区分大小写的,url_path里的大小写才有影响)
如果要让同样的内容就缓存一份数据,我想就只能在squid/nginx内核在处理url之前,将url的大小写问题处理掉。 继续阅读……


ASUS-EeePC-1005HA

08 Mar 2010 Posted in 

去年参加华硕服务器平台搭建大赛得了二等奖,延误了这么久,终于把奖品拿到手了—-一台上网本.赶紧开始试用. 继续阅读……


awk收发邮件小脚本

07 Mar 2010 Posted in  bash

前两天做监控的小脚本,其实只是采集几个数据,再调用了一个现成的perl大脚本发送出来,最后归入了monitor类别,没好意思放进shell类别里。 继续阅读……


nginx的proxy_cache和cache_purge模块试用记录

07 Mar 2010 Posted in  nginx

nginx的类squid哈希式cache功能,据张宴说是基本稳定可用了,昨天找个机会和时间,试着测用了一把,把要点记录一下: 继续阅读……


nginx负载均衡(consistent_hash、error_page)进阶

03 Mar 2010 Posted in  nginx

话接上篇,采用consistent方式进行url_hash负载均衡。 继续阅读……


服务器监控报警小脚本(shell+sendEmail)

03 Mar 2010 Posted in  monitor

这种email报警脚本遍地都是,很多用的sendmail、postfix,感觉有些大材小用了;也有些用perl的NET::SMTP和Authen::SASL模块发信的,不过我perl用的不好,老发出些莫名其妙的邮件来(比如if(a>1){print(a);},最后邮件里的显示的是0.99……);最后采用sendEmail这个成型的perl程序发信报警,而实时监控部分回归shell,终于完成。 继续阅读……


nginx负载均衡(url_hash)配置

02 Mar 2010 Posted in  nginx

nginx是著名的非专职全七层负载均衡器,在用惯了四层LVS后,终于碰上了麻烦:LVS后端的4台RS磁盘都较小(20G),跑不到一天就塞满了东西;而根据预估,实际上一天时间该节点也就只有20G的文件增长。很显然,因为lvs转发的轮询算法,导致RS重复缓存了相同的文件。 继续阅读……