centos – Gluster ZFS,基准测试期间死锁:zfs_iput_taskq 100%cpu

首先是一些背景:
我在一家运行 PHP-web应用程序的公司工作.我们在几个Web服务器上通过NFS安装了一个存储后端.今天我们遇到的问题是,如果一个Web服务器通过NFS写入文件,有时该文件在几分钟之后才出现在其他已安装的客户端上.它也没有多余,所以我们不能进行任何“隐形”维护.

我一直在寻找迁移到GlusterFS解决方案(两个或三个复制的砖/机器以实现冗余).现在,使用XFS作为存储文件系统“落后”Gluster工作得非常好,性能明智. Gluster似乎也没有上面提到的同步问题.

但是,我想使用ZFS作为后端文件系统,原因是;

>廉价压缩(目前存储1.5TB未压缩)
>非常容易扩展存储量“直播”(一个命令,比较
LVM一塌糊涂)
>快照,位腐蚀保护和所有其他ZFS荣耀.

在我的解决方案的演示设置中,我有三个服务器,每个服务器上有一个ZFS后端池和一个ZFS后端池.我在Linux(0.6.2)GlusterFS 3.4上使用CentOS 6.5和ZFS.我也试过Ubuntu 13.10.一切都在VMware ESX中.

为了测试这个设置,我已经将卷安装在Gluster上,然后运行BlogBench(http://www.pureftpd.org/project/blogbench)来模拟加载.我遇到的问题是,在测试结束时,ZFS存储似乎陷入了僵局.所有三台机器都有“zfs_iput_taskq”,运行在90-100%CPU,测试冻结.如果我中止测试,死锁不会消失,只有选项似乎是硬重启.

我试过了:

>禁用atime
>禁用调度程序(noop)
>不同的压缩/无压缩
>直接在ZFS上的Blogbench工作正常
>作为后端的Gluster XFS上的Blogbench工作正常

想法?我应该放弃ZFS并使用别的东西吗?备择方案?

关心奥斯卡

Linux上的ZFS需要一些基本的调整才能在负载下运行良好. ZFS ARC和Linux虚拟内存子系统之间存在一些争执.

对于CentOS系统,请尝试以下操作:

创建/etc/modprobe.d/zfs.conf配置文件.在模块加载/引导期间读取.

添加如下内容:

options zfs zfs_arc_max=40000000000
options zfs zfs_vdev_max_pending=24

其中zfs_arc_max大约是RAM的40%(以字节为单位)(编辑:尝试zfs_arc_max = 1200000000). zfs_vdev_max_pending的编译默认值为8或10,具体取决于版本.对于SSD或低延迟驱动器,该值应该很高(48).对于SAS来说可能是12-24.否则,请保留默认值.

您还希望在/etc/sysctl.conf中也有一些楼层值

vm.swappiness = 10
vm.min_free_kbytes = 512000

最后,使用CentOS,您可能希望安装tuned和tuned-utils,并使用tuned-adm profile virtual-guest将您的个人资料设置为virtual-guest.

试试这些,看看问题是否仍然存在.

编辑:

运行zfs set xattr = sa storage. Here’s why.您可能需要擦除卷并重新开始(我绝对建议这样做).

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim /etc/sysconfig/network-scripts/ifcfg-eth0 B...