Điểm:2

Cách tăng tốc RAID 5 bằng mdadm + luks + lvm

lá cờ cn

Tôi nghĩ rằng tôi hơi lạc lõng với thiết lập máy chủ hiện tại của mình. Đó là một chiếc HP Proliant dl160 gen 6, và tôi đã đặt 4 đĩa quay với thiết lập có mdmadm + luks + lvm và trên đó là btrfs (có lẽ tôi đã đi quá xa?) 50MB/s và ghi khoảng 2MB/s và tôi có cảm giác rằng mình đã làm hỏng thứ gì đó.

Một trong những điều tôi lưu ý là tôi đã thiết lập mdadm trên thiết bị khối (sbd) chứ không phải trên phân vùng (sdb1), điều đó có ảnh hưởng gì không?

Ở đây bạn có thể thấy đầu ra của fio fio --name=randwrite --rw=randwrite --direct=1 --bs=16k --numjobs=128 --size=200M --runtime=60 --group_reporting khi gần như không sử dụng máy.

randwrite: (groupid=0, jobs=128): err= 0: pid=54290: Thứ ba ngày 26 tháng 10 16:21:50 năm 2021
  viết: IOPS=137, BW=2193KiB/s (2246kB/s)(131MiB/61080msec); 0 vùng đặt lại
    clat (msec): min=180, max=2784, avg=924,48, stdev=318,02
     lat (msec): min=180, max=2784, avg=924,48, stdev=318,02
    phần trăm clat (msec):
     | Thứ 1.00=[ 405], thứ 5.00=[ 542], thứ 10.00=[ 600], thứ 20.00=[ 693],
     | Thứ 30,00=[ 760], thứ 40,00=[ 818], thứ 50,00=[ 860], thứ 60,00=[ 927],
     | Thứ 70,00=[ 1011], 80,00=[ 1133], 90,00=[ 1267], 95,00=[ 1452],
     | Thứ 99,00=[ 2165], 99,50=[ 2232], 99,90=[ 2635], 99,95=[ 2769],
     | 99,99th=[ 2769]
   bw (KiB/s): tối thiểu= 3972, tối đa= 4735, mỗi=100,00%, trung bình=4097,79, stdev= 1,58, mẫu=8224
   iops: tối thiểu = 132, tối đa = 295, trung bình = 248,40, stdev = 0,26, mẫu = 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
  Độ sâu IO: 1=100,0%, 2=0,0%, 4=0,0%, 8=0,0%, 16=0,0%, 32=0,0%, >=64=0,0%
     gửi : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     hoàn thành : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     rwts đã phát hành: tổng=0,8372,0,0 ngắn=0,0,0,0 giảm=0,0,0,0
     độ trễ: mục tiêu = 0, cửa sổ = 0, phần trăm = 100,00%, độ sâu = 1

Chạy trạng thái nhóm 0 (tất cả công việc):
  VIẾT: bw=2193KiB/s (2246kB/s), 2193KiB/s-2193KiB/s (2246kB/s-2246kB/s), io=131MiB (137MB), chạy=61080-61080msec

Cập nhật 1 lần ghi tuần tự với dd

root@hp-proliant-dl160-g6-1:~# dd if=/dev/zero of=disk-test oflag=direct bs=512k count=100
100+0 bản ghi trong 100+0 bản ghi ra 52428800 byte (52 MB, 50 MiB) được sao chép, 5,81511 giây, 9,0 MB/s

Hạt nhân: 5.4.0-89-chung

Hệ điều hành: Ubuntu 20.04.3

mdadm: 4.1-5ubuntu1.2

lvm2: 2.03.07-1ubuntu1

đầu ra 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-e29b12e"4
/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"

mèo /proc/mdstat

Tính cách : [raid6] [raid5] [raid4] [tuyến tính] [đa đường] [raid0] [raid1] [raid10]
md0 : kích hoạt đột kích5 sdb[0] sdc[1] sdd[2] sde[4]
      5860147200 khối siêu 1,2 cấp 5, khối 512k, thuật toán 2 [4/4] [UUUU]
      bitmap: 2/15 trang [8KB], khối 65536KB

