Detta dokument har översatts av AI. För eventuella felaktigheter, se den engelska versionen
Innan ni driftsätter en klusterapplikation behöver ni slutföra följande förberedelser.
För att köra en NocoBase-applikation i klusterläge krävs stöd från följande plugin:
| Funktion | Plugin |
|---|---|
| Cache-adapter | Inbyggd |
| Synkroniseringssignal-adapter | @nocobase/plugin-pubsub-adapter-redis |
| Meddelandekö-adapter | @nocobase/plugin-queue-adapter-redis eller @nocobase/plugin-queue-adapter-rabbitmq |
| Distribuerad lås-adapter | @nocobase/plugin-lock-adapter-redis |
| Worker ID-tilldelare | @nocobase/plugin-workerid-allocator-redis |
Se först till att ni har skaffat licenser för ovanstående plugin (ni kan köpa motsvarande plugin-licenser via den kommersiella plugin-tjänsteplattformen).
Utöver själva applikationsinstansen kan övriga systemkomponenter väljas av driftpersonalen, baserat på teamets specifika driftbehov.
Eftersom det nuvarande klusterläget endast riktar sig mot applikationsinstanser, stöder databasen för närvarande endast en enskild nod. Om ni har en databasarkitektur som master-slave, behöver ni implementera detta själva via middleware och säkerställa att det är transparent för NocoBase-applikationen.
NocoBase:s klusterläge förlitar sig på viss middleware för att uppnå kommunikation och koordinering mellan kluster, inklusive:
När alla middleware-komponenter använder Redis kan ni starta en enskild Redis-tjänst inom klustrets interna nätverk (eller Kubernetes). Alternativt kan ni aktivera en separat Redis-tjänst för varje funktion (cache, synkroniseringssignal, meddelandekö och distribuerat lås).
Versionsrekommendationer
NocoBase behöver använda storage-katalogen för att lagra systemrelaterade filer. I flernodsläge bör ni montera en molndisk (eller NFS) för att stödja delad åtkomst över flera noder. Annars kommer lokal lagring inte att synkroniseras automatiskt, och systemet kommer inte att fungera korrekt.
När ni driftsätter med Kubernetes, se Kubernetes-driftsättning: Delad lagring för mer information.
Klusterläget kräver en lastbalanserare för att distribuera förfrågningar, samt för hälsokontroller och failover av applikationsinstanser. Denna del bör väljas och konfigureras av er själva, baserat på teamets driftbehov.
Som ett exempel med en egenhostad Nginx, lägg till följande innehåll i konfigurationsfilen:
Detta innebär att förfrågningar omvänt proxys och distribueras till olika servernoder för bearbetning.
För lastbalanserings-middleware som tillhandahålls av andra molntjänstleverantörer, se den specifika leverantörens konfigurationsdokumentation.
Alla noder i klustret bör använda samma konfiguration av miljövariabler. Utöver NocoBase:s grundläggande miljövariabler behöver ni även konfigurera följande middleware-relaterade miljövariabler.
När applikationen körs på en flerkärnig nod kan ni aktivera nodens flerkärnsläge:
Om ni driftsätter applikations-pods i Kubernetes kan ni ignorera denna konfiguration och istället styra antalet applikationsinstanser via antalet pod-repliker.
Vissa system-samlingar i NocoBase använder globalt unika ID:n som primärnycklar. För att förhindra primärnyckelkonflikter i ett kluster måste varje applikationsinstans tilldelas ett unikt Worker ID via Worker ID-tilldelaren. Det nuvarande Worker ID-intervallet är 0–31, vilket innebär att varje applikation kan köra upp till 32 noder samtidigt. För mer information om designen av globalt unika ID:n, se @nocobase/snowflake-id.
Vanligtvis kan de relaterade adaptrarna alla använda samma Redis-instans, men det är bäst att använda olika databaser för att undvika potentiella nyckelkonflikter, till exempel:
För närvarande använder varje plugin sina egna Redis-relaterade miljövariabler. I framtiden kan vi överväga att enhetligt använda REDIS_URL som en standardkonfiguration.
Om ni använder Kubernetes för att hantera klustret kan ni konfigurera ovanstående miljövariabler i en ConfigMap eller Secret. För mer relaterat innehåll, se Kubernetes-driftsättning.
När alla ovanstående förberedelser är klara kan ni fortsätta till Driftprocesser för att hantera applikationsinstanserna.