Linux

如何使用 mdadm + luks + lvm 提高 RAID 5 的速度

  • November 2, 2021

我想我對目前的伺服器設置有點迷失了。它是 HP Proliant dl160 gen 6,我放置了 4 個旋轉磁碟,其設置具有 mdmadm + luks + lvm 和 btrfs(也許我走得太遠了?),它讀取的 IO 速度確實受到了影響50MB/s 和 2MB/s 左右的寫入速度,我感覺我搞砸了。

我注意到的一件事是我在塊設備(sbd)上而不是在分區(sdb1)上設置了 mdadm,這會影響什麼嗎?

在這裡可以看到fio --name=randwrite --rw=randwrite --direct=1 --bs=16k --numjobs=128 --size=200M --runtime=60 --group_reporting機器上幾乎沒有用的時候fio的輸出。

randwrite: (groupid=0, jobs=128): err= 0: pid=54290: Tue Oct 26 16:21:50 2021
 write: IOPS=137, BW=2193KiB/s (2246kB/s)(131MiB/61080msec); 0 zone resets
   clat (msec): min=180, max=2784, avg=924.48, stdev=318.02
    lat (msec): min=180, max=2784, avg=924.48, stdev=318.02
   clat percentiles (msec):
    |  1.00th=[  405],  5.00th=[  542], 10.00th=[  600], 20.00th=[  693],
    | 30.00th=[  760], 40.00th=[  818], 50.00th=[  860], 60.00th=[  927],
    | 70.00th=[ 1011], 80.00th=[ 1133], 90.00th=[ 1267], 95.00th=[ 1452],
    | 99.00th=[ 2165], 99.50th=[ 2232], 99.90th=[ 2635], 99.95th=[ 2769],
    | 99.99th=[ 2769]
  bw (  KiB/s): min= 3972, max= 4735, per=100.00%, avg=4097.79, stdev= 1.58, samples=8224
  iops        : min=  132, max=  295, avg=248.40, stdev= 0.26, samples=8224
 lat (msec)   : 250=0.04%, 500=2.82%, 750=25.96%, 1000=40.58%, 2000=28.67%
 lat (msec)   : >=2000=1.95%
 cpu          : usr=0.00%, sys=0.01%, ctx=18166, majf=0, minf=1412
 IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
    submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    issued rwts: total=0,8372,0,0 short=0,0,0,0 dropped=0,0,0,0
    latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
 WRITE: bw=2193KiB/s (2246kB/s), 2193KiB/s-2193KiB/s (2246kB/s-2246kB/s), io=131MiB (137MB), run=61080-61080msec

使用 dd 更新 1 次順序寫入

root@hp-proliant-dl160-g6-1:~# dd if=/dev/zero of=disk-test oflag=direct bs=512k count=100
100+0 records in 100+0 records out 52428800 bytes (52 MB, 50 MiB) copied, 5.81511 s, 9.0 MB/s

核心:5.4.0-89-generic

作業系統:Ubuntu 20.04.3

mdadm:4.1-5ubuntu1.2

lvm2:2.03.07-1ubuntu1

blkid 輸出

/dev/mapper/dm_crypt-0: UUID="r7TBdk-1GZ4-zbUh-007u-BfuP-dtis-bTllYi" TYPE="LVM2_member"
/dev/sda2: UUID="64528d97-f05c-4f34-a238-f7b844b3bb58" UUID_SUB="263ae70e-d2b8-4dfe-bc6b-bbc2251a9f32" TYPE="btrfs" PARTUUID="494be592-3dad-4600-b954-e2912e410b8b"
/dev/sdb: UUID="478e8132-7783-1fb1-936a-358d06dbd871" UUID_SUB="4aeb4804-6380-5421-6aea-d090e6aea8a0" LABEL="ubuntu-server:0" TYPE="linux_raid_member"
/dev/sdc: UUID="478e8132-7783-1fb1-936a-358d06dbd871" UUID_SUB="9d5a4ddd-bb9e-bb40-9b21-90f4151a5875" LABEL="ubuntu-server:0" TYPE="linux_raid_member"
/dev/sdd: UUID="478e8132-7783-1fb1-936a-358d06dbd871" UUID_SUB="f08b5e6d-f971-c622-cd37-50af8ff4b308" LABEL="ubuntu-server:0" TYPE="linux_raid_member"
/dev/sde: UUID="478e8132-7783-1fb1-936a-358d06dbd871" UUID_SUB="362025d4-a4d2-8727-6853-e503c540c4f7" LABEL="ubuntu-server:0" TYPE="linux_raid_member"
/dev/md0: UUID="a5b5bf95-1ff1-47f9-b3f6-059356e3af41" TYPE="crypto_LUKS"
/dev/mapper/vg0-lv--0: UUID="6db4e233-5d97-46d2-ac11-1ce6c72f5352" TYPE="swap"
/dev/mapper/vg0-lv--1: UUID="4e1a5131-cb91-48c4-8266-5b165d9f5071" UUID_SUB="e5fc407e-57c2-43eb-9b66-b00207ea6d91" TYPE="btrfs"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop10: TYPE="squashfs"
/dev/sda1: PARTUUID="fa30c3f5-6952-45f0-b844-9bfb46fa0224"