thiết bị không sử dụng: <none>

đĩa lshw -c

  *-đĩa
       mô tả: Đĩa SCSI
       sản phẩm: DT 101 G2
       nhà cung cấp:Kingston
       id vật lý: 0.0.0
       thông tin xe buýt: scsi@0:0.0.0
       tên logic: /dev/sda
       phiên bản: 1.00
       nối tiếp: xxxxxxxxxxxxxxxxxxxx
       kích thước: 7643MiB (8015MB)
       khả năng: có thể tháo rời
       cấu hình: ansiversion=4 logicsectorsize=512 sectorize=512
     *-Trung bình
          id vật lý: 0
          tên logic: /dev/sda
          kích thước: 7643MiB (8015MB)
          khả năng: gpt-1.00 được phân vùng được phân vùng:gpt
          cấu hình: hướng dẫn=6c166e3e-27c9-4edf-9b0d-e21892cbce41
  *-đĩa
       mô tả: Đĩa ATA
       sản phẩm: ST2000DM008-2FR1
       id vật lý: 0.0.0
       thông tin xe buýt: scsi@1:0.0.0
       tên logic: /dev/sdb
       phiên bản: 0001
       nối tiếp: xxxxxxxxxxxxxxxxxxxx
       kích thước: 1863GiB (2TB)
       khả năng: có thể tháo rời
       cấu hình: ansiversion=5 logicsectorsize=512 sectorize=4096
     *-Trung bình
          id vật lý: 0
          tên logic: /dev/sdb
          kích thước: 1863GiB (2TB)
  *-đĩa
       mô tả: Đĩa ATA
       sản phẩm: ST2000DM008-2FR1
       id vật lý: 0.0.0
       thông tin xe buýt: scsi@2:0.0.0
       tên logic: /dev/sdc
       phiên bản: 0001
       nối tiếp: xxxxxxxxxxxxxxxxxxxx
       kích thước: 1863GiB (2TB)
       khả năng: có thể tháo rời
       cấu hình: ansiversion=5 logicsectorsize=512 sectorize=4096
     *-Trung bình
          id vật lý: 0
          tên logic: /dev/sdc
          kích thước: 1863GiB (2TB)
  *-đĩa
       mô tả: Đĩa ATA
       sản phẩm: WDC WD20EZBX-00A
       Nhà cung cấp: Western Digital
       id vật lý: 0.0.0
       thông tin xe buýt: scsi@3:0.0.0
       tên logic: /dev/sdd
       phiên bản: 1A01
       nối tiếp: xxxxxxxxxxxxxxxxxxxx
       kích thước: 1863GiB (2TB)
       khả năng: có thể tháo rời
       cấu hình: ansiversion=5 logicsectorsize=512 sectorize=4096
     *-Trung bình
          id vật lý: 0
          tên logic: /dev/sdd
          kích thước: 1863GiB (2TB)
  *-đĩa
       mô tả: Đĩa ATA
       sản phẩm: WDC WD20EZBX-00A
       Nhà cung cấp: Western Digital
       id vật lý: 0.0.0
       thông tin xe buýt: scsi@4:0.0.0
       tên logic: /dev/sde
       phiên bản: 1A01
       nối tiếp: xxxxxxxxxxxxxxxxxxxx
       kích thước: 1863GiB (2TB)
       khả năng: có thể tháo rời
       cấu hình: ansiversion=5 logicsectorsize=512 sectorize=4096
     *-Trung bình
          id vật lý: 0
          tên logic: /dev/sde
          kích thước: 1863GiB (2TB)

Bạn có thấy bất cứ điều gì có thể sai trong thiết lập? Bạn có nghĩ rằng việc thêm một nvme bằng thẻ PCI và sử dụng nó để lưu vào bộ đệm sẽ hữu ích không?

