我有一个NFSv3服务器和大约15个客户端。我正在寻找利弊使async在服务器端。我读过这篇文章,但对我来说还有点不清楚。如果服务器在写操作中崩溃,我知道这会导致数据损坏。但是,我也读到客户端存储相同操作的缓存,如果需要的话可以恢复它。我的问题是:
fsck )?sync还是async?所有机器都是UbuntuOS10.04。
我试着在这里找出类似的问题。我读过NFS主页,并快速查看了管理NFS和NIS,第二版的书。
发布于 2011-11-08 16:42:03
因此,NFSv3规范的意思是,对于以下两个NFS数据操作,
只有在数据到达稳定存储后,服务器才能将成功返回给客户端。这是Linux服务器使用默认的“同步”导出选项实现的。有了“异步”,即使数据没有稳定的存储,服务器也可以欺骗并返回成功。
也就是说,异步的潜在腐败问题基本上如下所示
现在,最后一点是严重的问题,因为无法知道哪些数据丢失/损坏了,哪些数据没有损坏。
OTOH,如果客户端崩溃,那么客户机缓存中的任何脏数据(尚未刷新)都将丢失,但是客户端程序员可以绕过它(即只有在fsync()或close()返回成功后,程序员才能假定数据处于稳定存储状态)。
发布于 2011-11-09 15:20:22
如果我的服务器崩溃,会发生什么情况(例如,它会丢失待定的写入数据,会不会破坏底层文件系统,等等)?
与计算机是NFS服务器这一事实无关,如果它崩溃,您将丢失页面缓存中的数据(即已经写入但尚未从RAM刷新到磁盘的数据)。对于日志记录文件系统,应该在下一次挂载时使用日志自动修复文件系统。
janneb对NFS服务器上下文中的崩溃意味着什么做了很好的解释。
如果服务器和客户端同时崩溃(即电源故障/故障和UPS故障处理),会发生什么情况?
你要核实任何重要的数据。
如果服务器崩溃了,但我有RAID BBU。服务器会安全恢复吗?
不是的。使用异步导出意味着服务器告诉客户端“我已经在稳定的存储中存储了您给我的东西,您现在可以不再担心它了”,甚至在它试图将数据写到您的RAID之前。
有没有办法发现这种腐败(可能类似于fsck )?
就像詹妮布说的,不。
如果UPS正常关闭服务器怎么办?那么,我会不会有数据损坏的机会?
不是,因为在这种情况下,NFS服务器将把所有数据写入稳定的存储。
发布于 2011-11-09 21:29:25
不是的。使用异步导出意味着服务器告诉客户端“我已经在稳定的存储中存储了您给我的东西,您现在可以不再担心它了”,甚至在它试图将数据写到您的RAID之前。
为了进一步了解这一点,由于您有一个RAID卡BBU,通过启用写缓存,您将获得更快的NFS性能。这就是BBU的目的,在断电后保持这个缓存中的数据存活。我不会在生产中启用异步。正如上述作者所述,这是链的一个单独部分。
我推荐这篇包含一些通用NFS和性能信息的ZFS文章:
https://serverfault.com/questions/328931
复制相似问题