August 22, 2010
squid和varnish的小结
"上周初步接触linux下的这2个反向缓存软件,都实验了一下,貌似squid还是比较顺利的,varnish则碰到了一些问题\n从varnish的文档看,性能比squid强很多,而且不是一点点,下面国外某在线媒体的12台squid换成3台varnish前后访问响应延时比较,据说有人也测试过的确如此,\n[][1]\n但我就不那么顺利了。先说squid,安装很顺利,网上的中文文档也很多,在这次尝试中,被缓存的网站的静态内容并不多,主要还是以PHP为主,所以反向cache的效果并不是很好,缓存命中率在60到70%之间,缓存的主要对象是图片。由于安装调试都很顺利,所以在“试玩”了一天后,直接就上线用上了,几天下来,正常。由于做反向缓存的服务器内存不大,只有1G,所以缓存大小只设置了384M,使用了shm,保证了速度,但应该是没有充分发挥出缓存的效能,后期准备增加1G的内存,把缓存扩大到1G,这样的话,缓存对象的大小还能再设置大一些,也许有些mp3之类的也可以缓存起来,这样命中率也许会更高些。\n但即便缓存的命中不是很高,但对后面WEB服务器的压力确实是大大减少了,下面是web服务器上并发连接的图示,一处 …"
August 22, 2010
lvs-可伸缩Web和媒体服务
"基于LVS可伸缩Web和媒体服务的体系结构如图2.2所示:在前端是一个负载调度器,一般采用IP负载均衡技术来获得整个系统的高吞吐率;在第二层是服务器池,Web服务和媒体服务分别运行在每个结点上;第三层是数据存储,通过分布式文件系统使得每个服务器结点共享相同的数据。集群中结点间是通过高速网络相连的。\n2.2:基于LVS的可伸缩Web和媒体集群\n分布式文件系统提供统一的存储空间,这使得系统的维护工作比较方便,且系统运行比较高效。当所有服务器结点超载时,管理员可以很快地加入新的结点来处理请求,而无需将Web文档等复制到结点的本地硬盘上。Webmaster可以看到统一的文档存储空间,维护和更新页面比较方便,对分布式文件系统中页面的修改对所有的服务器都有效。大的媒体文件(如视频文件)分段存储在分布式文件系统的多个结点上,可以提高文件系统的性能和文件服务器间的负载均衡。\nIP负载调度器(即VS/DR方法,将在下一章详细叙述)可以分别将Web服务和媒体服务负载均衡地分发到各个服务器上,服务器将响应数据直接返回给客户,这样可以极大地提高系统的吞吐率。\nReal公司以其高压缩比的音频视频格式和音频视频播 …"
August 22, 2010
LVS集群的通用结构
"LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。\n图2.1:LVS集群的体系结构\n为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。LVS集群的体系结构如图2.1所示,它有三个主要组成部分:\n负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。 后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。 调度器采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求 …"
August 20, 2010
Keepalived服务器状态监测
"keepalived是一个类似于layer3, 4 \u0026amp; 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。\nLayer3,4\u0026amp;5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:\nLayer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器\n发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,…\n相关keepalived实现的教程:\n基于LVS的集群配置:\n利用LVS+Keepalived 实现高性能高可用负载均衡服务器:\nCentOS5.5环境下布 …"
August 20, 2010
在FreeBSD上安装Squid
"Squid 2.5下载 \u0026amp; 安装\nsquid的2.5最新版本是squid-2.5.STABLE7,先下载安装包,再安装:\n#cd /tmp #mkdir squidinstall #cd squidinstall #fetch http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE7.tar.gz #tar xzvf squid-2.5.STABLE7.tar.gz #cd squid-2.5.STABLE7 #./configure –prefix=/usr/local/squid #make #make install 看到类似于下图的提示,并且没有出现 Error Code :1 之类的错误提示,证明Squid已经安装完成了!\n/usr/local/squid/sbin/squid -z\n/usr/local/squid/sbin/squid\n配置Squid.conf\n好,接下来要做的仅仅是配置Squid.conf.\n#ee /usr/local/squid/etc/squid.conf\n但是原来 …"
August 19, 2010
mysql各种HA方案
"mysql的单点一直是一个让人很烦恼的事情,特别是master的单点。\n现在外面的解决方案主要如下: 双master方案,heartbert(HA)+rhcs(分布式文件系统),heartbert(HA)+DRBD.\n双master存在的问题是master有2个IP,这样意为着前端需要指向2个的masterIP,同时bin-log也是双向同步的,会不会比单向同步的量更多呢?\n第二种方案是挺不错的,但是必须要分布式文件系统,要是实在不行就可以用NFS来代替,但是这样存在的问题就是数据文件是单点,所以必须使用分布式文件系统。\n第三种是关键是DRBD,这个是在网络层做RAID1,在A机器上收到数据后DRBD会写到本地硬盘上,同时通过网络传输到另外一台机器上。这样保证了2台机器的一致。特别是DRBD传输的时候有多种协议可以选择,但是一般看到网上大家都是使用协议C(C表示收到远程主机的写入确认后,视为写入完成) DRBD的架构如下:\n今天在high scalability有个文档专门比较各种mysql HA的方案。基本上大家可以根据这个比较来做自己合适的的MySQL HA了 "
August 17, 2010
[教程]freebsd下SVN服务器配置
"**注意:**这里主要介绍使用svnserver服务器这种方式,在安装的时候使用的是ipv4,所以最好如果没有必要的话,尽量将ipv6的一些选项给取消.\n安装svn服务器软件.由于要通过Web访问SVN所以要加载mod_dav模块,所以在安装apche的时候要添加一些参数:\n#cd /usr/ports/devel/subversion #make WITH_MOD_DAV_SVN=yes WITHOUT_BDB=yes install clean #rehash\n下边介绍两种使用方式: 第一种方式:使用svnserve服务器,自己的协议和客户端,在freebsd我在/usr/local/www/apache22/data下用FTP上传了一个blog目录\n#cd /usr/local/www/apache22/data\n#svnadmin create myblog #svn import blog -m “init”\n上面第三条命令是将blog文件夹里的内容,导入到svn项目中,这种原来的文件就会在在/usr/local/www/apache22/data/myblog/blog这个 …"
August 17, 2010
$HTTP_RAW_POST_DATA 和 $_POST的区别
"这是手册里写的\n总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。\n问题: $HTTP_RAW_POST_DATA == $_POST 吗?\n照手册所写 ,答案应该就为否。 假如不一样的话,他们的区别是什么呢?\n我知道答案了,如下:\nThe RAW / uninterpreted HTTP POst information can be accessed with: $GLOBALS[‘HTTP_RAW_POST_DATA’]\nThis is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).\n也就是说,基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一样的。但是如果post …"
August 17, 2010
PHP输入流php://input
"在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input\n对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。\n“php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”. 翻译过来,是这样: “php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”\n我们应该怎 …"
August 16, 2010
如何设置服务器之间时间同步
"HP-UX系统的服务器之间的时间需要同步,利用自带的NTPD可以很好的达到目的。\n假设我们要host1作时间服务器,host2定期去跟host1的系统时间同步,那么需要作以下设置,全部用root用户执行。\n1。设置host1机器 编辑/etc/rc.config.d/netdaemons,修改下面行 export NTPDATE_SERVER= –因为这台机器将作为服务器,所以这个参数保持为空值即可 export XNTPD=1 –默认是0,改为1表示ntp进程将随系统启动自动启动 export XNTPD_ARGS=\n编辑/etc/ntp.conf,添加下面行 这个文件默认是全部注释的,可以当成ntp的文档来阅读,我们只需要在最后添加,表示将用本地系统时间作为服务器时间 server 127.127.1.1 fudge 127.127.1.1 stratum 10\n启动ntp守护进程 /sbin/init.d/xntpd start\n检查进程情况 ntpq -p\n2。设置host2机器 编辑/etc/rc.config.d/netdaemons,修改下面行 export …"