Fullmoon System

Van SLURM-installatie tot beheer: Linux HPC-cluster resourcebeheer en taakplanning

AI_Manager

SLURM-implementatie houdt meer in dan alleen het installeren van pakketten. U moet de tijd en UID/GID op alle knooppunten synchroniseren, een MUNGE-vertrouwenszone creëren en vervolgens de controller slurmctld, de rekenknooppunten slurmd en de optionele service voor het opslaan van taakgeschiedenis en resourcegebruik, slurmdbd, in de juiste volgorde configureren.

Deze SLURM-implementatiehandleiding verbindt de rollenscheiding, verpakking, slurm.conf, cgroup-resource-isolatie, registratie van taakgeschiedenis en resourcegebruik, indiening en verificatie, tot aan drain-procedures en back-ups die nodig zijn voor het beheer. Zorg ervoor dat de voorbeeld-knooppuntnamen en resourcewaarden worden aangepast aan de werkelijke uitvoer van slurmd -C.

SLURM-implementatiearchitectuur: inlogknooppunt, slurmctld-controller, MUNGE, slurmd-rekenknooppunten en slurmdbd voor het opslaan van taakgeschiedenis en resourcegebruik.
De rollen en workflow van een Slurm-cluster waarbij tijd, UID/GID en instellingen worden gesynchroniseerd en authenticatie plaatsvindt via MUNGE.

Terminologie: Slurm Accounting is de functie voor het verzamelen, opslaan en opvragen van de uitvoeringsgeschiedenis per taak en informatie over toegewezen en gebruikte resources. In dit artikel wordt dit aangeduid als registratie van taakgeschiedenis en resourcegebruik.

SLURM-implementatie: rollen en storingsdomeinen.

Componenten Rollen Kernpunten voor beheer
slurmctld Planning en clusterstatus Bescherming van StateSaveLocation en HA-ontwerp
slurmd Uitvoering van taken op rekenknooppunten Lokale spool en cgroup-isolatie
MUNGE Authenticatie tussen knooppunten Identieke sleutel, nauwkeurige tijd en strikte rechten
slurmdbd Opslag van taakgeschiedenis en resourcegebruiksgegevens in de database en bemiddeling bij opvragingen Geheimen van de database, back-ups en afzonderlijke afhandeling van storingen
slurmrestd Optionele REST API Geen directe blootstelling aan internet, gebruik afzonderlijke authenticatie en proxy

De Slurm-controller slaat de rekengegevens zelf niet op, maar beheert wel de status van de scheduler. Storingen worden niet afgehandeld door de StateSaveLocation te wissen of door twee controllers tegelijkertijd te activeren.

Slurm-opbouw: randvoorwaarden voor nodes, tijd en UID/GID

Voorwaartse en achterwaartse naamomzetting, identieke numerieke gebruikers-ID’s en NTP-synchronisatie moeten eerst op orde zijn om consistentie in MUNGE en taakeigendom te waarborgen. Als er geen centrale directory zoals LDAP wordt gebruikt, moeten de numerieke ID’s worden vastgelegd via een accountprovisioning-procedure.

hostnamectl --static
getent hosts ctrl01
getent hosts node01
id slurm
id hpcuser
timedatectl status
chronyc tracking
chronyc sources -v

Service-accounts en mappen

sudo groupadd --system slurm
sudo useradd --system --gid slurm   --home-dir /var/lib/slurm --shell /sbin/nologin slurm
sudo install -d -o slurm -g slurm -m 0750 /var/lib/slurm/controller
sudo install -d -o root -g root -m 0755 /var/lib/slurm
sudo install -d -o root -g root -m 0755 /var/lib/slurm/slurmd
sudo install -d -o slurm -g slurm -m 0750 /var/log/slurm

Als accounts handmatig op meerdere nodes worden aangemaakt, kunnen de UID’s/GID’s verschillen. Leg de numerieke ID’s vast volgens de organisatiestandaard of laat ze beheren door een centrale directory.

SlurmdSpoolDir is een beheerdomein dat exclusief is voor de root van de reken-node, maar gebruikers van taken moeten door het pad kunnen navigeren om scripts uit te voeren. Daarom wordt dit ingesteld op root:root 0755; dit moet niet worden verward met de 0750-rechten voor slurm:slurm van de statusmap van de controller. Controleer ook of de bovenliggende map /var/lib/slurm de rechten 0755 heeft.

