Frage, Problem

Ich möchte Speicherplatz sparen, wie kann ich den Speicher von CRX-Dateien konsolidieren und freigeben?

Hinweis: Die gleiche Methode kann auf Instanzen von CQ5 WCM Version 5.2.1 angewendet werden

Antwort, Auflösung

Eine Möglichkeit, Speicherplatz in Ihrer Umgebung zu erhalten, besteht darin, das CRX-Datenspeicherverzeichnis über eine Netzwerkfreigabe zwischen mehreren CRX-Installationen freizugeben.

WARNUNG: Bei diesem Vorgang müssen Sie Ihr Datenspeicherverzeichnis auf ein freigegebenes Netzlaufwerk verschieben. Wenn Sie Ihr Datenspeicherverzeichnis von einem lokalen Ordner in ein freigegebenes Netzwerkverzeichnis verschieben, wird die Leistung erheblich beeinträchtigt. Bitte beachten Sie dies vor der Implementierung dieses Prozesses und wägen Sie die Vorteile entsprechend ab.

Zuallererst, was ist der Datenspeicher?

Der Datenspeicher wird von CRX zum Speichern großer Binärwerte verwendet. Normalerweise werden alle Knoten- und Eigenschaftsdaten in einem Persistence Manager gespeichert, aber bei großen Binärdateien kann eine spezielle Behandlung die Leistung verbessern und die Festplattennutzung reduzieren.

So kombinieren Sie den Datenspeicher zwischen mehreren CRX-Instanzen

Stellen Sie sich ein Szenario vor, in dem Sie zwei CRX-Instanzen A und B haben (es spielt keine Rolle, ob es sich um einen Autor oder eine Veröffentlichung handelt). A wird unter /opt/day/crxA installiert und B wird unter /opt/day/crxB installiert. Bei einer standardmäßigen nicht gruppierten Installation von CRX wird der Datenspeicher unter <path to instance>/crx-quickstart/repository/shared/repository/datastore gespeichert.

Beachten Sie, dass Ihr "freigegebener" Verzeichnispfad möglicherweise anders ist, wenn Sie ein Cluster "freigegebenes" Verzeichnis konfiguriert haben. Der Datenspeicher wird unter <shared path>/repository/datastore gespeichert.

Anweisungen: Kopieren und konsolidieren/kombinieren Sie die Dateien der Datenspeicher von Instanz A und Instanz B (wenn sich A und B auf 2 verschiedenen physischen Servern befinden und eine gemeinsame Netzwerkfreigabe /mnt/nfsshare1 verwenden):

Auf Server A
%> cp -R /opt/day/crxA/crx-quickstart/repository/shared/repository/datastore /mnt/nfsshare1/combined-datastore

auf Server B
%> cp -R /opt/day/crxB/crx-quickstart/repository/shared/repository/datastore /mnt/nfsshare1/combined-datastore

Konfigurieren Sie repository.xml so, dass sie auf den neuen Datenspeicherpfad für Instanz A und B verweist. Öffnen Sie repository.xml in Instanz A, und ändern Sie den freigegebenen Datenspeicherpfad (/opt/day/cq5A/crx-quickstart/server/runtime/0/crx/WEB-INF/repository.xml)

<DataStore class="org.apache.jackrabbit.core.data.FileDataStore"> <param name="path" value="/mnt/nfsshare1/combined-datastore"/> <param name="minRecordLength" value="4096"/> </DataStore>

Ausführen der automatischen Speicherbereinigung, wenn der Datenspeicher von mehreren Instanzen von CRX freigegeben wird

WARNUNG: Dies gilt nur für CRX1.4.2 oder gepatchte Versionen von 1.4.1, da die Datenspeicherbereinigung nur in 1.4.1 ordnungsgemäß funktioniert, nachdem ein CRX-Hotfix angewendet wurde (kontaktieren Sie Day-Support für weitere Informationen). Bitte testen Sie dies in einer Entwicklungsumgebung, bevor Sie es in der Produktionsumgebung implementieren.

Wenn mehrere CRX-Instanzen den gleichen Datenspeicher verwenden: Rufen Sie zuerst gc.scan() auf der Instanz A auf, dann auf B usw. Rufen Sie am Ende gc.deleteUnused() auf Instanz A auf:

Hier ist der Initialisierungscode:

import org.apache.jackrabbit.core.data.GarbageCollector; //... GarbageCollector gc; SessionImpl si = (SessionImpl)session; gc = si.createDataStoreGarbageCollector(); // optional (wenn Sie einen Fortschrittsbalken / -ausgabe implementieren möchten): gc.setScanEventListener(this);

Folgender Pseudocode zeigt die Reihenfolge, in der die Speicherbereinigungsscans auf den separaten Instanzen ausgeführt werden sollten (in diesem Beispiel wird von einem Cluster mit 3 Instanzen A, B und C ausgegangen):

gcA.scan(); gcB.scan(); gcC.scan(); gcA.stopScan(); gcA.deleteUnused(); gcB.stopScan(); gcC.stopScan();

Eine alternative Methode ist:

  1. Notieren Sie die aktuelle Zeit = X
  2. Führen Sie gc.scan() für jedes Repository aus.
  3. Dateien mit dem letzten Änderungsdatum älter als X manuell löschen.

Mehr Informationen hier http://wiki.apache.org/jackrabbit/DataStore#Running_Data_Store_Garbage_Collection_.28Jackrabbit_1.x.29

Betroffene Versionen

CRX 1.4.2.X

[1] http://wiki.apache.org/jackrabbit/DataStore

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie