我们有三台 VMware ESXi 4 主机通过 OpenFiler NFS 共享为虚拟机提供服务。每台主机都与 NAS 建立直接千兆连接。虽然读取性能很好,但在虚拟机客户机中写入文件却很困难。
为确保数据完整性,建议的配置是使用选项导出 NFS 共享sync
,并使用挂载 ext3 data=journal
。
我想比较最大完整性配置和最大 I/O 性能配置的行为。为了配置性能,我将 NFS 共享导出为
/mnt/raided/main/vm 10.0.0.0/255.255.0.0(rw,anonuid=96,anongid=96,secure,root_squash,wdelay,async)
当 ext3 挂载时
/dev/raided/main /mnt/raided/main ext3 defaults,usrquota,grpquota,acl,user_xattr,data=writeback,noatime
这些配置选项能给我带来最佳的 I/O 性能吗?更改文件系统怎么样?XFS 能显著提高性能吗?
除了 NAS 崩溃或电源故障之外,还有哪些原因可能导致此配置出现数据完整性问题?
答案1
我会认真考虑使用同步。这让我想起了《肮脏的哈利》中的“你觉得幸运吗”的演讲。
NFS v2 和 v3 的设计使得当服务器向客户端确认写入时,数据已在磁盘上。这使得 NFS 成为无状态的,因此,服务器可以在每次请求之间重新启动。希望不会发生这种情况,但这种情况确实可能发生。
这意味着如果客户端看到写入时的 ACK,那么它就不再关心磁盘上的数据。
如果您使用异步,那么情况就不再如此。不过,它会快得多。基本上,如果您使用异步,并且服务器崩溃,您可能应该重新启动客户端,除非您确切知道它们在做什么,因为如果他们希望保持多个文件同步,客户端可能会认为它们是同步的,而事实上,它们不是。
答案2
我的理解是,OpenFiler 基于 CentOS/RedHat 系列操作系统。Linux 的 nfs 服务器一开始就不是最好的*,而 CentOS/RedHat 的服务器比平均水平差。
*= 与 NetApp 文件服务器、*bsd 或 Solaris 服务器相比。
(不知道我是否会因此而被降级。)
答案3
是的,“同步”绝对是写入性能的一大杀手。除非对数据完整性的要求很高,否则我永远不会考虑它。如果您没有电池供电的 RAID 和 UPS,那就别费心了,因为它无论如何都不会产生任何影响。
'ext3 data=journal' 也没什么用。如果你追求写入性能,那就放弃 ext3 而选择 xfs,它的速度快得多,甚至都不是开玩笑的。