貓 /proc/mdstat

Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid5 sdb[0] sdc[1] sdd[2] sde[4]
     5860147200 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
     bitmap: 2/15 pages [8KB], 65536KB chunk

unused devices: <none>

lshw -c 磁碟

 *-disk
      description: SCSI Disk
      product: DT 101 G2
      vendor: Kingston
      physical id: 0.0.0
      bus info: scsi@0:0.0.0
      logical name: /dev/sda
      version: 1.00
      serial: xxxxxxxxxxxxxxxxxxxx
      size: 7643MiB (8015MB)
      capabilities: removable
      configuration: ansiversion=4 logicalsectorsize=512 sectorsize=512
    *-medium
         physical id: 0
         logical name: /dev/sda
         size: 7643MiB (8015MB)
         capabilities: gpt-1.00 partitioned partitioned:gpt
         configuration: guid=6c166e3e-27c9-4edf-9b0d-e21892cbce41
 *-disk
      description: ATA Disk
      product: ST2000DM008-2FR1
      physical id: 0.0.0
      bus info: scsi@1:0.0.0
      logical name: /dev/sdb
      version: 0001
      serial: xxxxxxxxxxxxxxxxxxxx
      size: 1863GiB (2TB)
      capabilities: removable
      configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096
    *-medium
         physical id: 0
         logical name: /dev/sdb
         size: 1863GiB (2TB)
 *-disk
      description: ATA Disk
      product: ST2000DM008-2FR1
      physical id: 0.0.0
      bus info: scsi@2:0.0.0
      logical name: /dev/sdc
      version: 0001
      serial: xxxxxxxxxxxxxxxxxxxx
      size: 1863GiB (2TB)
      capabilities: removable
      configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096
    *-medium
         physical id: 0
         logical name: /dev/sdc
         size: 1863GiB (2TB)
 *-disk
      description: ATA Disk
      product: WDC WD20EZBX-00A
      vendor: Western Digital
      physical id: 0.0.0
      bus info: scsi@3:0.0.0
      logical name: /dev/sdd
      version: 1A01
      serial: xxxxxxxxxxxxxxxxxxxx
      size: 1863GiB (2TB)
      capabilities: removable
      configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096
    *-medium
         physical id: 0
         logical name: /dev/sdd
         size: 1863GiB (2TB)
 *-disk
      description: ATA Disk
      product: WDC WD20EZBX-00A
      vendor: Western Digital
      physical id: 0.0.0
      bus info: scsi@4:0.0.0
      logical name: /dev/sde
      version: 1A01
      serial: xxxxxxxxxxxxxxxxxxxx
      size: 1863GiB (2TB)
      capabilities: removable
      configuration: ansiversion=5 logicalsectorsize=512 sectorsize=4096
    *-medium
         physical id: 0
         logical name: /dev/sde
         size: 1863GiB (2TB)

您在設置中看到任何可能有問題的地方嗎?您認為添加帶有 PCI 卡的 nvme 並將其用於記憶體會有所幫助嗎?

糟糕的記錄表現源於不同的因素:

  • 機械磁碟在隨機讀/寫 IO 方面非常糟糕。要發現它們有多糟糕,只需附加--sync=1到您的fio命令(簡短的故事:它們非常糟糕,至少與適當的 BBU RAID 控制器或斷電保護 SSD 相比);
  • 由於條帶讀取/修改/寫入,RAID5 具有固有的寫入損失。此外,出於安全原因,強烈建議在多 TB 機械磁碟上**避免使用它。**有4個磁碟,請認真考慮改用RAID10;
  • LUKS 提供基於軟體的全盤加密,不可避免地會在讀取和寫入方面產生(重大)損失;
  • 使用 BTRFS,LVM 是完全沒有必要的。雖然基於 LVM 的胖卷本身不會以任何有意義的方式損害性能,但您仍然會插入另一個 IO 層並將自己暴露於(更多)對齊問題;
  • 最後,BTRFS 本身並不是特別快。特別是您的慢速順序讀取可以跟踪到 BTRFS 可怕的碎片(由於它是 CoW強制執行 4K 粒度 - 作為比較,為了從 ZFS 獲得良好的性能,在使用機械磁碟時通常應該選擇 64K-128K 記錄)。

為了進行基線性能比較,我強烈建議重做 IO 堆棧,測量每一步的隨機和順序讀/寫速度。換句話說:

  • 創建一個 RAID10 陣列並在原始陣列上執行ddfio沒有文件系統);
  • 如果確實需要全盤加密,請使用 LUKS 創建加密設備並在原始加密設備上重新執行dd+ fio(同樣,沒有文件系統)。與以前的結果進行比較,以了解其在性能方面的含義;
  • 嘗試XFSBTRFS(執行通常的dd+fio快速工作台)以了解兩個不同文件系統的行為方式。如果 BTRFS 太慢,請嘗試用lvmthin和 XFS 替換它(但請記住,在這種情況下,您將失去使用者數據校驗和,為此您需要另一層 - dmintegrity - 本身對性能有很大影響)。

如果這一切看起來一團糟,那麼,確實如此。通過執行上述所有操作,您只是在降低儲存性能:必須考慮實際的應用程序行為(而不是完全順序dd或純隨機fio結果)、記憶體命中率、IO 模式對齊等。但是,很少總比沒有好,所以讓我們從一些基本的東西開始。

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