Centos

Gluster + ZFS,基準測試期間死鎖:zfs_iput_taskq 100% cpu

  • August 15, 2014

首先是一些背景:我在一家執行 PHP-web 應用程序的公司工作。我們在多個網路伺服器上通過 NFS 安裝了一個儲存後端。今天我們遇到了一個問題,如果一個網路伺服器通過 NFS 寫入一個文件,有時該文件直到幾分鐘後才會出現在其他掛載的客戶端上。它也不是多餘的,因此我們不能執行任何“隱形”維護。

我一直在考慮遷移到 GlusterFS 解決方案(兩個或三個複制的磚/機器以實現冗餘)。現在,使用 XFS 作為 Gluster “背後”的儲存文件系統在性能方面表現得非常好。Gluster 似乎也沒有上面提到的同步問題。

但是,我想使用 ZFS 作為後端文件系統,原因是;

  • 廉價壓縮(目前儲存 1.5TB 未壓縮)
  • 很容易“實時”擴展儲存卷(一個命令,比較 LVM 混亂)
  • 快照、位腐爛保護和所有其他 ZFS 榮耀。

在我的解決方案展示設置中,我在每台伺服器上的單獨磁碟上擁有三台帶有 Replicated Gluster 和 ZFS 後端池的伺服器。我在 Linux (0.6.2) + GlusterFS 3.4 上使用帶有 ZFS 的 CentOS 6.5。我也嘗試過使用 Ubuntu 13.10。一切都在 VMware ESX 中。

為了測試這個設置,我在 Gluster 上安裝了卷,然後執行 BlogBench ( http://www.pureftpd.org/project/blogbench ) 來模擬負載。我遇到的問題是,在測試結束時,ZFS 儲存似乎陷入了死鎖。所有三台機器的“zfs_iput_taskq”都以 90-100% 的 CPU 執行,並且測試凍結。如果我中止測試,死鎖不會消失,唯一的選擇似乎是硬重啟。

我試過了:

  • 禁用一次
  • 禁用調度程序(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%(以字節為單位)(編輯:try 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 中,您可能需要安裝tunedtuned-utils設置您的配置文件為 virtual-guest with tuned-adm profile virtual-guest.

試試這些,看看問題是否仍然存在。

編輯:

執行zfs set xattr=sa storage這就是為什麼。您可能必須擦除卷並重新開始(我絕對建議這樣做)。

引用自:https://serverfault.com/questions/583630