Monthly Archives: 12月 2010

magento支持的cache, apc / memcached / xcache / file

magento 默认支持4种cache,  分别是 apc / memcached / xcache / file(文件), 他们各自的性能如何?

未完待续.

分享家:Addthis中国

服务器集群基本知识与常用软件

1.  HA高可用性: 系统保持正常运行时间的百分比, 常用划分如下:

可用性分类 可用水平 每年停机时间
容错可用性 99.9999 < 1 min
极高可用性 99.999 5 min
具有故障自动恢复能力的可用性 99.99 53 min
高可用性 99.9 8.8 h
商品可用性 99 43.8h

提高可用性, 除了用F5之类大型的硬件方法,  最常规的是双机热备份,  对外共享一个虚拟IP,   一台机器故障时, 自动切换到另一台, 对外的IP不变,  这种切换一般几秒内就完成.

常见的高可用性软件有: Heartbeat .

2. 负载均衡

负载均衡的软件挺多(其中,不少软件把负载均衡作为一个功能模块), 比如:  HAProxy , Nginx,Squid, lighttpd, LVS, ldirectord, Varnish

其他负载均衡的方法有: DNS轮循, CDN

3. Cache

集成Cache的软件有:  nginx, squid

分享家:Addthis中国

Heartbeat实现Nginx高可用性HA

lvs需要较多服务器, 属于重量级方法.  用Heartbeat实现Nginx高可用性HA, 再加上Nginx的负载均衡能力, 就可以构建一个高并发, 高可用性的集群系统.

中文资料: http://www.yoyotown.com/?p=511

英文资料:

http://staff.adams.edu/~cdmiller/posts/nginx-heartbeat-ha/

http://www.linuxforu.com/how-to/building-a-highly-available-nginx-reverse-proxy-using-heartbeat/

分享家:Addthis中国

Nginx负载均衡和LVS负载均衡的比较分析zz

转载来源  http://hi.baidu.com/yuhongchun027/blog/item/c707a54393158a1b9213c656.html

lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。

首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。

下面来分析一下两者:

一、lvs的优势:

1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。

2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。

二、nginx和lvs作对比的结果

1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。

2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。

3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。

4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。

5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。

6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。

7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvslvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。
首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。

下面来分析一下两者:

一、lvs的优势:

1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。

2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。

3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。

4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。

5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。

另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。

二、nginx和lvs作对比的结果

1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。

2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。

3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。

4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。

5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。

6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。

7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs

分享家:Addthis中国

服务器同步rsync, csync2,inotify-tools

服务器异步备份常用  rsync + cron

服务器同步备份常用  rsync + inotify-tools  或者 csync2 + inotify-tools

当然, 还有很多类似的方案, 如国产的 sersync .

分享家:Addthis中国

U盘启动网络安装Centos步骤(需要grub设置)

1, 在window下把U盘格式化成FAT32, 然后利用syslinux把U盘作成引导盘. 网上方法很多, 最简单明了的见这里.u盘启动centos

2. 解压缩centos 的网络安装iso,  netinstall.iso (10M)里面的所有文件到U盘根目录, 根据1中的pdf说明文档进行改名.

3. 插入u盘, 选择U盘启动. 进入centos网络安装界面, 安装方式选择http,站点可选择的很多,比如mirrors.163.com,目录为centos/5.5/os/i386, 开始安装.

4. 一路默认安装。成功后, 再次重启时如果没有插入这个U盘, 将无法从硬盘启动!.   所以现在启动时还是需要U盘,进到CentOS. 把grub安装到硬盘, 用 df 命令看 / 所在的硬盘, 比如 /dev/sda1,  grub-install /dev/sda1. 成功后, 编辑/boot/grub/menu.list,将所有hd1修改为hd0, 这样就可以硬盘启动了.

自此, U盘启动网络安装Centos全部完成,  必须要注意第4步, 没有做的话centos将无法从硬盘启动!

分享家:Addthis中国

Apache, Nginx性能比较, Nginx完胜

本文为yaozer原创, 文章比较长, 先放结论:  不管是用ab, 还是webbench进行并发测试, 10个并发用户访问时, apache与nginx差别不大,  但是随着并发量增加, 100个并发用户访问时, nginx优势巨大, 测试结果是apache的 6~8 倍.nginx 完胜!

使用软件ab, webbench进行测试Apache, Nginx性能, 测试页面为Magento 1.4.2.0的首页,环境如下:

测试环境:
IBM x3250 服务器 xeox 2.4G, 4G RAM, 250G RAID1
Centos 5.5, apache 2.2.17, mysql 5.1.52, nginx 0.9.3, php 5.2.16, magento1.4.2.0

webbench小巧简单, 测试结果如下:

—————————————-开始 webbench 测试 ———————————————————–

Apache Nginx Apache Nginx
webbench -c 10 -t 30 webbench -c 10 -t 30 webbench -c 100 -t 30 webbench -c 100 -t 30
10个并发用户访问30s 10个并发用户访问30s 100个并发用户访问30s 100个并发用户访问30s
速度 (页面/分钟) 1678 1618 1902 15432
速度 (字节/秒) 311045 299464 339006 1184762
成功请求个数 839 809 951 7716
失败请求个数 0 0 0 0
CPU占有率 90.30% 78.60% 99.90% 83.20%

webbench测试结论:
10个并发用户访问时, apache速度略优于nginx, 但是CPU占有率明显高于nginx;
100个并发用户访问时, nginx优势巨大,速度是apache的8倍左右, CPU占有率明显低于apache.

—————————————-开始 ab 测试 ———————————————————–

Apache Nginx Apache Nginx
ab -c 10 -n 1000 ab -c 10 -n 1000 ab -c 100 -n 1000 ab -c 100 -n 10000
文档长度(字节): 10684 10684 10684 3696
并发数: 10 10 100 100
测试运行时间(秒): 34.886 38.412 27.091 4.547
成功请求个数: 1000 1000 1000 1000
失败请求个数: 0 0 110 117
非2xx常规响应: 0 0 110 883
总传输字节: 11122000 11105000 10129032 4709431
HTML 传输直接: 10684000 10684000 9712262 4513596
平均每秒请求个数 28.66 26.03 36.91 219.91
每次请求平均时间 (ms毫秒): 348.861 384.12 2709.072 454.732
在某时间内(ms毫秒), 请求得到响应的比例
50.00% 318 326 2838 174
66.00% 373 423 3130 200
75.00% 412 461 3368 350
80.00% 430 477 3612 522
90.00% 478 523 4123 646
95.00% 523 565 4509 946
98.00% 599 683 5009 1590
99.00% 1016 787 5388 3150
100% (longest request) 1304 1233 5956 3578
CPU 88.80% 83.00% 99.90% 82.50

测试结论:
10个并发用户访问时, apache速度略优于nginx, 但是CPU占有率高于nginx;
100个并发用户访问时, nginx优势巨大,速度是apache的6倍左右,  CPU占有率明显低于apache.

—————————————-最终结论 ———————————————————–

最后结论, 不管是用ab, 还是webbench进行并发测试, 10个并发用户访问时, apache与nginx差别不大,  但是随着并发量增加, 100个并发用户访问时, nginx优势巨大, 测试结果是apache的 6~8 倍.

分享家:Addthis中国