Proxmox Ceph OSD oznaczony out: dlaczego recovery jest wolne i jak je przyspieszyć
Przyspieszenie recovery Ceph w Proxmox, gdy OSD jest oznaczony out i backfill PG pełza mimo dostępnej przepustowości dysków.
out. Recovery ruszyło, ale pełza z prędkością 10-50 MB/s mimo dysków NVMe zdolnych do gigabajtów na sekundę. Klaster działa w trybie zdegradowanym dłużej niż powinien. Oto jak to odblokować.
Jeśli potrzebujesz szerszego doradztwa w architekturze prywatnej chmury, zobacz naszą stronę konsulting chmurowy. Jeśli uruchamiasz Kubernetes na Proxmox, nasze case study Kubernetes na Proxmox pokrywa pełny projekt warstwy storage.
Objawy
Ceph pokazuje zdegradowane PG, a recovery jest aktywne, ale ekstremalnie wolne:
# Sprawdź health klastra
ceph health detail
# HEALTH_WARN 1 osds down; Degraded data redundancy: 847/25410 objects degraded
# Sprawdź prędkość recovery
ceph -s
# recovery: 12 MiB/s, 3 objects/s
# OSD jest oznaczony out
ceph osd tree | grep -i down
# 4 hdd 3.63000 osd.4 down 0 1.00000
# Status PG pokazuje backfilling
ceph pg stat
# 256 pgs: 241 active+clean, 15 active+recovering+degraded
Recovery powinno zakończyć się w minuty na nowoczesnym sprzęcie, ale zamiast tego trwa godzinami. Klaster pozostaje w stanie HEALTH_WARN, co oznacza, że każda kolejna awaria dysku w tym oknie grozi utratą danych.
Przyczyna
Ceph celowo ogranicza ruch recovery, żeby nie zagłodzić I/O klientów. Domyślne ustawienia są konserwatywne:
osd_recovery_max_activedomyślnie 3 (tylko 3 równoległe operacje recovery per OSD)osd_recovery_sleepdomyślnie 0 (ale niektóre dystrybucje ustawiają 0.1s)osd_max_backfillsdomyślnie 1 (tylko 1 operacja backfill per OSD jednocześnie)osd_recovery_op_priorityjest niższy niż priorytet operacji klienckich
Te domyślne wartości są rozsądne dla klastrów HDD pod ciężkim ruchem klienckim. Na klastrach NVMe lub SSD, albo podczas okien serwisowych z niskim ruchem klientów, są zbyt konserwatywne i wydłużają okno degradacji.
Dodatkowo domyślne wdrożenie Ceph w Proxmox dziedziczy te wartości bez dostrojenia do faktycznego sprzętu.
Rozwiązanie
Krok 1: Sprawdź obecne parametry recovery
# Sprawdź aktywne ustawienia recovery
ceph config get osd osd_recovery_max_active
ceph config get osd osd_max_backfills
ceph config get osd osd_recovery_sleep
ceph config get osd osd_recovery_op_priority
Krok 2: Tymczasowo zwiększ przepustowość recovery
Dla klastrów NVMe/SSD podczas okna serwisowego lub niskiego ruchu:
# Zwiększ liczbę równoległych operacji recovery
ceph config set osd osd_recovery_max_active 5
# Pozwól na więcej jednoczesnych backfilli
ceph config set osd osd_max_backfills 3
# Usuń sztuczny sleep między operacjami recovery
ceph config set osd osd_recovery_sleep 0
# Podnieś priorytet recovery (63 = równy z operacjami klienckimi)
ceph config set osd osd_recovery_op_priority 63
Dla klastrów HDD (niższe wartości):
ceph config set osd osd_recovery_max_active 3
ceph config set osd osd_max_backfills 2
ceph config set osd osd_recovery_sleep 0.05
Krok 3: Monitoruj postęp recovery
# Obserwuj prędkość recovery w czasie rzeczywistym
watch -n 5 'ceph -s | grep -E "recovery|degraded|misplaced"'
# Oczekiwane: prędkość recovery powinna znacząco wzrosnąć
# Klaster NVMe: 200-500 MiB/s
# Klaster SSD: 100-300 MiB/s
# Klaster HDD: 50-150 MiB/s
Krok 4: Przywróć domyślne wartości po zakończeniu recovery
Gdy klaster wróci do HEALTH_OK:
# Resetuj do bezpiecznych wartości domyślnych
ceph config rm osd osd_recovery_max_active
ceph config rm osd osd_max_backfills
ceph config rm osd osd_recovery_sleep
ceph config rm osd osd_recovery_op_priority
Krok 5: Jeśli OSD powinien wrócić online (dysk jest sprawny)
Jeśli dysk jest w porządku i OSD po prostu się wysypał tymczasowo:
# Uruchom OSD (na węźle Proxmox, gdzie się znajduje)
systemctl start ceph-osd@4
# Oznacz jako in (jeśli nie został oznaczony automatycznie)
ceph osd in osd.4
# Zweryfikuj, że dołączył
ceph osd tree | grep osd.4
Stałe dostrojenie dla klastrów NVMe:
Jeśli Twój klaster jest w pełni NVMe i chcesz szybszego recovery jako domyślną:
# Ustaw jako trwałą konfigurację (przeżywa restarty)
ceph config set osd osd_recovery_max_active 5 --force
ceph config set osd osd_max_backfills 3 --force
Lub w GUI Proxmox: Datacenter → Ceph → Configuration → OSD → ustaw parametry.
Weryfikacja
# 1. Zweryfikuj, że health klastra jest przywrócony
ceph health
# Oczekiwane: HEALTH_OK
# 2. Zweryfikuj brak zdegradowanych PG
ceph pg stat
# Oczekiwane: wszystkie PG "active+clean"
# 3. Zweryfikuj, że wszystkie OSD są up i in
ceph osd tree | grep -c "up"
# Oczekiwane: zgadza się z całkowitą liczbą OSD
# 4. Zweryfikuj, że ustawienia recovery wróciły do domyślnych
ceph config get osd osd_recovery_max_active
# Oczekiwane: 3 (domyślne)
# 5. Sprawdź brak slow requests podczas recovery
ceph daemon osd.0 perf dump | jq '.osd.op_latency.avgcount'
# Oczekiwane: brak anormalnego skoku w czasie odpowiedzi (latency) operacji klienckich
Jeśli ceph health pokazuje HEALTH_OK i wszystkie PG są active+clean, recovery jest zakończone. Klaster wrócił do pełnej redundancji.
Zdegradowany klaster Ceph jest jedną awarią dysku od utraty danych. Domyślne ograniczanie recovery wydłuża to okno ryzyka z minut do godzin na nowoczesnym sprzęcie. Dla klastrów produkcyjnych dostrojenie parametrów recovery do faktycznej wydajności dysków to różnica między 15-minutowym HEALTH_WARN a całonocnym oknem, w którym druga awaria oznacza dzwonienie do dostawcy backupów.
Prowadzisz Proxmox + Ceph na produkcji?
Umów bezpłatną 30-minutową rozmowę. Projektujemy i utrzymujemy klastry Proxmox z Ceph dostrojonym do Twojego sprzętu i profilu workload.