lá cờ us
Bạn không nên sử dụng RAID5 nếu bạn muốn độ tin cậy. Khi một ổ đĩa bị hỏng, khả năng ổ đĩa thứ hai bị hỏng trong quá trình phục hồi là khá cao. Khi ổ đĩa thứ hai bị hỏng, tất cả dữ liệu của bạn sẽ bị mất.
lá cờ br
+1 cho Tero - R5 về cơ bản đã chết hơn một thập kỷ nay - bạn bè không cho phép bạn bè sử dụng R5 :)
lá cờ cn
Xin chào các bạn, bạn sẽ đề xuất điều gì để truy cập nhanh hơn, kích thước lớn hơn mà vẫn dư thừa? Tôi sẵn sàng dùng 1 ổ cứng để có 6TB mà vẫn an toàn
Điểm:1
lá cờ ng

Phiên bản ngắn: Tôi nghĩ có khả năng vấn đề của bạn là điểm chuẩn của bạn đang sử dụng ghi ngẫu nhiên nhỏ hơn nhiều so với kích thước khối RAID của bạn.

Bạn có nhận thấy vấn đề về hiệu suất khi sử dụng hệ thống không? Hoặc, chỉ là kết quả điểm chuẩn có vẻ xấu? Điểm chuẩn ghi ngẫu nhiên 16K đó đang tiến gần đến trường hợp xấu nhất đối với RAID 5 với khối lớn 512K.

RAID 5 có một khối chẵn lẻ phải được cập nhật cùng với dữ liệu. Nếu bạn có một khối lượng công việc tuần tự mà hạt nhân có thể chia nhỏ thành 512K bản ghi, thì bạn chỉ cần tính toán thông tin chẵn lẻ mới, sau đó ghi khối dữ liệu và khối chẵn lẻ ra. Một ghi vào chuyển thành hai viết ra.

Nhưng với 16K ghi nhỏ hơn nhiều so với kích thước khối, trước tiên bạn phải đọc dữ liệu cũ và tính chẵn lẻ cũ, sau đó tính toán thông tin chẵn lẻ mới, sau đó ghi dữ liệu mới và tính chẵn lẻ. Đó là đọc-đọc-ghi-ghi. Một lần viết dịch thành bốn I/O. Với việc ghi ngẫu nhiên, không có cách nào để ngay cả bộ điều khiển RAID tốt nhất trên hành tinh dự đoán khối nào sẽ được lưu vào bộ đệm.

Nếu bạn đang sử dụng mảng để lưu trữ các tệp lớn, thì bạn thật may mắn: bạn chỉ đang sử dụng điểm chuẩn sai để đánh giá hiệu suất của nó. Nếu bạn thay đổi viết vội đơn giản là viết trong điểm chuẩn của bạn để việc ghi diễn ra tuần tự, nó sẽ tốt hơn rất nhiều!

Nhưng nếu khối lượng công việc của bạn thực sự được tạo thành từ các ghi nhỏ, ngẫu nhiên hơn, thì bạn sẽ phải thay đổi điều gì đó về mảng. Bạn sẽ được phục vụ tốt hơn bởi RAID 10 4 đĩa. Tuy nhiên, đó vẫn là phương tiện quay vòng. Nó sẽ không khuấy động thế giới của bạn. Tôi tưởng tượng rằng hiệu suất của RAID 10 phải gấp 2 đến 3 lần so với những gì bạn hiện có, chẳng hạn như 275 đến 400 IOPS, có thể là 4MiB/s đến 6MiB/s trên điểm chuẩn đó?

Đối với việc sử dụng SSD để lưu vào bộ đệm, có lẽ với thứ gì đó như bcache, bạn sẽ loại bỏ được sự dư thừa của mình. Cân nhắc sử dụng RAID 1 của hai ổ SSD để lưu vào bộ nhớ đệm? Bạn chắc chắn không cần NVMe ở đây, với tốc độ của những ổ đĩa này. SATA sẽ ổn thôi.

(BTW, đừng đổ mồ hôi phân vùng so với thiết bị thô. Nó không tạo ra sự khác biệt. Cá nhân tôi không sử dụng phân vùng.)

