Gli OSD di Ceph crashano per mancanza di memoria con oomkill

From RVM Wiki
Jump to navigation Jump to search

Con il formato Bluestore, gli OSD sono particolarmente voraci di memoria.

Se gli OSD vanno in crash per mancanza di memoria, spesso è necessario riavviare la macchina.

Script

ceph config set osd bluestore_cache_autotune false
for VAR in bluestore_cache_size bluestore_cache_size_hdd bluestore_cache_size_ssd ; do for OSD in $(seq 0 23); do echo "osd.${OSD} $VAR 4GB"; ceph config set osd.${OSD} $VAR 4GB; done; done
ceph config dump

bluestore_cache_autotune

Una soluzione possibile è disabilitare l'autotune della cache.

  • Disabilitare l'autotune della cache runtime, su ogni monitor:
ceph daemon /var/run/ceph/ceph-mon.monitorhostname.asok config set bluestore_cache_autotune false
{
    "success": "bluestore_cache_autotune = 'false' (not observed, change may require restart) "
}
  • Questo settaggio è runtime ed effimero al reboot.
  • Verificarlo:
ceph daemon /var/run/ceph/ceph-mon.metstor05.asok config get bluestore_cache_autotune
{
    "bluestore_cache_autotune": "false"
}
  • Riavviare il monitor:
systemctl restart ceph-mon@metstor05.service
  • Verificarlo:
ceph daemon /var/run/ceph/ceph-mon.metstor05.asok config get bluestore_cache_autotune
{
    "bluestore_cache_autotune": "false"
}
  • Tenere la macchina in monitoraggio per qualche giorno. Se il settaggio non risolve, al reboot, la configurazione ritornerà al default.
  • Se il settaggio è risolutivo, impostarlo nel config db (visibile da proxmox)
ceph config set mon bluestore_cache_autotune false
  • Riavviare tutti i monitor uno alla volta e verificare che abbiano il settaggio applicato

bluestore_cache_size

Potrebbe essere necessario limitare l'uso di memoria di ogni OSDO

export OSD=11; \
ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config set bluestore_cache_size_hdd 536870912; \
ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config set bluestore_cache_size_ssd 1610612736; \
systemctl reload ceph-osd@${OSD}.service; \
ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config show | grep bluestore_cache_size
  • Se è ok, fissare la config come per il punto precedente e riavviare le macchine.
for  OSD in \
 12 13 14 15 16 17 ;\
do \  
   ceph config set osd.${OSD} bluestore_cache_size 536870912;\
   ceph config set osd.${OSD} bluestore_cache_size_hdd 536870912;\
   ceph config set osd.${OSD} bluestore_cache_size_ssd 1610612736;\
done
  • Riavviare tutto:
systemctl restart ceph.target
  • Verificare:
for  OSD in 12 13 14 15 16 17 ; do ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config get bluestore_cache_size; ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config get bluestore_cache_size_hdd; ceph daemon /var/run/ceph/ceph-osd.${OSD}.asok config get bluestore_cache_size_ssd; done

Reset delle modifiche

  • Per riportare tutto alla configurazione di default:
ceph config set mon bluestore_cache_autotune true
for VAR in \
 bluestore_cache_size \
 bluestore_cache_size_hdd \
 bluestore_cache_size_ssd ; do \
  for OSD in $(seq 0 21); do \
    ceph config rm osd.${OSD} $VAR; \
  done; \
done

Riferimenti