BlueFS spillover detected on X OSD(s)

Ukážeme si, jak rozšířit oddíly bluestore block.db a jak migrovat data po přetečení dat do pomalé databáze (od Ceph v14.1.0 a výše).

Ceph status

  cluster:
    id:     29a36dca-61f5-48e9-933b-078831e85f3e
    health: HEALTH_WARN
            BlueFS spillover detected on 2 OSD(s)

Konfigurace cephu

Ukážeme si konfiguraci na našem testovacích cephu. V serveru máme celkem 6 disků:

  • 4x 18TB jako OSD
  • 2x SSD v RAID1 + LVM pro block.db
  • 0x pro wal.db - nemáme zde moc zápisů, takže write ahead log pro zrychlení zápisů nepotřebujeme
$ lvs
  LV                                             VG                                        Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  wwn-0x5000039bb8ca2b96                         blockdb                                   -wi-ao---- 25.00g
  wwn-0x5000039bb8ca2bbe                         blockdb                                   -wi-ao---- 25.00g
  wwn-0x5000039bb8ca2bcd                         blockdb                                   -wi-ao---- 25.00g
  wwn-0x5000039bb8ca2d04                         blockdb                                   -wi-ao---- 25.00g
  osd-block-868c7fc0-890b-4d40-96ea-b595ab9d5356 ceph-024b0fb2-e8b7-4f6a-ac86-c178193c94ce -wi-ao---- 16.37t
  osd-block-ee210a8c-439b-4409-9c7b-960ee704d473 ceph-323660ba-282e-40c5-bc91-2a38b38230a1 -wi-ao---- 16.37t
  osd-block-bef2c7b6-7e49-4faf-a3dc-1a7867ae8f64 ceph-a4bb2303-d4ca-4cfe-98c3-56b0799c4789 -wi-ao---- 16.37t
  osd-block-b6828b1f-69f1-4a54-a411-1284e73adba3 ceph-e1359d50-6cee-4dba-80dd-18f27f6913f0 -wi-ao---- 16.37t

V serveru jsme původně měli jen 120GB SSD, takže jsme block.db zařízení udělali jen 25GB s tím, že se po výměně disků rozšíří na požadovaných 30GB.

Počáteční stav

$ ceph daemon osd.1 perf dump | jq .bluefs.slow_used_bytes
3920232448

Zajímavé je, že by v block.db ještě nějaké dostupné místo mělo být a dokonce by mělo být dostatečné pro data, která máme zapsaná do pomalé storage. Možná to souvisí s alokací místa, kterou si ceph interně dělá a které by měl ale konkrétní vysvětlení pro to ještě nemáme.

$ ceph daemon osd.1 perf dump | jq '.bluefs | to_entries[] | select(.key|startswith("db_"))'
{
  "key": "db_total_bytes",
  "value": 25769795584
}
{
  "key": "db_used_bytes",
  "value": 21201158144
}

A ještě si zobrazíme data pomocí ceph-bluestore-tool:

$ ceph-bluestore-tool show-label --path /var/lib/ceph/osd/ceph-1
inferring bluefs devices from bluestore path
{
    "/var/lib/ceph/osd/ceph-1/block": {
        "osd_uuid": "868c7fc0-890b-4d40-96ea-b595ab9d5356",
        "size": 18000203743232,
        "btime": "2023-11-06 12:27:28.513510",
        "description": "main",
        "bluefs": "1",
        "ceph_fsid": "29a36dca-61f5-48e9-933b-078831e85f3e",
        "kv_backend": "rocksdb",
        "magic": "ceph osd volume v026",
        "mkfs_done": "yes",
        "osd_key": "AQCdzUhlYyfmEBAAnlQ1mIo3QQoJFR9ZpfZaPw==",
        "ready": "ready",
        "require_osd_release": "14",
        "whoami": "1"
    },
    "/var/lib/ceph/osd/ceph-1/block.db": {
        "osd_uuid": "868c7fc0-890b-4d40-96ea-b595ab9d5356",
        "size": 25769803776,
        "btime": "2023-11-06 12:27:28.516371",
        "description": "bluefs db"
    }
}

Zvětšení block.db

To ale nevadí. SSD jsou levná, takže se pustíme do zvětšování prostoru.

Vypneme rebalancing

Budeme vypínat OSD, takže si nejdříve na monitor serveru zajistíme, aby se nepustil rebalancing:

ceph osd set noout
ceph osd set nobackfill
ceph osd set norecover

Vypneme OSD

service ceph-osd@1 stop

Zvětšíme si postiženou LVM volume

lvresize -L +6G /dev/blockdb/wwn-0x5000039bb8ca2b96

Řekneme cephu o zvětšení block.db

$ ceph-bluestore-tool bluefs-bdev-expand --path /var/lib/ceph/osd/ceph-1
inferring bluefs devices from bluestore path
1 : device size 0x7c0000000 : own 0x[2000~5ffffe000] = 0x5ffffe000 : using 0x4efb00000(20 GiB)
2 : device size 0x105effc00000 : own 0x[7dbadf50000~a7a3d50000] = 0xa7a3d50000 : using 0xe9aa0000(3.7 GiB) : bluestore has 0x45e47ac0000(4.4 TiB) available
Expanding DB/WAL...
1 : expanding  from 0x600000000 to 0x7c0000000
1 : size label updated to 33285996544

Můžeme zkontrolovat, že se nám block.db opravdu zvětšila (zkrácený výpis)

$ ceph-bluestore-tool show-label --path /var/lib/ceph/osd/ceph-1
...
    "/var/lib/ceph/osd/ceph-1/block.db": {
        "osd_uuid": "868c7fc0-890b-4d40-96ea-b595ab9d5356",
        "size": 33285996544,
        "btime": "2023-11-06 12:27:28.516371",
        "description": "bluefs db"
    }

Přemigrujeme block.db data z pomalého úložiště na rychlejší

$ ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-1 --devs-source /var/lib/ceph/osd/ceph-1/block --dev-target /var/lib/ceph/osd/ceph-1/block.db --command bluefs-bdev-migrate
inferring bluefs devices from bluestore path

Spustíme OSD

service ceph-osd@1 start

Závěr

Ceph už máme zase v pořádku.

$ ceph status
  cluster:
    id:     29a36dca-61f5-48e9-933b-078831e85f3e
    health: HEALTH_OK