ZFS over NFS并发写入问题

前端之家收集整理的这篇文章主要介绍了ZFS over NFS并发写入问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我运行了一个Proxmox集群,在这个集群上,我在专用网络上有一些虚拟机,其中有一个(Proxmox管理的)CEPH存储后端用于VM磁盘.

运行“Ubuntu 16.04服务器最小虚拟机”的一个(KVM)VM配置了第二个“硬盘”,设置为一个磁盘ZFS池“存储”,使用

zpool create storage /dev/sdb1

它被自动安装到/ storage.该VM还运行nfs-kernel-server.

然后通过nfs导出该目录,并在/ etc / exports中包含以下行:

/storage        10.10.0.0/16(rw,sync)

我从另外两台机器(一台运行Ubuntu 14.04的虚拟机,一台运行Ubuntu 16.04服务器的物理机)安装此导出

mount -t nfs4 10.10.3.1:/storage /mnt

由于这是我测试存储设置的操场,计划的两个Web服务器托管一个写入Berkeley DB文件的旧perl应用程序,我决定以一种简单的方式测试并发写入,使用简单的PHP脚本测试我的共享存储后端:

<?PHP
    $line = str_repeat($argv[1],30) . "\n";

    for ($i = 1; $i <= 10000; $i++)
    {
        $of = fopen("test.txt","a") or DIE("can't open output file\n");
            fwrite($of,sprintf("%04d-",$i)  . $line);
        fclose($of);
    }

?>

我转到共享存储目录(这也是PHP脚本所在的位置),并使用它运行它

PHP test.PHP 1

从第一台远程机器,并与

PHP test.PHP 2

从第二台机器.

我的问题是有些写入似乎没有到达目标文件,即我得到这样的输出

9286-222222222222222222222222222222
9287-222222222222222222222222222222
9288-222222222222222222222222222222
9289-222222222222222222222222222222
7473-111111111111111111111111111111
7474-111111111111111111111111111111
7475-111111111111111111111111111111
7476-111111111111111111111111111111
7477-111111111111111111111111111111
7478-111111111111111111111111111111
7479-111111111111111111111111111111
9297-222222222222222222222222222222
9298-222222222222222222222222222222
7481-111111111111111111111111111111
9300-222222222222222222222222222222
7482-111111111111111111111111111111
9302-222222222222222222222222222222
7484-111111111111111111111111111111

并验证该行未被缓存并写入文件中的其他位置:

nas:/storage# grep "9290-" test.txt
9290-111111111111111111111111111111
nas:/storage#

即它(其中包括)缺失了

9290-222222222222222222222222222222

线.在这一点上,我希望我只是缺少一些配置参数或设置过程中的一两步来解决这个问题.

编辑:我只是注意到写入似乎彼此阻塞,即行号之间的间隙总是与来自另一个远程“写入器”的交错写入的数量相对应.尽管如此,我仍然没有接近解释为什么会发生这种情况以及如何解决这个问题.

此外,我在vm硬盘的proxmox上激活了“Discard”和“IO thread”,并禁用了这两个选项,没有效果(不认为它会,但仍然检查).行为是一样的.

解决方法

好吧,显然Berkeley DB为并发访问提供了锁定机制,因此我的“简单测试场景”不足以确保在应用程序级别上发生锁定;我的测试脚本没有做任何类似的事情,因此测试与用例不匹配.

因此,我正在考虑回答这个问题.谢谢你的回复

猜你在找的Linux相关文章