Voorbereiding van reproduceerbare Slurm-pakketten

In plaats van herhaaldelijk make install uit te voeren vanuit bronmappen, bouwt u voor de productieomgeving RPM- of DEB-pakketten op basis van officiële release-tarballs en legt u deze vast in een interne ondertekende repository. Beheer de hoofd- en subversies van Slurm en de bouwopties voor plug-ins consistent voor de controller, login-nodes en reken-nodes.

sha256sum "${SLURM_TARBALL}"
rpmbuild -ta "${SLURM_TARBALL}"
rpm -qp --queryformat '%{NAME} %{VERSION}-%{RELEASE}
'   ~/rpmbuild/RPMS/*/slurm-*.rpm

Bepaal de bouw-afhankelijkheden voor distributies, databases, PMIx, hwloc en cgroup-ondersteuning op basis van de officiële documentatie en de interne ondersteuningsmatrix. Installeer geen pakketten uit willekeurige internet-repositories op slechts één controller.

Installatie van bouwresultaten per rol

rpmbuild voert de installatie niet uit. Bereid vóór het bouwen de benodigde plug-in-afhankelijkheden voor, zoals MUNGE-ontwikkelbibliotheken, hwloc, libbpf en D-Bus voor cgroup v2, en MySQL/MariaDB-ontwikkelbibliotheken voor het opslaan van taakhistorie en verbruiksgegevens. Publiceer de gebouwde RPM’s van dezelfde versie in een interne repository en installeer vervolgens de pakketten voor elke rol. De repository moet alleen door uzelf gevalideerde builds bevatten en controleer eerst de te installeren versies.

# Controleer de kandidaatversie en herkomst in de interne pakketrepository
dnf info slurm slurm-perlapi slurm-slurmctld slurm-slurmd slurm-slurmdbd
# ctrl01
sudo dnf install slurm slurm-perlapi slurm-slurmctld
# Elk rekenknooppunt van node01 tot node04
sudo dnf install slurm slurm-perlapi slurm-slurmd
# Inlogknooppunt
sudo dnf install slurm slurm-perlapi
# acct01: bij gebruik van opslag voor taakgeschiedenis en resourcegebruik
sudo dnf install slurm slurm-slurmdbd

Slurm-opbouw: configuratie van de MUNGE-vertrouwenszone

Eén cluster deelt dezelfde MUNGE-sleutel op alle deelnemende nodes. Breng de sleutel over via een veilig configuratiebeheerkanaal en zorg dat alleen de munge-gebruiker deze kan lezen. MUNGE moet vóór Slurm worden gestart.

sudo /usr/sbin/mungekey --create
sudo chown munge:munge /etc/munge/munge.key
sudo chmod 0400 /etc/munge/munge.key
sudo systemctl enable --now munge
munge -n | unmunge

Nadat de sleutel op de controller is aangemaakt en veilig naar elke node is gedistribueerd, moeten het eigendom en de hash worden gecontroleerd. Voer de inhoud van de sleutel niet uit naar de opdrachtregel of algemene logbestanden.

sudo stat -c '%U:%G %a %n' /etc/munge/munge.key
sudo sha256sum /etc/munge/munge.key
remunge

Slurm-opbouw: slurm.conf genereren op de werkelijke hardware

Gok niet bij de Slurm-opbouw naar CPU’s, sockets, cores of geheugen. Voer op elke reken-node slurmd -C uit en maak NodeName-definities per identieke modelgroep.

slurmd -C
lscpu
free -m
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS
ClusterName=hpc-prod
SlurmctldHost=ctrl01
SlurmUser=slurm
StateSaveLocation=/var/lib/slurm/controller
SlurmdSpoolDir=/var/lib/slurm/slurmd
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log

AuthType=auth/munge
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
SchedulerType=sched/backfill
ProctrackType=proctrack/cgroup
TaskPlugin=task/cgroup

AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=acct01
JobAcctGatherType=jobacct_gather/cgroup

NodeName=node[01-04] CPUs=32 RealMemory=125000 State=UNKNOWN
PartitionName=compute Nodes=node[01-04] Default=YES MaxTime=2-00:00:00 State=UP

