加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

ZFS over NFS并发写入问题

发布时间:2020-12-14 02:51:09 所属栏目:Linux 来源:网络整理
导读:我运行了一个Proxmox集群,在这个集群上,我在专用网络上有一些虚拟机,其中有一个(Proxmox管理的)CEPH存储后端用于VM磁盘. 运行“Ubuntu 16.04服务器最小虚拟机”的一个(KVM)VM配置了第二个“硬盘”,设置为一个磁盘ZFS池“存储”,使用 zpool create storage /d
我运行了一个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 filen");
            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-222222222222222222222222222222
7474-222222222222222222222222222222
7475-222222222222222222222222222222
7476-222222222222222222222222222222
7477-222222222222222222222222222222
7478-222222222222222222222222222222
7479-222222222222222222222222222222
9297-222222222222222222222222222222
9298-222222222222222222222222222222
7481-222222222222222222222222222222
9300-222222222222222222222222222222
7482-222222222222222222222222222222
9302-222222222222222222222222222222
7484-222222222222222222222222222222

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

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

即它(其中包括)缺失了

9290-222222222222222222222222222222

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

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读