lá cờ cn
Xin chào Mike, cảm ơn bạn rất nhiều vì câu trả lời của bạn! Tôi nhận thấy vấn đề về hiệu suất trong khi sử dụng hệ thống. Đầu tiên, tôi đã thực hiện một bài kiểm tra dd đơn giản bằng cách ghi tuần tự 0 và vẫn không bằng tốc độ của sata đó. Vì vậy, chỉ để cho bạn thấy tôi đã làm lại nó và sử dụng trang web chặn của cuộc đột kích để bạn có thể thấy nó diễn ra như thế nào ``` root@hp-proliant-dl160-g6-1:~# dd if=/dev/zero of=disk-test oflag=direct bs=512k count=100 100+0 hồ sơ trong 100+0 bản ghi ra Đã sao chép 52428800 byte (52 MB, 50 MiB), 5,81511 giây, 9,0 MB/giây ``` Tôi muốn có Raid 5 để có thể sử dụng nhiều spc hơn và vẫn an toàn trong trường hợp thất bại
Nikita Kipriyanov avatar
lá cờ za
... có thể dễ dàng khôi phục sự dư thừa của bộ nhớ cache SSD bằng cách sử dụng *hai* SSD, tạo một mảng RAID1 từ chúng và sử dụng *mảng đó* làm thiết bị lưu trữ.
Mike Andrews avatar
lá cờ ng
@JaysonReis, ồ... chậm quá. Một vài ý tưởng: đầu tiên, chỉ để kiểm tra độ tỉnh táo, loại trừ khả năng các ổ đĩa đã ngừng hoạt động. Khi bạn thực hiện bài kiểm tra đó, hãy thử `dd`, rồi lặp lại ngay sau đó. Lấy thời gian từ lần chạy thứ 2. Ngoài ra, những gì @shodanshok mô tả bên dưới là lời khuyên hữu ích: Lập cấu hình RAID trực tiếp, sau đó thêm các lớp. Xem liệu bạn có thể tìm ra lớp nào đang gây ra sự cố không.
Điểm:1
lá cờ ca

Những màn trình diễn tệ hại được ghi nhận bắt nguồn từ các yếu tố khác nhau:

  • đĩa cơ đơn giản là rất tệ ở IO đọc/ghi ngẫu nhiên. Khám phá Ôi thật tồi tệ chúng có thể, chỉ cần nối thêm --sync=1 cho bạn fio mệnh lệnh (truyện ngắn: họ là vô cùng tệ, ít nhất là khi so sánh với bộ điều khiển RAID BBU thích hợp hoặc ổ SSD được bảo vệ chống mất điện);

  • RAID5 có hình phạt ghi cố hữu do đọc/sửa đổi/ghi sọc. Hơn nữa nó được đề nghị mạnh mẽ để ngăn ngừa nó trên đĩa cơ học nhiều TB vì lý do an toàn. Có 4 đĩa, thay vào đó hãy cân nhắc nghiêm túc việc sử dụng RAID10;

  • LUKS, cung cấp mã hóa toàn bộ đĩa dựa trên phần mềm, chắc chắn phải trả phí (đáng kể) cho cả đọc và ghi;

  • sử dụng BTRFS, LVM là hoàn toàn không cần thiết. Mặc dù bản thân ổ đĩa dựa trên LVM béo sẽ không làm giảm hiệu suất theo bất kỳ cách có ý nghĩa nào, nhưng bạn vẫn đang chèn một lớp IO khác và khiến bản thân gặp phải (nhiều) vấn đề căn chỉnh hơn;

  • cuối cùng, bản thân BTRFS không đặc biệt nhanh. Đặc biệt, các lần đọc tuần tự chậm của bạn có thể được theo dõi để phân mảnh khủng khiếp BTRFS (do nó là CoW thực thi độ chi tiết 4K - để so sánh, để có được hiệu suất tốt từ ZFS, người ta thường nên chọn các bản ghi 64K-128K khi sử dụng đĩa cơ học).

