質問、問題

ディスクスペースを節約したいのですが、CRX データファイルのストレージを統合して共有することができますか?

注意:同じ方法は、CQ5 WCM バージョン 5.2.1のインスタンスに適用できます

回答、解決策

あなたの環境でディスク領域を保持する方法の 1 つは、複数の CRX インストールで、ネットワーク共有を介して CRX データストアディレクトリを共有することです。

警告:このプロセスは共有ネットワークドライブにデータストアのディレクトリを移動する必要があります。ローカルフォルダーから共有ネットワークディレクトリにデータストアディレクトリを移動すると、パフォーマンスが大幅に低下します。このプロセスを実装し利益を考量する前に、このプロセスを検討してください。

まず初めに、データストアとは何ですか?

データストアは CRX が大きなバイナリ値を格納するために使用します。通常、すべてノードおよびプロパティデータは永続性マネージャーに格納されますが、例えば大規模なバイナリの場合は、特殊な処理によってパフォーマンスを改善し、ディスク使用量を減らすことができます。

複数の CRX インスタンス間でデータストアを結合する方法

2つの CRX インスタンス、AとB(作成者かパブリッシュかにかかわらず)があるシナリオを考えます。Aは /opt/day/crxA の下にインストールされ、B は /opt/day/crxB の下にインストールされます。CRX のインストールのデフォルトでは、データストアは、<path to instance>/crx-quickstart/repository/shared/repository/datastore の下に保存されます。

クラスターを「shared」ディレクトリに設定している場合は、「共有」ディレクトリのパスが異なる場合があります。データストアは、<shared path>/repository/datastore の下に保存されます。

手順:A と B のデータストアインスタンスのファイルをコピーし、統合/結合します(A と B が 2 つの異なる物理サーバーにあり、一般的なネットワーク共有/mnt/nfsshare1を使用している場合):

サーバー A
%> cp -R /opt/day/crxA/crx-quickstart/repository/shared/repository/datastore /mnt/nfsshare1/combined-datastore

サーバー B
%> cp -R /opt/day/crxB/crx-quickstart/repository/shared/repository/datastore /mnt/nfsshare1/combined-datastore

インスタンス A の Open repository.xml のインスタンス A と B の両方の新しいデータストアパスを示す repository.xml を設定し、データストア共有パスを変更します(/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>

複数の CRX インスタンスでデータストアが共有されている場合に、データストアのガベージコレクションを実行する方法

警告:これは CRX1.4.2 またはパッチ適用済みデータストアのガベージコレクションとして 1.4.1 のみに適用され、CRX ホットフィックス(詳細はデイサポートにお問い合わせください)を適用後に、1.4.1 のみに正常に機能します。この問題を実稼働環境で実装する前に、開発環境でテストしてください。

複数の CRX インスタンスが同じデータストアを使用している場合:まずインスタンス A で gc.scan() を呼び出してから、次に B などと続きます。最後に、インスタンス A で gc.deleteUnused() を呼び出します。

初期化コードを次に示します。

import org.apache.jackrabbit.core.data.GarbageCollector; //... GarbageCollector gc; SessionImpl si = (SessionImpl)session; gc = si.createDataStoreGarbageCollector(); // オプション(進捗状況バー/出力を実装したい場合):gc.setScanEventListener(this);

別のインスタンスでのガベージコレクションスキャンの実行順序を示す擬似コードは次のようになります(この例では、3つのインスタンスクラスター A、B、C を想定します)。

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

代替メソッドは次のとおりです。

  1. 現在の時刻 = X を書き留める
  2. リポジトリごとに gc.scan() を実行する
  3. 日付が X よりも古いファイルを手動で削除する

詳細は、http://wiki.apache.org/jackrabbit/DataStore#Running_Data_Store_Garbage_Collection_.28Jackrabbit_1.x.29こちらを参照してください。

影響を受けるバージョン

CRX 1.4.2.X

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

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー