前一阵子新换了3台服务器,都是配置的16核(4路4核)CPU、16G内存,算是很强大了,不过配置的硬盘只是2个1T普通7200转台式机硬盘,根据这些天的观察,在添加数据、更新模板的时候,用iostat查看会遭遇明显的IO瓶颈,在cpu、内存富余很多的情况下,磁盘的利用率长期100%。
我们把MySQL和Web(包括Squid和Apache)服务的数据放在两块不同的硬盘上,先以为只是MediaWiki网站全文检索时MySQL的MyISAM数据库大文件频繁读写使硬盘应付不过来,后来根据仔细观察,发现MySQL的全文检索本身性能不好,在处理大量数据的时候容易使CPU卡住,同事调试了Sphnix来做全文检索可以轻易对付一个网站目前平均每分钟2次的搜索量。不过在Drupal网站新建全文索引表的过程中,确实还是遇到明显的硬盘瓶颈,平均每秒只能生成5条左右,当网站数据量在数十万以上时需要耗费以几十小时来记的时间,这个过程中硬盘处于繁忙状态,无法多个网站同时生成。
后来又在MediaWiki模板更新中也感觉硬盘处理不过来,今天详细统计了目前几个主要服务(Squid, Apache, MySQL)的磁盘使用情况,列表如下:
服务器编号 | 服务名称 | 占用空间 | 文件数量 | 文件平均大小 | 备注说明 |
17 | Squid | 92G | 10M | 9.2K | 数量大于Apache下静态文件,原因不明? |
Apache | 47G | 3.6M | 13K | 目前全为MediaWiki网站 | |
MySQL | 105G | 23K | 4.6M | 有其它几台服务器上的冗余数据,暂未删除 | |
22 | Squid | 18G | 1.5M | 12K | 只缓存MediaWiki网站,不缓存Drupal网站 |
Apache | 105G | 6.9M | 15K | 大部分MediaWiki(约92G/2.8M=13K),小部分Drupal(约13G/0.25M=51K,还有更多页面暂未生成静态缓存文件) | |
MySQL | 43G | 9.8K | 4.4M | 有一个暂复制到23上使用 | |
23 | Squid | 7.7G | 0.47M | 16K | |
Apache | 56G | 2.8M | 19K | 目前全为MediaWiki网站 | |
MySQL | 12G | 4.6K | 2.6M | 有一个暂从22复制过来使用 |
从上面的统计来看,Squid和Apache下存在数以百万、千万记的缓存文件,在目前的硬盘下肯定难以对付随机性很大的访问,需要用更好的专用磁盘来处理。
上周就考虑过更换或者添加磁盘的事情,鉴于主板不直接支持SCSI、SAS磁盘以及RAID阵列,就考虑用万转的SATA磁盘或者固态硬盘,万转SATA硬盘可选的不多,主要就是WD的迅猛龙(以前的猛禽升级版),固态硬盘虽然型号多、速度快,但容量小、价格高、寿命短,主要是发烧友放在个人机器中用,我们觉得暂时还不适合用在服务器上。
今天已经在淘宝上订货,6块WD3000HLFS(容量300G,2张单碟150G,缓存16M,传输120MB/s,读取寻道4.2ms,写入寻道4.7ms,平均无故障140万小时),每块430元,价格共2580元,准备在3台服务器中每台添加2块这种每分钟10000转的硬盘,让服务器的整体性能有个大的提高。以后如果还需要更多的硬盘还可以继续添加。
不过对于Squid、Apache和MySQL这3种服务如何放置在2块新硬盘以及2块以前的7200转硬盘上,还没有完全确定,初步的想法是:Squid、系统及备份、Apache、MySQL的数据各放置在一块硬盘上,前面两个放在7200转上,后面两个放在10000转上,具体还需要与同事以及一些朋友交流后再定。看到这里的网友如果有好的建议欢迎留言,谢谢!
评论8
什么文件读写最多?
读写最多的文件能不能放到内存里面?
磁盘文件访问情况
访问最多的应该是MySQL文件,我们已经将MyISAM的key buffer加到到4G了,但肯定还是有一些需要访问磁盘的。另外,上面写的Squid, Apache下的小文件数量太多、占用空间也很大,我们16G的内存也难以满足。后面除了增加高速硬盘外,也在想其他办法,确实要设法避免io瓶颈。谢谢关注!
是否可以考虑把数据库和web服务分散到不同服务器上
是否可以考虑把数据库和web服务分散到不同服务器上
<A Href="http:/www.meilijiafen.com" Name="reference-to-meilijiafen">美丽加分</A>
以前就是分开的,后来合并了
我们以前就是这样做过,MySQL, Squid, Web都放置在不同的机器上,但其中任何一个环节出现问题或者瓶颈,也都影响最终的用户访问。后来改为根据不同的网站(我们有比较多的网站)进行分割,而某个网站的不同功能(MySQL, Squid, Web等)进行合并到一台配置好的服务器上。
在访问量不大、数据量不大、功能不复杂的情况下,哪一种方式都可以,而出现密集访问大数量网站的时候,就都会遇到瓶颈,正在设法通过硬件、软件的办法来解决。
建议用nginx进行反向代理均衡负载
建议用nginx进行反向代理均衡负载
nginx确实不错,只是我们现在没力量来测试、实施
前几年做mediawiki的时候,很早就有人给我们推荐过nginx,但我们这边人手有限,忙于现在的各种事情,没有测试、实施,现在用drupal其实也可以搭配nginx,但暂时也没有时间精力顾得过来。谢谢这位朋友的留言建议,后面我们再来安排。
何不追求精?
我一直有关注您的博客。。我发现您的多数网站,都是以大量的数据来获取流量,因此需要很好的服务器,以及解决其中的技术问题。如果不想被这些技术问题烦扰,倒是可以考虑不做那么庞大的数据库内容,转而提供优质的内容,以较小的数据来获取更多的流量。很多个人站长,他们的数据不过千条左右,都能获取不错的流量及收入。之前的留言我有提过的,如果您做英文产品的介绍和评论相关的网站,收入应该很客观,做几千个网页就ok, 虽然你邮编库的数据有几十万,但搜索的人少,不如做热门产品搜索的人多。。
两条不太一样的路
谢谢关注及留言。您说的那种方式与我现在的方式是两种做法,就我个人而言比较喜欢做数量多、让很多人来浏览、同时也能有不错收入的网站,我不太喜欢只围绕收入和产品来做网站。
各人的看法和选择不同,都有自己的道理,呵呵。
我们以前也做过数量少而内容精的网站,也会遇到一些发展中的问题。现在是希望把网页数量做庞大,而每个页面也都把内容设法尽量展示得好一些,这个过程也有很多问题需要解决。
多多交流!