De waarden voor CPUs en RealMemory in NodeName zijn voorbeelden. Stel het geheugen iets lager in dan de werkelijke slurmd -C-waarde om ruimte over te laten voor het besturingssysteem, en verifieer bij aanwezigheid van GPU’s de GRES- en apparaat-cgroup-configuratie afzonderlijk.

cgroup v2-bronisolatie

De onderstaande inhoud wordt opgeslagen in cgroup.conf in dezelfde configuratiemap als slurm.conf. De voorgaande slurm.conf wordt consistent gedistribueerd naar alle deelnemende nodes. Als de functies voor het opslaan van taakhistorie en resourcegebruik nog niet zijn voorbereid, laat dan de regels AccountingStorageType en AccountingStorageHost weg of becommentarieer ze. In plaats van de verwijderde accounting_storage/none-plug-in op te geven, schakelt de huidige Slurm de permanente opslag van taakhistorie en resourcegebruik uit door AccountingStorageType niet in te stellen. In dat geval worden de stappen voor sacct en sacctmgr uitgevoerd nadat slurmdbd en de database zijn geconfigureerd.

CgroupPlugin=autodetect
ConstrainCores=yes
ConstrainRAMSpace=yes
ConstrainDevices=yes
stat -fc %T /sys/fs/cgroup
scontrol show config | grep -E 'ProctrackType|TaskPlugin|SelectType'
systemd-cgls --no-pager

slurmdbd-service voor opslag van taakhistorie en resourcegebruik

Configureer slurmdbd en een ondersteunde SQL-database om taakhistorie, Slurm-accountgebruik en QoS op lange termijn te beheren. Splits de SQL-server af naar een aparte host, afhankelijk van de operationele schaal.

Hieronder volgt een voorbeeld waarbij slurmdbd en een ondersteunde MariaDB/MySQL-server zich op acct01 bevinden. Bereid eerst de database-installatie, InnoDB-ondersteuning en het back-upbeleid voor. Maak in een databasebeheerderssessie de database slurm_acct_db en het slurm-account aan, en verleen alleen rechten op deze database. Voer het werkelijke wachtwoord in volgens de beheerprocedures en plaats het niet in shell-opdrachtargumenten of logbestanden. Als u de SQL-server in een grote omgeving scheidt, wijzigt u ook de StorageHost en de host voor de DB-accountverbinding.

-- Voorbeeld-SQL voor uitvoering in een sessie als databasebeheerder
CREATE DATABASE slurm_acct_db;
CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_SECRET';
GRANT ALL ON slurm_acct_db.* TO 'slurm'@'localhost';
SHOW ENGINES;

Sla de onderstaande items op in /etc/slurm/slurmdbd.conf en vervang StoragePass door het werkelijke wachtwoord van het bovenstaande DB-account. De SQL-gebruiker en de besturingssysteemgebruiker slurm zijn verschillende accounts. Start de service niet als de configuratie leeg is of nog het voorbeeldwachtwoord bevat.

AuthType=auth/munge
DbdHost=acct01
DbdPort=6819
SlurmUser=slurm
StorageType=accounting_storage/mysql
StorageHost=localhost
StorageUser=slurm
StoragePass=REPLACE_WITH_UNIQUE_SECRET
StorageLoc=slurm_acct_db
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid

DB-inloggegevens moeten worden opgeslagen in slurmdbd.conf met 0600-rechten of in een geheimbeheersysteem; leg ze niet vast in de tekst of in Git.

# Maak eerst een back-up van bestaande bestanden indien aanwezig. Overschrijf ze niet met lege bestanden.
sudo install -d -m 0755 /etc/slurm
sudo touch /etc/slurm/slurmdbd.conf
sudo chown slurm:slurm /etc/slurm/slurmdbd.conf
sudo chmod 0600 /etc/slurm/slurmdbd.conf
sudoedit /etc/slurm/slurmdbd.conf
sudo systemctl enable --now slurmdbd
sudo journalctl -u slurmdbd -b --no-pager

Clusterregistratie en het aanmaken van associaties tussen Slurm-accounts en gebruikers moeten worden uitgevoerd volgens de wijzigingsbeheerprocedures. Een Slurm-account is een eenheid voor het beheren van resourcegebruik per project of organisatie en moet worden onderscheiden van een inlogaccount voor het besturingssysteem. Een associatie is een koppeling die het cluster, het Slurm-account, de gebruiker en optioneel partities verbindt. Bewaar de uitvoer van sacctmgr en database-back-ups, en voer verwijderingsopdrachten pas uit nadat het doel is bevestigd via een query die fungeert als een dry-run.

