我们有一个繁忙的networking服务器(> 500万点击/天),服务约500,000个独特的文件。 我们在FreeBSD 7.2上运行Apache。 根据iostat -x,瓶颈似乎是驱动器的search速度(我们正在运行带有两个旋转磁盘的RAID 1)。
事实上,Apache正在将其访问日志写入这些影响读取速度的相同磁盘? 你通常添加一个单独的主轴日志? 如果是这样,你添加一个单一的主轴或RAID它(你会明显失去日志数据,否则,如果磁盘失败)?
还是应该通过networking接口将Apache日志推送到中央日志logging服务器? 我假设可能是一个单独的networking接口,而不是提供所有这些HTTP请求的networking接口?
有一个繁忙的Web服务器login到RAID 1是有问题的。 我记不得什么时候我们必须改变我们的完全日志logging/存档策略,但是每天大约有几百万次点击。
我必须将日志logging迁移到RAID 0磁盘,并克服可能的数据丢失,实施Facebook的新开源Scribe技术,将日志移动到集中式日志logging服务器。 现在,我们每天的点击量已经达到了数亿次,我们正在从前端将数千兆字节的日志通过抄写员转移到中央日志logging服务器,现在可以对这些日志进行分析,绘制数据趋势和监控。 为了您的目的,一个抄写服务器将处理该stream量并轻松移动该数据。
查看mod_log_spread的mod_log_spread2端口
mod_log_spread是Apache的mod_log_config的一个补丁,它提供了一个扩展到多播访问日志的接口。 它利用群组通讯工具包Spread,
并将日志发送到日志采集器。
我会说你已经回答了你自己的问题。 你的两个想法都应该改善Web服务器的性能。 如果您为日志添加额外的驱动器,则它们应该是RAID 1。
logging这么多的命中肯定会有效果,但是多less效果取决于实际请求的大小和数量 – 如果正在服务的文件大于日志logging,那么整体上就没什么区别了,这只是行为需要读取引起I / O争用的文件。 如果内容请求倾向于遵循通常的模式(许多人请求最近几个文件的请求数量相对较less),那么添加更多的RAM可以帮助操作系统在caching中保存更多的内容。 如果请求没有遵循这样一个有用的模式(例如,在任何给定的时间段内的内容请求没有适合实际的RAM的机会),那么这当然不会有帮助。
如果日志logging活动在I / O瓶颈中非常重要,那么将日志移动到其他设备当然会有所帮助。 该设备可能是同一台机器上或networking上的另一个驱动器/arrays。 除非在正常活动的任何时候使服务器网卡处于一半饱和状态(这不太可能 – 您的外部带宽将成为瓶颈),那么除非将日志logging活动远离公共Web服务接口,否则不需要额外的网卡可以更容易地保护(或更好地适应您的networking安排)。 一个不饱和的networking链接不会在Apache日志活动中看到延迟问题,或者由于Apache日志活动的原因,但是如果有一段时间链接被长时间大量使用,Apache进程可能最终阻塞额外的时间(意味着更多的RAM被用于繁忙时间),同时等待日志写入完成。
如果内容的阅读与logging日志一样多(或更多)的问题,那么你可以考虑使用RAID0作为内容。 您可能需要加强您的备份安排,以复制单个驱动器死亡的额外风险,从而取出整个arrays。 你可以通过RAID10缓解这个问题,但这意味着使用四个驱动器而不是2. RAID5也可能是一个选项,它的读取性能与RAID0类似,只需要一个额外的磁盘,但是如果内容经常变化, RAID5写入性能问题[每块写入变成至less一个额外的读取(相邻块和一个额外的写入(用于奇偶块)]将踢你。你最好没有你的日志文件去RAID5的同样的道理。
总之:将日志移动到其他驱动器(在同一台机器上或通过networking)可能会有所帮助,同样可以将主要内容移动到RAID0,RAID10或RAID5(如果使用R0加强备份安排,请小心写入性能问题与R5)。 如果给定时间段内的大多数请求是针对您的数据的一个子集,那么更多的RAM也可能有助于减less对实际I / O操作的需求,这些数据的子集可能适合RAM块与块 – 备用尺寸。
添加单独的磁盘来执行你的日志logging将是一个相当合理的步骤,并至less在一定程度上帮助你的系统,但我现在认为是时候开始考虑未来。
看看你的stream量在网站上的增长情况,你保持了怎样的增长速度,并考虑你将在哪里下一年,甚至是2年。如果你的网站继续stream行,需要开始考虑多个Web服务器,冗余,高可用性等等。 出于这个原因,我build议你考虑使用rsyslog(这是在rsyslog3端口)或类似的处理后端服务器上的文件的远程logging。 然后,每当你需要添加一个额外的networking服务器,这是一个简单的任务,从主Web服务器上复制rsyslog设置,然后离开。 它也给你一个希望不太有争议的盒子的日志,可以让你进行更详细的分析。