Proxmox & HA: Ceph voor persistent mutable storage

Proxmox & HA: Ceph voor persistent mutable storage

Om te zorgen voor dataretentie en pariteit op cluster-niveau is een oplossing als RAID of een ZFS poule niet voldoende, deze oplossingen werken immers alleen op lokaal niveau. Als een virtuele machine of container uitvalt op node 1, zou dat betekenen dat als de virtuele machine op node 2 opstart, niet bij de bestanden kan van node 1.

Dat zou niet zo erg zijn bij bepaalde content zoals een statische website, proxyserver of load balancer. Als het gaat om persoonlijke gegevens zoals vakantiefoto’s, bankafschriften of schoolwerk is dat een ander verhaal. Hetzelfde geldt ook voor een private cloud oplossing zoals Nextcloud.

Hier willen de dat, ondanks als node 1 uitvalt, node 2 bij dezelfde data kan. Hier zijn, buiten Ceph, andere opties voor zoals een File transfer Protocol (FTP) of Network File System (NFS) -server opzetten op een box binnen of buiten het netwerk. Dit biedt echter twee nadelen: Er is geen redundantie aanwezig en er worden een hoop Input/Output Operations (IOPS) ingeleverd doordat computers de gegevens niet laden vanaf hun lokale opslagmedia. Daarnaast is Ceph zo opgezet dat het decentraal kan draaien. Hierdoor wordt een ‘single point of failure’ vermeden.

De installatie van de Ceph framework is eenvoudig te doen met een paar muiskliks binnen de GUI van Proxmox. Nadat alle drie de nodes zijn voorzien van Ceph kunnen we nu beginnen aan de configuratie.

Object Storage Daemons (OSD’s) hebben de verantwoordelijkheid om te orkestreren welke data naar welk opslagmedia geschreven moet worden. Dit wordt gedaan door een complex algoritme zoals CRUSH.

We willen op elke node een OSD aanmaken die dus verantwoordelijk is voor deze taak. De popup attendeert ons op het feit dat het niet de bedoeling is dat RAID-controllers een abstractie laag vormen tussen de hardeschijven en Ceph. In ons geval heeft alleen RouterBox een controller ertussen. Gelukkig heb ik deze in een eerder stadium geflashed naar HBA-mode. Dit houdt in dat het besturingssysteem, zonder interventie van de controller, het opslagmedia direct als block-device kan benaderen.

Ceph zegt: RAID-controllers zijn niet welkom hier

De afbeelding hierboven laat zien dat er geen ongebruikte hardeschijven beschikbaar zijn. Dat is erg bijzonder omdat op foxbox we alleen de Serial Advanced Technology Attachment (SATA) SSD in gebruik hebben, hier hebben we immers het besturingssysteem op geïnstalleerd. Met het commando ‘lsblk’ print ik een lijst van alle block devices op de node. Hier zien we dat de 1TB drive wordt herkend en dat er een partitie op staat van een vorige installatie.

De output van lsblk

Ik besluit de drive te wipen met fdisk en het daarna nog een keer een OSD te installeren.

De fdisk wipe poging in actie

Fdisk vertelt me dat de drive in gebruik is en dat ik hem zou moeten unmounten. Dit is erg bijzonder want de drive is helemaal niet gemount. Ik besluit om FoxBox opnieuw op te starten en het programma gparted te laden vanaf een USB-stick. Gparted staat voor ‘GNOME partition manager’. Door dit programma te laden tijdens boot vanaf een USB-stick weet ik zeker dat proxmox niet in de gelegenheid is om te interacteren met de drive.

Na de bewerking die we net hebben gedaan komt de drive netjes voor in de GUI om een OSD aan te maken.

Bij OxBox komt de drive gelukkig wel meteen in beeld, echter tijdens het aanmaken stuiten we tegen een andere foutmelding …

Er gaat blijkbaar iets niet goed met het leegmaken van de schijf. Met lsblk kijk ik hoe de partities van de drive zijn opgebouwd en zie ik dat er onder andere een partitie op staat van slechts 16 MB. Waarschijnlijk is dit een Windows-installatie. Met fdisk heb ik de drive handmatig leeggemaakt. Hierna heb ik de schijf opnieuw geprobeerd toe te voegen en dat ging zonder problemen.

Er moet alleen nog een OSD aangemaakt worden op RouterBox. Deze node heeft helaas geen M.2 drives en zal het moeten doen met een SATA SSD van 2TB. Idealiter had ik op alle nodes evenveel opslagcapaciteit willen hebben om de boel symmetrisch te houden.

Lsblk vertelt ons dat ‘sdc’ de drive is die we willen toevoegen. Ondanks er geen partities op staan komt de de drive niet voor in het OSD-menu.

Fdisk vertelt ons dat de schijf deel uitmaakt(e) van een ZFS-pool. Dit kan kloppen omdat ik deze schijf in een eerder project als dusdanig gebruikt hebt. Met ‘wipefs -a /dev/sdc’ verwijder ik het bestaande bestandsysteem.

Na dit gedaan te hebben, kan ik een nieuwe OSD aanmaken en hebbend we succesvol op alle nodes een OSD aangemaakt.

Het laatste wat we nu nog moeten doen is een opslagpoule (pool) maken. Bij het maken van een pool kunnen we een size kiezen. Hiermee kunnen we aangeven hoeveel kopieën we willen hebben. We gaan voor de standaard optie van 3, dit betekent dat we nog steeds bij onze data kunnen als we twee nodes verliezen. Verder moeten we een naam geven voor onze pool. Ik vroeg Google Gemini wat suggesties en die kwam met Arcephos. Catchy, gaan we doen!

Links voor het aanmaken van Arcephos, rechts na. Het lukte!