Để so sánh hiệu suất cơ bản, tôi thực sự khuyên bạn nên làm lại ngăn xếp IO của mình để đo tốc độ đọc/ghi ngẫu nhiên và tuần tự ở mỗi bước. Nói cách khác:

  • tạo một mảng RAID10 và chạy đfio trên mảng thô (không có hệ thống tập tin);

  • nếu thực sự cần mã hóa toàn bộ đĩa, hãy sử dụng LUKS để tạo thiết bị được mã hóa và chạy lại đ + fio trên thiết bị được mã hóa thô (một lần nữa, không có hệ thống tệp). So sánh với các kết quả trước đó để có ý tưởng về ý nghĩa của nó đối với hiệu suất;

  • cố gắng cả hai XFS và BTRFS (chạy thông thường đ + fio quick bench) để hiểu cách hoạt động của hai hệ thống tập tin khác nhau. Nếu BTRFS quá chậm, hãy thử thay thế nó bằng lvmthin và XFS (nhưng hãy nhớ rằng trong trường hợp này, bạn sẽ mất tổng kiểm tra dữ liệu người dùng, mà bạn cần thêm một lớp nữa - sự toàn vẹn - chính nó chỉ huy một thành công hiệu suất đáng kể).

Nếu tất cả điều này có vẻ là một mớ hỗn độn, thì, nó thực sự là như vậy. Bằng cách thực hiện tất cả những điều trên, bạn chỉ đang làm trầy xước hiệu suất lưu trữ: người ta phải xem xét hành vi ứng dụng thực (chứ không phải hoàn toàn tuần tự đ hoặc ngẫu nhiên thuần túy fio kết quả), tỷ lệ truy cập bộ đệm, căn chỉnh mẫu IO, v.v. Nhưng này - một vài tốt hơn nhiều so với không có gì, vì vậy hãy bắt đầu với một cái gì đó cơ bản.

lá cờ cn
Vì vậy, bạn sẽ nói gì về việc có luks sau đó lvm với ext4 cũ đơn giản và loại bỏ tất cả sự huyền ảo, liệu nó có tốt hơn khi viết và đọc theo trình tự không? Tôi có một vài ứng dụng sử dụng cơ sở dữ liệu sqlite và cũng ghi các tệp siêu dữ liệu cục bộ: chẳng hạn như radarr, sonarr, readarr và plex, nhưng tất cả các lần đọc này khiến toàn bộ hệ thống bị ảnh hưởng rất nhiều. Tôi cũng gặp nhiều khó khăn khi chạy các lệnh như kubectl get pod vì nó tạo ra nhiều tệp nhỏ để lưu vào bộ nhớ đệm, vì vậy, đối với điều này, tôi chỉ gắn một tmpfs vào thư mục đó nhưng thực tế, vì vậy cuối cùng tôi sẽ hết bộ nhớ ngay cả khi làm việc với loại này không lâu
lá cờ cn
Ý tôi là, tôi không biết tại sao tôi lại sử dụng lvm, trước đây tôi đã sử dụng luks với mdadm và ext 4
shodanshok avatar
lá cờ ca
không có LVM, bạn sẽ mất các ảnh chụp nhanh cấp khối; nếu hệ thống tệp của bạn không hỗ trợ chúng (ví dụ: ext3/4, xfs, v.v.), bạn sẽ không thể chụp bất kỳ ảnh chụp nhanh nào. Chỉ bạn mới có thể đánh giá liệu/có bao nhiêu ảnh chụp nhanh bị mất là quan trọng (hoặc không). Mặt khác, btrfs có ảnh chụp nhanh tích hợp nên không cần LVM, nhưng tôi thấy hiệu suất của nó khá thấp đối với bất kỳ thứ gì khác với máy chủ tệp đơn giản.
lá cờ cn
Cám ơn rất nhiều! Tôi đã đổi nó thành đột kích 10 và sử dụng luks + lvm + ext và nó đạt 150MB/s khi ghi

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.