sudo sacctmgr add cluster hpc-prod
sudo sacctmgr add account research Description='Research'
sudo sacctmgr add user hpcuser Account=research
sacctmgr show cluster
sacctmgr show association tree

Slurm-opbouw: volgorde van het starten van services en statuscontrole

  1. Controleer tijd, naam en UID/GID op alle nodes.
  2. Start MUNGE en test lokale en externe inloggegevens.
  3. Als u de functies voor het opslaan van taakhistorie en verbruik gebruikt, controleer dan eerst de verbinding tussen slurmdbd en de database.
  4. Start slurmctld op de controller.
  5. Start slurmd op de reken-nodes.
  6. Controleer de configuratie en de status van de nodes met scontrol en sinfo.
# Alleen uitvoeren op de ctrl01-controller
sudo systemctl enable --now slurmctld
# Het volgende commando wordt uitgevoerd op elk rekenknooppunt
sudo systemctl enable --now slurmd
systemctl --no-pager --full status slurmctld
systemctl --no-pager --full status slurmd
scontrol ping
sinfo --long
scontrol show nodes

Validatie van de SLURM-installatie via interactieve en batch-taken.

srun --partition=compute --nodes=1 --ntasks=1   hostname
srun --partition=compute --nodes=2 --ntasks-per-node=2   /bin/hostname
#!/usr/bin/env bash
#SBATCH --job-name=smoke-test
#SBATCH --partition=compute
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=2
#SBATCH --time=00:05:00
#SBATCH --output=slurm-%j.out

set -euo pipefail
hostname
srun --label /bin/hostname
JOB_ID=$(sbatch --parsable smoke-test.sbatch)
squeue --job "$JOB_ID"
sacct --jobs "$JOB_ID"   --format=JobID,State,Elapsed,AllocCPUS,MaxRSS,ExitCode
scontrol show job "$JOB_ID"

Node drain, herstel en veilig beheer.

sudo scontrol update NodeName=node03   State=DRAIN Reason='planned maintenance'
scontrol show node node03
squeue --nodelist=node03

sudo scontrol update NodeName=node03 State=RESUME
sinfo --nodes=node03 --long

Zet nodes met de status DOWN of DRAIN niet zomaar terug naar RESUME, maar controleer eerst de reden, de slurmd-logs, hardware-events en de status van het bestandssysteem. Bepaal voor nodes die taken uitvoeren of deze moeten worden voltooid, opnieuw in de wachtrij moeten worden geplaatst of moeten worden geannuleerd, afhankelijk van het beleid.

sudo journalctl -u slurmd --since '-30 minutes' --no-pager
sudo journalctl -u slurmctld --since '-30 minutes' --no-pager
scontrol show node node03
sdiag

Back-ups en disaster recovery.

  • Beheer versies van slurm.conf, cgroup.conf, gres.conf en de bronbestanden voor automatische implementatie.
  • Maak back-ups van de StateSaveLocation met inachtneming van serviceconsistentie en behoud de juiste rechten.
  • Test het maken van back-ups en het herstellen van de slurmdbd-database op een manier die transactionele consistentie garandeert.
  • Bewaar de MUNGE-sleutel apart in een versleutelde kluis en controleer de toegang hierop.
  • Configureer de standby-controller volgens de officiële HA-methode en laat de slurmctld-daemon draaien. Houd slechts één actieve scheduler aan en laat Slurm de promotie en terugkeer van de standby-daemon regelen. Laat twee onafhankelijke hoofdcontrollers niet naar dezelfde status schrijven.

Officiële documentatie en integratiegidsen.

De standaard voor een voltooide SLURM-implementatie is niet alleen dat de daemons actief zijn, maar dat MUNGE-authenticatie, resource-isolatie, taken over meerdere nodes, Slurm-accounting, drain/resume-procedures en back-up/herstel-tests allemaal succesvol zijn doorlopen. Leg deze criteria vast in automatische controles om ze te herhalen bij het toevoegen van nodes of bij versie-upgrades.