Multi-node
Eén Ister-deployment kan meerdere servers ("nodes") beslaan. Typische redenen: media verspreid over machines in verschillende kamers, of een krachtige machine die het transcoderen doet voor een NAS die de bestanden bewaart. Alle nodes delen één PostgreSQL-database en één RabbitMQ-broker; clients kunnen met elke node praten.
Het concept
Elke node draait dezelfde applicatie-image met dezelfde database-/RabbitMQ-instellingen, en verschilt alleen in:
app.ister.server.name— uniek per nodeapp.ister.server.url— hoe clients en de andere nodes hem bereikenapp.ister.cluster.name— identiek op elke node- de
app.ister.disk.directories[n].*-regels voor de schijven die deze node fysiek heeft
Het opstarten valideert de multi-node-configuratie en logt problemen, dus bekijk het log van een net toegevoegde node.
Hoe werk wordt gerouteerd
De meeste achtergrondqueues zijn directory-scoped: de queuenaam bevat de directorynaam
(bijv. app.ister.server.transcode_requested.disk1), en elke node luistert alleen op de queues
van directories die hij bezit. Als een client dus aan een willekeurige node een stream vraagt,
belandt het transcodeverzoek op de node die het bronbestand heeft — geen gedeeld filesystem
nodig. Dit is ook waarom directorynamen uniek moeten zijn binnen het cluster.
Wanneer node A transcodeert voor een afspeelsessie die node B bedient, pusht A elk voltooid
HLS-segment naar B via POST /transcode/upload/{id}/{fileName}, geauthenticeerd met
kortlevende node-tokens die de nodes onderling automatisch uitgeven en verversen (elke 12
uur ververst). Je configureert hiervoor niets, behalve correcte app.ister.server.url-waarden —
maar die URL's moeten node-naar-node bereikbaar zijn, niet alleen vanuit je browser.
Dedicated transcoder-nodes
Een node kan ook transcoderen voor de schijven van een andere node zonder zelf media te bezitten: geef hem geen directories en som in plaats daarvan de directorynamen op die hij moet bedienen:
app.ister.transcoder.disks[0].name=server-1-disk1-tv
app.ister.transcoder.disks[1].name=server-1-disk1-movies
Is app.ister.transcoder.disks leeg, dan valt hij terug op de eigen directories van de node
(het normale single-node-gedrag). Let op: de bronnode moet het bestand nog steeds aan de
transcoder kunnen leveren — externe invoer wordt opgehaald via een download-URL met token.
Uitgewerkt voorbeeld
docker-compose-nodes-local.yml in de repository draait een compleet cluster van drie nodes
tegen één database en broker:
- server-1 — bezit zes directories (series, films en muziek over twee schijven), VAAPI ingeschakeld
- server-2 — een tweede volwaardige node met eigen schijven
- transcoder-1 — geen directories, alleen
app.ister.transcoder.disks[n]-regels met de schijven van server-1: hij doet het transcoderen van server-1
Punten om over te nemen: elke node heeft zijn eigen CACHE_DIR, een eigen gepubliceerde
poort en een server.url met een echt LAN-IP (niet localhost — de andere nodes moeten hem
bereiken), terwijl APP_ISTER_CLUSTER_NAME overal hetzelfde is.
Operationele opmerkingen
- De clusterpagina in de client (Instellingen → Cluster) toont elke node en zijn gezondheid — de snelste "draait alles?"-check.
- Scans, metadata en opschoning draaien per node voor de directories die hij bezit; je start
scanLibraryéén keer en elke node pakt zijn eigen deel op. - Voor de interne werking van transcoderen over nodes heen, zie de architectuurdocumentatie.