Cluster- und Cache-Betrieb
Diese Seite beschreibt, wie ein Webdesk mit mehreren Knoten (Cluster, "verteilter Betrieb") konfiguriert und betrieben wird und wie sich die Caches dabei verhalten. Sie richtet sich an Systemadministratoren und Consultants. Vorausgesetzt werden: alle Knoten greifen auf dieselbe Datenbank zu, ein erreichbarer Redis-Server und – bei Cache-Replikation über JMS – ein JMS-Broker. Die Schlüssel werden pro Knoten in der webdesk.properties gesetzt (siehe Seite "Konfigurationsdatei webdesk.properties und Umgebungsvariablen"). Ergänzend beschreiben Liste der Caches den Zweck der Caches, Aktive Jobs die Job-Überwachung inklusive Knotenstatus und Erweiterte Funktionen die Wartungsaktionen.
Überblick: Bausteine des Cluster-Betriebs
|
Baustein |
Aufgabe |
Schalter |
|---|---|---|
|
Cache-Replikation (EhCache) |
Gleicht die EhCache-Caches zwischen den Knoten ab und transportiert Dienstaufrufe an die anderen Knoten (Speichern von Jobs und Job-Triggern, Übernahme von Systemparametern, Veröffentlichung des Clusterstatus). Transport wahlweise RMI (Multicast) oder JMS. |
|
|
Redis |
Gemeinsamer Speicher und Nachrichtenkanal (Pub/Sub) für die als "repliziert" definierten Anwendungs-Caches (Caffeine + Redis), für den Hibernate-Provider |
|
|
Hibernate-Cache (Second-Level-Cache) |
Cache für Datenbank-Entitäten. Anbieter global umschaltbar. |
|
|
HTTP-Sessions |
Sitzungen lokal im Speicher, in Redis (Spring Session) oder über den Tomcat-Session-Manager. |
|
|
Jobs |
Zuordnung der Job-Trigger zu einem Knoten. |
|
Bei isDistributed=false (Standard) ist jede Abstimmung zwischen Knoten abgeschaltet; die Caches arbeiten dann rein lokal. Ein gesetztes useJmsReplication wird ohne isDistributed=true ignoriert.
Grundkonfiguration eines Knotens
|
Eigenschaft |
Erklärung |
mögliche Wert(e) |
|---|---|---|
|
isDistributed |
Schaltet den verteilten Betrieb ein: Cache-Replikation, Redis-Anbindung für replizierte Caches, Cluster-Heartbeat und knotenspezifischer Workflow-Engine-Name. Muss auf allen Knoten gleich gesetzt sein. |
true/false (Standard: false) |
|
useJmsReplication |
Bei true werden die EhCache-Caches über JMS repliziert, sonst über RMI mit Multicast-Erkennung. Nur wirksam bei |
true/false (Standard: false, also RMI) |
|
PoOptions.clusterNode |
Name dieses Knotens; muss pro Knoten eindeutig sein. Ist kein Name gesetzt, zeigt der Clusterstatus |
Text, z.B. node1 |
|
PoOptions.clusterNodes |
Liste aller Knotennamen des Clusters. Wird in der Maske "Systemparameter" (Bean PoOptions, Eigenschaft clusterNodes) gepflegt und gilt für alle Knoten. Die Einträge müssen exakt den |
Liste von Namen (Standard: ClusterNode1) |
|
WfStartup.engineName |
Name der Workflow-Engine des Knotens. Wird der Standardname bei |
Text (Standard: webdeskshark) |
|
webdesk.cluster.heartbeatIntervalSeconds |
Intervall in Sekunden, in dem ein Knoten seinen Clusterstatus und seinen Job-Überwachungsstand an die anderen Knoten veröffentlicht (auch sofort beim Start). Läuft nur bei |
Zahl (Standard: 30) |
|
webdesk.cluster.skipIdleJobMonitoringSnapshots |
Bei true veröffentlicht ein Knoten ohne Jobs und mit gestopptem Scheduler im Heartbeat keinen Job-Überwachungsstand. |
true/false (Standard: true) |
Hinweis: Die Schlüssel isDistributed, useJmsReplication, PoOptions.clusterNode, WfStartup.engineName, webdesk.cacheReplication.RMI.peerProvider.properties und webdesk.cacheReplication.JMS.peerProvider.properties können auch als JVM-Parameter oder Umgebungsvariable gesetzt werden. Der Name der Umgebungsvariable lautet WD_ plus Schlüssel in Großbuchstaben, Punkte werden zu Unterstrichen (z.B. WD_ISDISTRIBUTED, WD_POOPTIONS_CLUSTERNODE). Leere Umgebungsvariablen werden ignoriert.
Cache-Replikation: RMI oder JMS
Der Transport gilt global für alle replizierten EhCache-Caches und wird über useJmsReplication gewählt. Zusätzlich nutzt Webdesk die Replikation, um Dienstaufrufe an die anderen Knoten zu senden. Das betrifft das Speichern von Jobs und Job-Triggern, die Übernahme von Systemparametern (Neu-Injektion der Bean-Eigenschaften) und die Veröffentlichung des Clusterstatus. Ist die Replikation gestört, erreichen diese Änderungen die anderen Knoten nicht.
|
Eigenschaft |
Erklärung |
mögliche Wert(e) |
|---|---|---|
|
webdesk.cacheReplication.RMI.peerProvider.properties |
Peer-Erkennung bei RMI. Standard ist die automatische Erkennung über Multicast. |
Standard: |
|
webdesk.cacheReplication.peerListener.properties |
Einstellungen des RMI-Listeners (nur bei RMI). |
Standard: |
|
webdesk.cacheReplication.JMS.peerProvider.properties |
Verbindung zum JMS-Broker (nur bei JMS): Adresse des Brokers sowie Benutzer und Passwort eines gültigen Broker-Zugangs. Webdesk startet keinen eigenen Broker. Die Namen von Topic und Queue sind fest vorgegeben und nicht änderbar. Der Beispielwert in der Vorlage enthält Standard-Zugangsdaten, die durch die echten Zugangsdaten zu ersetzen sind. |
Vorlage: |
|
webdesk.cacheReplication.excludedCaches |
Komma-getrennte Liste von Cache-Namen, die nicht repliziert werden sollen. Gilt für die in |
Liste von Cache-Namen (Standard: leer) |
|
webdesk.cacheReplication.listener.replicatePuts, .replicateUpdates, .replicateUpdatesViaCopy, .replicateRemovals, .replicateAsynchronously |
Was und wie repliziert wird. |
true/false (Standard: jeweils true) |
|
webdesk.cacheReplication.maxElementsInMemory, .timeToIdleSeconds, .timeToLiveSeconds, .eternal, .overflowToDisk |
Vorgabewerte für EhCache-Caches ohne eigene Definition. |
Standard: 100 / 300 / 300 / false / true |
Achtung: webdesk.cacheReplication.listener.replicatePuts=false global zu setzen ist nicht zulässig. Der Versand von Dienstaufrufen zwischen den Knoten beruht darauf, dass das Ablegen eines Eintrags im internen Kommunikations-Cache repliziert wird; mit replicatePuts=false würden Job-Änderungen, Systemparameter und Clusterstatus nicht mehr bei den anderen Knoten ankommen.
Achtung: Der ältere Schlüssel webdesk.cacheReplication.peerProvider.properties (ohne RMI) wird nicht mehr ausgewertet. Mit ihm gesetzte Multicast-Adressen oder -Ports gelten nicht; es greift der Standard (230.0.0.1, Port 4446).
Die Vorgabewerte für Caches können zusätzlich durch eine Datei defaultCacheConfiguration.properties im Klassenpfad (WEB-INF/classes) übersteuert werden; sie hat Vorrang vor der webdesk.properties. Dass overflowToDisk standardmäßig aktiv ist, kann bei großen Caches zu höheren Antwortzeiten führen, weil Einträge dann von der Platte gelesen werden; Caches mit eigener Bean-Definition können dies mit der Bean-Eigenschaft overflowToDisk abschalten (Beispiel: PtmPermissionCacheBean.overflowToDisk=false in der webdesk.properties). Die Überschreibung per <Bean>.<Eigenschaft> wirkt nur auf Spring-Cache-Beans, nicht auf die Regionen der ehcache.xml-Dateien für den Hibernate-Cache.
Redis
Redis wird für Sessions (Spring Session), für replizierte Anwendungs-Caches (Caffeine als lokale Ebene, Redis als gemeinsame Ebene, Ungültigkeitsmeldungen über den Pub/Sub-Kanal webdesk:cache-sync) und für den Hibernate-Provider redis-caffeine (Kanal webdesk:hibernate-cache-coherence) verwendet. Die Verbindung wird aufgebaut, sobald isDistributed=true oder redis.useAsSessionStore=true gilt. Ist weder redis.connection.url noch redis.clusterNodes gesetzt, verbindet sich Webdesk mit localhost Port 6379.
|
Eigenschaft |
Erklärung |
mögliche Wert(e) |
|---|---|---|
|
redis.useAsSessionStore |
Bei true werden die HTTP-Sessions über Spring Session in Redis gehalten. |
true/false (Standard: false) |
|
redis.connection.url |
Adresse eines einzelnen Redis-Servers. Übernommen werden Host, Port und Datenbank-Nummer; ein in der URL enthaltenes Passwort wird nur verwendet, wenn |
z.B. redis://redis-host:6379/0 (Standard: leer, dann localhost:6379) |
|
redis.clusterNodes |
Komma-getrennte Liste der Knoten eines Redis-Clusters. Ist der Wert gesetzt, hat er Vorrang vor |
z.B. host1:6379,host2:6379 (Standard: leer) |
|
redis.connection.password |
Passwort für Redis. Nicht in Dokumentation, Tickets oder Logs weitergeben. |
<your-redis-password> (Standard: leer) |
|
redis.credentials.encrpted |
Bei true ist |
true/false (Standard: false) |
|
redis.session.cookie.jvmRoute |
Route-Suffix des Session-Cookies |
Text (Standard: leer) |
Die redis.*-Schlüssel können auch als JVM-Parameter oder Umgebungsvariable gesetzt werden (z.B. WD_REDIS_USEASSESSIONSTORE, WD_REDIS_CONNECTION_URL); diese haben Vorrang vor der webdesk.properties.
Hibernate-Cache (Second-Level-Cache)
Der Anbieter des Hibernate-Caches wird mit webdesk.hibernate.cache.provider in der webdesk.properties gewählt. Die Wahl gilt global und unabhängig von isDistributed. Die Variante redis-caffeine steht seit Webdesk 4.64 optional zur Verfügung.
|
Wert |
Wirkung |
|---|---|
|
ehcache2 (Standard, auch bei leerem Wert) |
EhCache-basierter Cache; bei |
|
redis-caffeine |
Redis als maßgeblicher gemeinsamer Speicher, ergänzt um einen lokalen Caffeine-Nahbereichs-Cache. Benötigt eine Redis-Anbindung, also |
|
disabled |
Schaltet Second-Level-Cache und Query-Cache ab. |
Ein anderer Wert verhindert den Start mit einer Fehlermeldung, die die erlaubten Werte nennt.
Regeln für den Betrieb
- Alle Knoten einer Umgebung müssen denselben Wert verwenden.
- Eine Änderung des Werts erfordert einen Neustart der gesamten Umgebung; ein Mischbetrieb verschiedener Anbieter ist zu vermeiden.
- Der Redis-Server muss für
redis-caffeinedie Eviction-Richtliniemaxmemory-policy noeviction(oder ein gleichwertiges, dokumentiertes Verhalten bei verwaltetem Redis) haben. Webdesk prüft dies beim Start perCONFIG GET maxmemory-policyund bricht den Start bei anderen Richtlinien (z.B.allkeys-lru,volatile-lru) oder bei verweigertemCONFIG GETab. Auch mitnoevictionsollte der Speicherverbrauch von Redis überwacht werden, da ein voller Redis zum Ausfall führt. - Lokale EhCache2-Cache-Dateien (Disk-Stand) dürfen beim Wechsel des Anbieters nicht weiterverwendet werden.
Umstellung auf redis-caffeine
- Wert für
webdesk.hibernate.cache.providerfür die gesamte Umgebung festlegen und ein Wartungsfenster planen, damit kein Mischbetrieb entsteht. - Prüfen, dass Redis mit
maxmemory-policy noevictionarbeitet. - Die Redis-Schlüssel des Hibernate-Caches (Präfix
wd:hibernate:l2:) vor dem Start löschen, da frühere Einträge nicht kompatibel sind. Beispiel für einen einzelnen Redis-Server (bei Redis Cluster pro Primärknoten ausführen):redis-cli --scan --pattern 'wd:hibernate:l2:*' | xargs -r redis-cli del
- Den Wert in der
webdesk.propertiesaller Knoten setzen und die Knoten starten. - Im Log prüfen, dass keine dauerhafte Flut von Decodier-Warnungen zu Hibernate-Cache-Schlüsseln auftritt.
Rückstellung oder Wechsel auf ehcache2 / disabled
- Alle Knoten stoppen.
- Bei bisherigem Modus
redis-caffeinedie Schlüsselwd:hibernate:l2:*löschen. - Den Wert in der
webdesk.propertiesaller Knoten auf den Zielwert setzen. - Alle Knoten in einem Zug wieder starten.
Feineinstellung des Nahbereichs-Caches (redis-caffeine)
Veränderbare Entitäten werden standardmäßig lokal zwischengespeichert; Redis bleibt maßgeblich. Wird ein Ereignis verpasst, kann ein Knoten einen Wert höchstens bis zum Ablauf von valueTtlMillis veraltet liefern. Die folgenden Schlüssel sind optional; die Standardwerte sind für den Normalbetrieb ausgelegt. Wo diese Schlüssel in einer Installation abgelegt werden, sollte mit dem Webdesk-Support abgestimmt werden.
|
Eigenschaft |
Erklärung |
mögliche Wert(e) |
|---|---|---|
|
wd.cache.hibernate.nearCache.valueTtlMillis |
Gültigkeit eines lokal gelesenen Werts in Millisekunden. |
Zahl (Standard: 3000) |
|
wd.cache.hibernate.nearCache.coherenceStateTtlMillis |
Dauer in Millisekunden, für die der lokal beobachtete Kohärenzzustand vorgehalten wird. |
Zahl (Standard: 120000) |
|
wd.cache.hibernate.nearCache.maxEntries |
Maximale Anzahl lokaler Einträge. |
Zahl (Standard: 20000) |
|
wd.cache.hibernate.nearCache.reconnectionStrategy |
Verhalten nach einem Verbindungsabbruch zu Redis: lokale Werte werden verworfen. Die Werte |
CLEAR (Standard) |
|
wd.cache.hibernate.nearCache.excludedMutableRegions |
Komma-getrennte Liste von Regionen, die nie lokal gelesen werden dürfen (für besonders konsistenzkritische Regionen). |
Liste (Standard: leer) |
|
wd.cache.hibernate.nearCache.queryRegions |
Komma-getrennte Liste von Query-Regionen, für die lokales Lesen erlaubt wird. |
Liste (Standard: leer) |
|
wd.cache.hibernate.region.entryTtlMillis |
Lebensdauer eines Eintrags in Redis in Millisekunden. |
Zahl (Standard: 3600000) |
|
wd.cache.hibernate.readWrite.softLockTtlMillis |
Lebensdauer der Soft-Locks in Redis in Millisekunden. |
Zahl (Standard: 60000) |
Die Kennzahlen webdesk.hibernate.l2.redis.publish.failures, webdesk.hibernate.l2.redis.event.apply.failures und webdesk.hibernate.l2.redis.subscription.disconnects sollten im Normalbetrieb bei 0 bleiben, webdesk.hibernate.l2.redis.near.cache.disabled sollte 0 sein.
HTTP-Sessions im Cluster
Welche Session-Art aktiv ist, zeigt die Maske "Clusterstatus" im Feld "Session-Mode" (siehe unten). Es gibt zwei voneinander unabhängige Einstellungen:
-
Spring Session mit Redis: aktiv bei
redis.useAsSessionStore=true(Standard: false). Das Session-Cookie bleibtJSESSIONID, optional mit Route-Suffix (redis.session.cookie.jvmRoute). Bei einem Knotenausfall findet der verbleibende Knoten die Session auch dann, wenn das Cookie noch das Suffix des ausgefallenen Knotens trägt. Bestimmte Session-Attribute werden bewusst nicht in Redis abgelegt, sondern bleiben auf dem Knoten, der sie angelegt hat (u.a. die Zustände von Cocoon-Formularen und Flowscripts, die Vaadin-Anwendung HR Expert, der angemeldete und der gewechselte Benutzer, der Skin). Der Load Balancer sollte Anfragen einer Session daher möglichst auf demselben Knoten halten. -
Tomcat-Session-Manager (memcached-session-manager mit Redis): wird ausschließlich über ein
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" .../>-Element in derMETA-INF/context.xmldes Webdesk eingeschaltet. In der im WAR ausgeliefertencontext.xmlist dieses Element auskommentiert. Das Docker-Image des Webdesk bringt dagegen eine eigenecontext.xmlmit, die in die Web-Anwendung kopiert wird und das Element aktiv enthält (mitmemcachedNodes="redis://redis"); die Bibliotheken des Session-Managers sind im Image vorhanden. Die Maske "Clusterstatus" meldet "memcached-session-manager / Redis", sobald das Element in dercontext.xmlgefunden wird, auch wenn zusätzlichredis.useAsSessionStore=truegesetzt ist.
Achtung: Vor der Inbetriebnahme muss pro Umgebung geklärt und im "Session-Mode" überprüft werden, welcher Mechanismus tatsächlich aktiv ist. Vor allem bei Docker-Betrieb ist die mitgelieferte context.xml zu beachten.
Für Formulare gibt es zusätzlich die Systemparameter enableFormStateClusterFailover (Standard: false) und useSessionToStoreFormState (Standard: true) der Bean PoOptions. Bei aktiviertem Failover wird der zuletzt gespeicherte Zustand bestimmter Formulare nach einem Knotenwechsel wiederhergestellt; mit useSessionToStoreFormState=true wird der Zustand in der Session (und damit in Redis) abgelegt, sonst in einem replizierten EhCache-Bereich.
Jobs im Cluster
- Ob und mit wie vielen Threads auf einem Knoten Jobs ausgeführt werden, legen
PoJobServiceTarget.activeundnoOfSchedulerThreadsfest (siehe Systemparameter Portal & Organisation). - Arbeitet Webdesk als Cluster (
isDistributed=true, mehr als ein Eintrag inPoOptions.clusterNodesund der eigene Knotenname ist enthalten), erscheint im Job-Editor bei den Triggern das Feld "Ausführen auf Clusternode". Ein Trigger wird nur auf dem Knoten eingeplant, dessen Name dort ausgewählt ist. Ein Trigger ohne Knotenzuordnung wird in dieser Konstellation auf keinem Knoten eingeplant (ausgenommen das einmalige Starten über "Job starten"). - Die Überwachung der Jobs aller Knoten beschreibt Aktive Jobs.
Was nicht automatisch zwischen den Knoten abgeglichen wird
|
Bereich |
Verhalten und Maßnahme |
|---|---|
|
MetaForm-Cache |
Ist von der Replikation ausgenommen. Nach Änderungen an Formulardefinitionen, die nicht auf allen Knoten übernommen wurden, in der Maske "Erw. Funktionen" die Aktion "MetaForm-Cache auf allen Cluster-Knoten ungültig machen" ausführen. Sie leert den MetaForm-Cache auf dem aktuellen und auf den übrigen Knoten. |
|
Weitere nicht replizierte Caches |
Einige Caches sind bewusst lokal: unter anderem die Workflow-Prozessdefinitions-Caches ( |
|
Lucene-Suchindex |
Der Volltextindex liegt im lokalen Dateisystem jedes Knotens und wird beim Start des Knotens aktualisiert (Schlüssel |
|
Menüs, Berechtigungen und weitere Caches per Hand leeren |
Die Aktionen zum Leeren in der Maske "Liste der Caches" und in "Erw. Funktionen" werden auf dem Knoten ausgeführt, auf dem sie aufgerufen werden. Eine gezielte Weitergabe an die anderen Knoten ist nur bei der MetaForm-Aktion vorgesehen; bei sonstigen Caches hängt die Wirkung auf andere Knoten davon ab, ob der Cache repliziert wird (Spalte "Distributed"). |
|
Session-Attribute |
Siehe Abschnitt "HTTP-Sessions im Cluster". |
Maske "Liste der Caches" (po_showCaches)
Die Maske zeigt alle Caches des Knotens, auf dem die Anfrage landet. Mit dem Textfeld "Zeige nur Caches deren Namen folgenden Text beinhalten" kann die Liste gefiltert werden. Je Cache werden angezeigt: "Name", "Einträge", "Effizienz" (Trefferquote in Prozent), "Cache Typ", "Distributed" sowie die Konfiguration (maximale Einträge, Time-to-idle, Time-to-live, eternal). Mit der Option "Anzeige Speicherverbrauch" werden zusätzlich die Spalten "Speicher, in KB" und "Max. Speicher, in KB" sowie die Summen berechnet.
|
Spalte "Distributed" |
Bedeutung |
|---|---|
|
Local |
EhCache-Cache ohne Replikations-Listener: wird nicht zwischen Knoten abgeglichen. |
|
Replicated |
EhCache-Cache mit RMI-/JMS-Replikation oder Caffeine+Redis-Cache mit Abgleich über Redis. |
|
Caffeine (Local) |
Caffeine-Cache ohne Abgleich über Redis. |
|
Terracotta-clustered / Unknown |
EhCache-Cache mit Terracotta-Anbindung bzw. nicht erkannter Cache-Typ. |
Ist der verteilte Betrieb aktiv, zeigt die Maske zusätzlich den Text "Diese Instanz ist Teil eines Clusters und hat den Namen" mit dem Knotennamen und die Schaltfläche "Anzeige Replikationsmitglieder". Sie listet die der Replikation bekannten Partner (bei RMI URL und GUID, bei JMS den Namen); sind keine Partner bekannt, erscheint "No Caching Peers available". Mit "Leeren aller Caches" bzw. dem Symbol "Cache leeren" je Zeile werden Caches des aktuellen Knotens geleert (nach dem Leeren aller Caches ist der Workflow-Cache zu aktualisieren, siehe Liste der Caches).
Maske "Clusterstatus" (po_showClusterStatus)
Beim Öffnen veröffentlicht der Knoten seinen eigenen Status und wartet bis zu 2,5 Sekunden darauf, dass die Meldungen der konfigurierten Knoten eintreffen. Erscheinen danach konfigurierte Knoten weiterhin als fehlend, zeigt die Maske den Hinweis "Die Cluster-Replikation ist noch im Aufbau." mit den Namen der "Konfigurierte Knoten noch nicht sichtbar". Im Normalbetrieb senden alle Knoten ihren Status im Heartbeat (Standard: alle 30 Sekunden).
Die Kopfzeile zeigt "Clusterübersicht" (antwortende Knoten / konfigurierte Knoten), die Anzahl "Veraltet" und "Fehlt" sowie die Topologie:
- "Cluster-Modus": "Verteilt" oder "Einzelserver".
- "Cache-Replikations-Topologie": "RMI", "JMS" oder "Keine".
- "Session-Mode": "Spring Session / Redis", "memcached-session-manager / Redis", "Lokal im Speicher" oder "Unbekannt".
Die Tabelle listet je Knoten "Cluster-Knoten", "Status", "Job-Service" (gestartet oder gestoppt), "Threads", "Aktualisiert am", "Aktive Sessions", "Aktive Jobs", "Laufende Jobs", Speicher (frei, belegt, maximal) sowie "Version", "Revision" und "Branch". Abweichende Versionen zwischen den Knoten sind in den Spalten "Version", "Revision" und "Branch" sofort erkennbar. Die Werte in der Spalte "Status":
|
Status |
Bedeutung |
|---|---|
|
CURRENT |
Der Knoten, dessen Maske gerade angezeigt wird. |
|
RESPONDING |
Konfigurierter Knoten, dessen letzte Statusmeldung nicht älter als 180 Sekunden ist. |
|
STALE |
Die letzte Statusmeldung ist älter als 180 Sekunden (mögliche Ursachen: Knoten ausgefallen, Heartbeat abgeschaltet oder Replikation unterbrochen). |
|
MISSING |
Der Knoten steht in |
|
OBSERVED_ONLY |
Der Knoten sendet Status, steht aber nicht in |
Typische Symptome und Prüfungen
|
Symptom |
Prüfung |
|---|---|
|
Der Eintrag "ClusterNode1" oder ein Knoten steht dauerhaft auf MISSING, obwohl alle Knoten laufen |
|
|
Andere Knoten sind nicht sichtbar (MISSING/STALE), Topologie zeigt "Keine" |
|
|
Änderung an einem Job oder Systemparameter wirkt nur auf einem Knoten |
Die Weitergabe läuft über die Cache-Replikation. Clusterstatus und Replikationsmitglieder prüfen; |
|
Ein Job läuft auf keinem Knoten |
Trigger ohne Eintrag im Feld "Ausführen auf Clusternode" werden im Cluster nicht eingeplant; Knotenstatus in Aktive Jobs prüfen. |
|
Formulare oder Masken zeigen auf einem Knoten alte Felder |
MetaForm-Cache per Aktion auf allen Knoten ungültig machen. |
|
Start bricht mit "Unsafe Redis maxmemory-policy ..." ab |
Redis auf |
|
Start bricht ab: "Unsupported value ... webdesk.hibernate.cache.provider" |
Erlaubt sind |
|
Nach dem Wechsel zu einem anderen Knoten erscheint die Anmeldeseite |
"Session-Mode" im Clusterstatus prüfen. Bei Spring Session: gleiche Redis-Verbindung auf allen Knoten, |
|
Veraltete Daten nach Änderungen auf einem anderen Knoten ( |
Kennzahlen zu Publish-, Apply- und Verbindungsfehlern prüfen; gegebenenfalls Region in |
Checkliste für die Inbetriebnahme
- Pro Knoten einen eindeutigen
PoOptions.clusterNodefestlegen (WfStartup.engineNamebleibt im Normalfall auf dem Standard),isDistributed=trueund – falls gewünscht –useJmsReplication=truemit Broker-Zugang setzen. - Netzwerk prüfen: bei RMI Multicast (Standard 230.0.0.1:4446) zwischen den Knoten, bei JMS Zugriff auf den Broker, außerdem Zugriff aller Knoten auf Redis.
- Redis-Verbindung (
redis.connection.urloderredis.clusterNodes) auf allen Knoten setzen; Passwort nur aus einer geschützten Quelle. - Entscheiden, welche Session-Art verwendet wird (
redis.useAsSessionStoreoder Tomcat-Session-Manager) und Route des Load Balancers abstimmen (redis.session.cookie.jvmRoute). - Hibernate-Anbieter einheitlich festlegen (
webdesk.hibernate.cache.provider); beiredis-caffeineRedis-Richtlinienoevictionund das Löschen der Schlüsselwd:hibernate:l2:*berücksichtigen. - Knoten starten; in der Maske "Systemparameter" die Liste
PoOptions.clusterNodesmit allen Knotennamen füllen. - In der Maske "Clusterstatus" prüfen: alle Knoten RESPONDING bzw. CURRENT, Topologie wie geplant, einheitliche Versionen.
- Jobs: für jeden Trigger den Knoten im Feld "Ausführen auf Clusternode" festlegen und in "Aktive Jobs" kontrollieren.


Keine Kommentare vorhanden.