Przechowywanie bloków i wydajność
Krótkie podsumowanie
Pamięć blokowa daje surowe urządzenia (LUN/volume), na których górze budujesz FS, LVM/ZFS itp. Wydajność jest określana przez typ nośnika, protokół dostępu, kolejki i głębokość, rozmiar bloku, schemat kodowania (RAID/EC), bufory i bariery, tkaniny sieciowe i specyficzny dla aplikacji wzór I/O (losowy/sekwencyjny, czytaj/pisz, synchronizacja/async). Celem jest zapewnienie wymaganej latencji p95/p99 oraz przepustowości IOPS/z solidnością i przewidywalnością.
Taksonomia dostępu blokowego
Lokalne: NVMe (PCIe), SAS/SATA SSD/HDD. Minimalne opóźnienie, brak wąskich gardeł.
Sieć:- iSCSI (Ethernet, LUN, MPIO, ALUA).
- Kanał światłowodowy (FC) (16-64G, niskie opóźnienia, zagospodarowanie przestrzenne).
- NVMe-oF: NVMe/TCP, NVMe/RoCE, NVMe/FC - „rodzime” NVMe przez sieć, mniej napowietrzne.
- HCI/distributed (Ceph RBD, vSAN): wygodna skalowalność, ale opóźnienie jest wyższe, sieć/kodowanie jest krytyczne.
- p99 opóźnienie ≤ 1-2 ms, bardzo wysoki IOPS → lokalny NVMe/NVMe-oF.
- Stabilne „średnie” opóźnienie 2-5 ms, dojrzałe → fabryka FC lub NVMe/FC.
- Ujednolicony na Ethernet, łatwiej obsługiwać → iSCSI lub NVMe/TCP.
Protokoły i ich funkcje
iSCSI: wszechstronność, MPIO/ALUA, TCP configuration sensitive (MTU, offload, qdepth).
FC: izolacja, bezstratne przepływy, strefy WWPN, kolejki HBA i kredyty.
NVMe-oF: równoległość poprzez wiele kolejek składania/zakończenia, niskie obciążenie procesora, TLS jest możliwy dla NVMe/TCP (w razie potrzeby).
RAID/WE i Media
RAID10 - minimalna opóźnienie i przewidywalny IOPS; optymalne dla baz danych/portfeli.
RAID5/6 - lepsza pojemność, kara zapisu, krople IOPS do synchronizacji.
Erasure Coding w rozproszonych tablicach jest korzystne pod względem pojemności, ale nagrywanie jest „droższe”.
NVMe SSD - p99 top; SAS SSD - kompromis; HDD to kolejna przepustowość, ale zły przypadek.
Systemy plików i dostosowanie
XFS jest doskonałym wyborem dla dużych plików/dzienników bazy danych; konfigurowalne 'agcount',' czas rzeczywisty 'dla dzienników.
ext4 - wszechstronny, starannie do 'stride/stripe _ width' dla RAID.
ZFS - CoW, kontrola integralności, migawki/repliki, ARC/ZIL/SLOG; do synchronizacji ładunków - SLOG na NVMe z PLP.
Ustawienie: 1MiB-aligned partycje, poprawne 'recordsize '/' blocksize' pod obciążeniem.
Kolejki, głębokość i rozmiar bloku
IOPS rośnie wraz z głębokością kolejki, ale tak samo jest opóźnienie; cel - QD, który daje wymagane IOPS podczas kontroli p95/p99.
Rozmiar bloku: mały (4-16K) - więcej IOPS, gorsza przepustowość; duża (128K-1M) - lepsza prędkość od końca do końca.
NVMe qpairs: przydzielić według rdzeni/NUMA; iSCSI/FC: qdepth HBA/inicjatorzy, polityka MPIO.
Bariery i FUA: uwzględnione bariery odpisowe zwiększają niezawodność, ale zwiększają p99; Przesunięcie SLOG/PLP.
Wielokrotność i dostępność
MPIO/DM-Multipath: agregacja ścieżki, tolerancja uszkodzeń.
Politycy: „round-robin” (bilans), „queue-length” (smarter), „failover” (asset-liability).
ALUA „preferowane” ścieżki do aktywnego kontrolera.
Ważne: 'no _ path _ retry', 'queue _ if _ no _ path' - ostrożnie, aby nie zamrażać I/O przez długie minuty.
Strefa FC: „jedna strefa inicjatora - jeden cel” (zmniejsza promień wybuchu).
NVMe-oF: ANA (Asymmetric Namespace Access) - аналоz ALUA.
TRIM/Odrzut i buforowanie
TRIM/Discard uwalnia bloki SSD (obniża wzmacniacz zapisu, stabilizuje opóźnienie). Włączać regularnie (cron) lub odrzut online, w stosownych przypadkach.
Czytanie z przodu jest przydatne do kolejnych odczytów; jest szkodliwy przypadkowo.
Pamięci podręczne kontrolera odpisu - tylko z BBU/PLP; w przeciwnym razie ryzyko utraty danych.
Stack sieciowy (dla iSCSI/NVMe-TCP)
Oddzielny VLAN/VRF dla fabryki SRF; odizolowanie od ruchu klienckiego.
9000 MTU końcowe; RSS/RPS i IRQ szpilki do NUMA.
QoS/priorytet dla RoCE (jeśli nie ma straty), ECN/RED dla szczytów TCP.
Dwa niezależne tłuszcz do storaj (podwójne TOR, różne zasilacze).
Linux/Host Tuning (Sample)
bash
Scheduler for NVMe echo none sudo tee /sys/block/nvme0n1/queue/scheduler echo 1024 sudo tee /sys/block/nvme0n1/queue/nr_requests echo 0 sudo tee /sys/block/nvme0n1/queue/add_random echo 0 sudo tee /sys/block/nvme0n1/queue/iostats
Read-ahead (sequential loads)
blockdev --setra 4096 /dev/nvme0n1
iSCSI: example of aggressive timeouts and retries iscsiadm -m node --op update -n node. session. timeo. replacement_timeout -v 10 iscsiadm -m node --op update -n node. conn[0].timeo. noop_out_interval -v 5 iscsiadm -m node --op update -n node. conn[0].timeo. noop_out_timeout -v 5
Multipath (fragment 'multipath. conf "):
conf defaults {
find_multipaths yes polling_interval 5 no_path_retry 12
}
devices {
device {
vendor "PURE DELL NETAPP HITACHI"
path_checker tur features "1 queue_if_no_path"
path_grouping_policy group_by_prio prio alua
}
}
Benchmarking i profilowanie
fio - minimalny zestaw profili:bash
Random read 4K, queue 32, 4 threads fio --name = randread --filename =/dev/nvme0n1 --direct = 1 --rw = randread\
--bs=4k --iodepth=32 --numjobs=4 --time_based --runtime=60
Random 4K entry (sync), log loads fio --name = randwrite --rw = randwrite --bs = 4k --iodepth = 16 --numjobs = 4\
--fsync=1 --direct=1 --runtime=60
Large block sequential recording (backups/dumps)
fio --name=seqwrite --rw=write --bs=1M --iodepth=64 --numjobs=2 --runtime=60
Wskazówki:
- Oddzielne ogrzewanie i pomiar, zapisać temperaturę/thermal throttling.
- Test na LUN/objętość, nie FS (jeśli celem jest surowy sprzęt).
- Środek p95/p99 opóźnienie i 99. 9% ogon - to oni „zabijają” bazę danych.
Monitorowanie i SLO
Metryka:- Latency p50/p95/p99 (read/write), IOPS, przepustowość, głębokość kolejki, urządzenie zajęte%, połączenia, odrzut.
- Na poziomie sieci: krople, retransmity, znaki ECN, błędy interfejsu.
- Na poziomie tablicy: opóźnienie replikacji, przebudowa/progress resolver, write-amp, SSD poziomu zużycia.
- LUN МOZ (OLTP): p99 napisz ≤ 1. 5ms, p99 odczytać ≤ 1. 0 ms, dostępność ≥ 99. 95%.
- Dzienniki: p95 dodatek ≤ 2. 5 ms, szerokość pasma ≥ 400 MB/s na objętość.
- Kopie zapasowe: sekunda zapisu ≥ 1 GB/s (zagregowane), regeneracja RTO ≤ 15 minut.
- p99 opóźnienie> próg N minut, degradacja IOPS z tym samym QD, wzrost odczytu modyfikacji zapisu w RAID5/6, przegrzanie/przepustnica termiczna SSD, rozpoczęte/utkane żebra.
Kubernetes бCSI
Klasa PVC/ : parametry „ReglaimPolicy”, „Tryb = WaitForلConsumer” (prawidłowa lokalizacja), „PermItable Expansion”.
Wtyczki CSI dostawcy: migawki/klony, zasady QoS/performance, topologia głośności.
• Tryby: RWO dla bazy danych/stanu, RWX - ostrożnie (zazwyczaj przez plik/sieć).
Topologia/Powinowactwo: podkładki do węzłów obok przechowywania (niskie opóźnienie).
Ważne: HPA/VPA nie „wyleczy” złego napędu; Planowanie woluminów SLO, wykorzystanie budżetu PodDis dla sieci stanowych.
Migawki, klony, grupy konsystencji
Migawki są szybkie, ale możliwe są niespójności bazy danych.
Spójność aplikacji - poprzez skrypty ciszy (fsfreeze, pre/post haki DB).
Grupa spójności (CG) - dla kilku jednostek LUN (systemy transakcyjne) w tym samym czasie.
Klony są szybkimi środowiskami dev/testowymi bez kopiowania.
Bezpieczeństwo i zgodność
iSCSI CHAP/Mutual CHAP, izolacja VLAN/VRF.
NVMe/TCP z TLS - dla scenariuszy cross-center/multi-lease.
Szyfrowanie „w spoczynku”: LUKS/dm-crypt, dyski szyfrujące (TCG Opal), klucze w KMS.
Audyt: kto odwzorował LUN, zmianę strefy FC, zmiany wielokrotności.
DR i operacje
Replika synchroniczna (RPO ≤ 0) - zwiększa opóźnienie, krótkie odległości.
Asynchroniczny (RPO = N min) - odległość geograficzna, dopuszczalna dla większości baz danych z dziennikami.
Książki startowe: utrata ścieżki MPIO, utrata kontrolera, odbudowa dysku, degradacja puli, przełącznik strony.
Okna serwisowe: kontrolery „rolling”, granice rebield, aby nie jeść prod.
FinOps (koszt za wydajność)
$/IOPS i $/ms p99 są bardziej przydatne „$/TB” dla OLTP.
Wielopoziomowy: gorący OLTP - NVMe/RAID10; raporty/archiwum - HDD/EC.
Rezerwy i amortyzacja: Plan 30-50% wzrostu IOPS; przechowywać zapasy w trakcie odbudowy/szorowania.
Egress/fabryka: oddzielny budżet na sieć magazynową i aktualizacje HBA/NIC.
Lista kontrolna implementacji
- Protokół (NVMe-oF/FC/iSCSI) i wybrana tkanina izolowana.
- Zaprojektowano pule typu RAID/EC i obciążenia (OLTP/log/backup).
- Skonfigurowane MPIO/ALUA/ANA i timeouts; sprawdzone awaryjne/przywracanie.
- Ustawienie FS/RAID, TRIM/Discard włączone zgodnie z regulacją.
- Dostrajanie kolejki/qdepth/czytanie; walidowane przez profile fio (randread/write 4k, seq 1M).
- Monitorowanie dysku/ścieżki/opóźnienia p95/p99, wpisy do przebudowy i przepustnicy.
- Migawki (spójne z aplikacją) i CG; DR/test odzysku.
- Szyfrowanie i CHAP/TLS; Klucze w audycie KMS operacji.
- Parametry Kubernetes/CSI, topologia i QoS na tom.
Częste błędy
Jedna ścieżka bez MPIO → pojedynczy punkt awarii.
RAID5/6 pod sync-write OLTP → high p99 napisz.
Brak TRIM → wzrost write-amp i degradacja SSD.
QD jest zbyt duży → „piękny” IOPS i straszny ogon dla bazy danych.
Odrzut online na „gorące” woluminy z OLTP → skoki opóźnienia.
'queue _ if _ no _ path' without timeout → 'zamrożone' usługi w przypadku katastrofy.
Mieszanie NVMe i HDD w tym samym basenie → nieprzewidywalne opóźnienia.
iGaming/specyficzne dla fintechu
Portfel/bazy danych transakcyjnych: NVMe + RAID10, dziennik synchroniczny na oddzielnym SLOG/NVMe, p99 zapisz ≤ 1. 5 ms, migawki CG.
Kolejki płatności/przeciwdziałanie oszustwom: dzienniki szeregowe → duże bloki, duża przepustowość, oddzielne jednostki LUN dla dziennika i danych.
Szczyt TPS (turnieje/mecze): pamięci podręczne przed ciepłą bazą danych, pomieszczenie głowy ≥ 30%, regulacja przepustnicy termicznej, szybkość spalania SLO.
Regulacja: szyfrowanie LUN, mapowanie dziennika audytu, ćwiczenia DR, raportowanie RPO/RTO.
Razem
Produktywne przechowywanie bloków jest prawidłowym protokołem + poprawnie skonfigurowane kolejki i qdepth + odpowiedni RAID/EC + pamięć podręczna/dyscyplina bariery + wyizolowana tkanina. Pin wszystko w książkach startowych, mierzyć p95/p99, walidować profilami fio, automatyzować migawki i DR - i uzyskać przewidywalne opóźnienia i IOPS potrzebne do krytycznych ścieżek przepływu produktów i środków pieniężnych.