J’ai eu ce problème plusieurs fois, après avoir remplacé un noeud OSD, que les données ne se resynchronisent pas suffisamment vite sur mon petit cluster de 3 noeuds sur des VMs. 50 Go de données mettaient plusieurs jours à se synchroniser sur le nouveau noeud !
Après plusieurs recherches sur internet, tous les sites conseillent toujours de modifier les mêmes paramètres. Mais je suis tombé sur cet article :
https://blog.nuvotex.de/ceph-osd-restore-performance/
Les 3 premiers paramètres sont ceux référencés partout. Les 3 derniers par contre, je ne les avais pas vus avant. J’ai donc appliqué les valeurs données :
ceph tell 'osd.*' injectargs '--osd-max-backfills 64'
ceph tell 'osd.*' injectargs '--osd-recovery-max-active 16'
ceph tell 'osd.*' injectargs '--osd-recovery-op-priority 3'
ceph tell 'osd.*' config set osd_recovery_sleep_hdd 0
ceph tell 'osd.*' config set osd_recovery_sleep_ssd 0
ceph tell 'osd.*' config set osd_recovery_sleep_hybrid 0
Et paf! la resynchro a pris moins de 2 h. Much better !
A noter que je ne me suis pas inquiété de l’impact sur les services utilisant le partage, la priorité étant de resynchroniser le plus vite possible. Donc les paramètres sont à adapter selon les besoins.
Après ça, on remet les valeurs par défaut :
ceph config rm osd osd_max_backfills
ceph config rm osd osd_recovery_max_active
ceph config rm osd osd_recovery_op_priority
ceph config rm osd osd_recovery_sleep_hdd
ceph config rm osd osd_recovery_sleep_ssd
ceph config rm osd osd_recovery_sleep_hybrid
And that’s all !