这实际上是家里的服务器,但我觉得它足够复杂,不需要在 SuperUser 上使用它,而且可以轻松应用于专业情况。
我有一台运行 Debian(Lenny 5.0.4)的文件服务器,它在 RAID 5 之上有一个 XFS LVM,操作系统驱动器与 RAID 分开。它还运行 apache、samba 和 postgresql。附注:在 RAID5 批评者指责我之前,我使用 RAID5 是因为我在原始驱动器空间上获得了更高的性价比,并且仍然具有一定的容错能力。
当启动该盒子时(通过关机或重启),读取/写入其 Samba 共享会超出千兆网络连接的最大限度。随着时间的推移,速度会逐渐降低,最终降至 < 10MB/s;但是,当重启时,速度会恢复到最大限度。
为什么会发生这种情况?有没有办法在不关闭服务器的情况下“清除”导致这种情况的原因?
提前致谢!
编辑:回答@LapTop006 的问题,cat /proc/mdstat 的输出在重新启动后和运行缓慢时是相同的:
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[0] sda[5] sdb[4] sdf[3] sdg1[2] sde1[1]
4883799680 blocks level 5, 64k chunk, algorithm 2 [6/6] [UUUUUU]
unused devices: <none>
根据xfs_db的frag命令:
actual 58969, ideal 23904, fragmentation factor 59.46%
编辑2: 我正在使用标准的 Debian 内核。cat /etc/fstab 为我的操作系统驱动器和 raid 输出以下内容:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda1 / ext3 errors=remount-ro 0 1
/dev/mapper/oomox-lvm /raid xfs defaults 0 2
老实说,我并不是最精通 Linux 的专家,我也没有通过命令行(即 mkfs_xfs)创建 raid 或 lvm;我第一次安装操作系统时使用了基于 UI 的 Debian RAID 安装设置,并且只在需要向阵列添加驱动器时才使用命令行。
当它再次开始变慢时,我会发布 iostat 输出。
编辑3:
无论速度慢还是快,iostat 输出都会显示所有驱动器的读取和写入字节数相等。我还尝试设置
socket options = TCP_NODELAY
按照@Avery Payne 的建议在 samba 配置中,但速度仍然很慢。不过至少问题已经缩小了,因为只需重新启动 samba 即可解决问题。不过这很奇怪,因为直到最近我才遇到这个问题。
最终编辑:我尝试了@David Spillett 的建议
time dd if=/dev/sda of=/dev/null
对于每个驱动器,查看其速度慢时与速度快时是否有任何差异,结果没有。所以,问题显然出在 Samba 上。
我将正确答案授予@Avery Payne。尽管@David Spillett 的答案提供了大量故障排除技术,但从技术上讲,@Avery Payne 为我指明了解决此问题的最正确方向。如果我找到最终解决方案,我会发布。
感谢大家!
答案1
当启动该盒子时(通过关机或重启),读取/写入其 Samba 共享会超出千兆网络连接的最大限度。随着时间的推移,速度会逐渐降低,最终降至 < 10MB/s;但是,当重启时,速度会恢复到最大限度。
问题很可能不是出在操作系统或硬件上,而是出在您的 Samba 配置上。您在 Samba 中正确设置了 TCP 选项吗?有些选项会导致客户端访问性能下降,要么导致 TCP 流量变慢,要么导致额外的开销。
您的 RAID 和 fstab 看起来很好。
对评论的跟进:
在 smb.conf 中你应该在全局部分有以下行:
socket options = TCP_NODELAY
更多信息可以在常见问题解答的 Samba 性能调整部分中找到
http://samba.org/samba/docs/man/Samba-HOWTO-Collection/speed.html
答案2
以下一些想法或许能帮助你排除一些可能性:
是否某个地方存在内存泄漏,导致一段时间后机器疯狂地交换?free -m
当问题明显时检查一下。
另外,RAID 软件是否遇到了问题,导致它需要执行重新同步?请/proc/mdstat
在遇到速度缓慢时检查是否出现此问题(尽管我不希望通过重启来解决这个问题 - 任何此类重新同步都应在重启后重新启动)。
您是否排除了本地 I/O 问题?当问题明显时,阵列对本地进程的执行速度有多快。如果本地进程无法以正常速度访问阵列,则 Samba 不是问题所在(相反,如果它们可以访问而网络访问却不能,则支持相反的观点)。如果驱动器在本地确实看起来很慢,您可以通过验证网络是否不慢来寻找进一步的证据以及驱动器通过使用netcat
和运行简单的测试pv
(参见http://www.interphero.com/?p=116或搜索“netcat speedtest”查看其他示例)。
这可能是一个或多个驱动器的固件问题吗?检查制造商是否提供过此类更新。此外,也可能只是一个驱动器播放异常。当出现速度问题时,请尝试time dd if=/dev/sda of=/dev/null
,对每个驱动器重复几次并取平均值。如果一个驱动器出现很多比其他的慢,那么也许它有问题,需要更换(或者,如果有已知问题,则需要固件更新)。
您是否排除了网卡问题(硬件或驱动程序)?您可以尝试将其换成另一张 Gbit 卡(使用不同的芯片组),看看是否有区别。
如果问题确实出在 Samba 上,而不是 RAID 阵列、网卡或其他任何东西上,是否需要完全重启才能解决问题,还是只需重启 Samba 就足够了?(或者,如果服务器以这种方式加入域,是否需要同时重启 Samba 和 winbindd?)
关于您的 RAID5 评论的附注:
RAID5 的主要问题是写入性能,尤其是对于大量小写入。这可能会降低繁重的数据库工作的性能,但对于大部分时间都用于执行批量读取的基本文件服务器角色(您的情况听起来就是这样),在大多数情况下,它几乎没有或根本没有明显的影响。如果您确实发现写入性能是一个问题,请尝试在 3 驱动器模式下使用全新的 RAID10 驱动程序(读取性能与 3 驱动器 RAID5 (或 2 驱动器 RAID0)相似,但写入性能更像 2 驱动器 RAID1,同时保持相同的冗余度,因为任何一个驱动器一次都可能损坏)。不过,除了最新内核之外,RAID10 驱动程序可能仍被归类为“实验性的”。
RAID5 的另一个问题是,如果更换一个驱动器,重建阵列需要多长时间。我怀疑 3 驱动器 RAID10 在这方面会更好。
作为参考:Linux 的三驱动器 RAID10 类似于某些 IBM 服务器中的 RAID 控制器所称的 RAID1E。