Adobe Experience Manager(AEM)では、バイナリデータをコンテンツノードとは別に格納できます。バイナリデータはデータストアに格納され、コンテンツノードはノードストアに格納されます。
データストアとノードストアはどちらも OSGi 設定を使用して設定できます。各 OSGi 設定は、永続識別子(PID)を使用して参照されます。
警告:
新しいバージョンの Oak では、OSGi 設定ファイルについて新しい命名スキームと形式を採用しています。新しい命名スキームでは、設定ファイルの名前に .config を付けることが規定されています。また、新しい形式では、値を型指定することが規定されています。こちらを参照してください。
古いバージョンの Oak からアップグレードする場合は必ず、crx-quickstart/install フォルダーのバックアップを最初に作成してください。アップグレード後、アップグレードしたインストール環境にフォルダーの内容を復元し、設定ファイルの拡張子を .cfg から .config に変更します。
AEM 5.x のインストール環境からのアップグレードに備えてこの記事をお読みになっている場合は、アップグレードに関するドキュメントを先に参照してください。
セグメントノードストアは、AEM6 におけるアドビの TarMK 実装の基盤です。このストアでは、org.apache.jackrabbit.oak.segment.SegmentNodeStoreService という PID を設定に使用します。
警告:
セグメントノードストアの PID は、以前のバージョンの AEM 6 の org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService から、AEM 6.3 では org.apache.jackrabbit.oak.segment.SegmentNodeStoreService に変更されました。この変更が反映されるように、必要な設定を調整してください。
以下のオプションを設定できます。
- repository.home:リポジトリのホームのパスです。リポジトリ関連のデータが格納されます。デフォルトでは、crx-quickstart/segmentstore ディレクトリにセグメントファイルが格納されます。
- tarmk.size:セグメントの最大サイズ(MB 単位)です。デフォルトの最大サイズは 256 MB です。
- customBlobStore:カスタムデータストアが使用されることを示すブール値です。デフォルト値は false です。
次に、org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.config ファイルのサンプルを示します。
#Path to repo repository.home="crx-quickstart/repository" #Max segment size tarmk.size=I"256" #Custom data store customBlobStore=B"false"
ドキュメントノードストアは、AEM の MongoMK 実装の基盤です。このストアでは、org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService という PID を使用します。以下の設定オプションを使用できます。
- mongouri:Mongo データベースに接続するために必要な MongoURI です。デフォルトは、mongodb://localhost:27017 です。
- db:Mongo データベースの名前です。デフォルト値は Oak です。ただし、新しい AEM 6 のインストールでは、デフォルトのデータベース名として aem-author が使用されます。
- cache:キャッシュサイズ(MB 単位)です。これは DocumentNodeStore で使用される様々なキャッシュに分散されます。デフォルト値は 256 です。
- changesSize:Mongo で差分出力のキャッシュに使用される capped コレクションのサイズ(MB 単位)です。デフォルト値は 256 です。
- customBlobStore:カスタムデータストアが使用されることを示すブール値です。デフォルト値は false です。
次に、org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService.config ファイルのサンプルを示します。
#Mongo server details mongouri="mongodb://localhost:27017" #Name of Mongo database to use db="aem-author" #Store binaries in custom BlobStore customBlobStore=B"false"
多数のバイナリを処理する場合は、最大限のパフォーマンスを確保するために、デフォルトのノードストアではなく外部のデータストアを使用することをお勧めします。
例えば、プロジェクトで多数のメディアアセットが必要な場合は、それらをファイルデータストアまたは S3 データストアに格納すると、MongoDB 内に直接格納するよりも迅速にアセットにアクセスできます。
ファイルデータストアを使用すると、MongoDB よりもパフォーマンスが向上します。多数のアセットがある場合は、Mongo のバックアップと復元の処理速度も低下します。
各種データストアと設定の詳細については後述します。
注意:
カスタムデータストアを有効にするには、それぞれのノードストア設定ファイル(セグメントノードストアまたはドキュメントノードストア)で customBlobStore が true に設定されていることを確認する必要があります。
これは Jackrabbit 2 に含まれる FileDataStore の実装であり、バイナリデータを通常のファイルとしてファイルシステムに格納する手段を提供します。このストアでは、org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore という PID を使用します。
以下の設定オプションを使用できます。
- repository.home:リポジトリのホームのパスです。リポジトリ関連の様々なデータが格納されます。デフォルトでは、crx-quickstart/repository/datastore ディレクトリにバイナリファイルが格納されます。
- path:ファイルを格納するディレクトリのパスです。このオプションを指定すると、repository.home の値よりも優先されます。
- minRecordLength:データストアに格納するファイルの最小サイズ(バイト単位)です。この値よりも小さいバイナリコンテンツはインライン化されます。
注意:
NAS を使用して共有ファイルデータストアを格納する場合は、パフォーマンスの問題を回避するために、必ず高性能のデバイスのみを使用してください。
Amazon の Simple Storage Service(S3)にデータを格納するように AEM を設定できます。このストアでは、org.apache.jackrabbit.oak.plugins.blob.datastore.S3DataStore.config という PID を設定に使用します。
S3 データストア機能を有効にするには、S3 データストアコネクタを含む機能パックをダウンロードしてインストールする必要があります。アドビリポジトリに移動し、1.6.x バージョンの機能パックの中から最新のバージョン(com.adobe.granite.oak.s3connector-1.6.0.zip など)をダウンロードします。
注意:
TarMK を選択して AEM 6.3 を使用する場合、デフォルトでは、FileDataStore にバイナリが格納されます。S3 データストアと共に TarMK を使用するには、次のように、crx3tar-nofds 実行モードを使用して AEM を起動する必要があります。
java -jar aem6.3.jar -r crx3tar-nofds
-
機能パックを解凍した一時的な場所に戻り、次のフォルダーの内容をコピーします。
- jcr_root/libs/system/config
コピー先
- <aem-install>/crx-quickstart/install
現在の設定に必要な設定ファイルのみをコピーしてください。専用データストアと共有データストアのどちらの設定の場合も、org.apache.jackrabbit.oak.plugins.blob.datastore.S3DataStore.config ファイルをコピーします。
注意:
クラスターセットアップでは、前述の手順をクラスターのすべてのノードで 1 ノードずつ実行してください。また、すべてのノードで必ず同じ S3 設定を使用してください。
-
アドビリポジトリから最新バージョンの 1.6.x 機能パックをダウンロードします。
次のオプションを指定して設定ファイルを使用できます。
- accessKey:AWS アクセスキーです。
- secretKey:AWS 秘密アクセスキーです。
- s3Bucket:バケット名です。
- s3Region:バケットのリージョンです。
- path:データストアのパスです。デフォルト値は <AEM install folder>/repository/datastore です。
- minRecordLength:データストアに格納するオブジェクトの最小サイズです。デフォルト値は 16 KB です。
- maxCachedBinarySize:このサイズ以下のサイズのバイナリがメモリキャッシュに格納されます。サイズはバイト単位です。デフォルト値は 17408(17 KB)です。
- cacheSize:キャッシュのサイズです。値はバイト単位で指定します。デフォルト値は 64 GB です。
- secret:共有データストア設定でバイナリなしのレプリケーションを使用する場合にのみ使用します。
- stagingSplitPercentage:非同期アップロードのステージングに使用するように設定するキャッシュサイズの割合(%)です。デフォルト値は 10 です。
- uploadThreads:非同期アップロードに使用するアップロードスレッドの数です。デフォルト値は 10 です。
- stagingPurgeInterval:完了したアップロードをステージングキャッシュからパージする間隔(秒単位)です。デフォルト値は 300 秒(5 分)です。
- stagingRetryInterval:失敗したアップロードの再試行間隔(秒単位)です。デフォルト値は 600 秒(10 分)です。
米国標準 | us-standard |
米国西部 | us-west-2 |
米国西部(北カリフォルニア) | us-west-1 |
欧州(アイルランド) | EU |
アジア太平洋(シンガポール) | ap-southeast-1 |
アジア太平洋(シドニー) | ap-southeast-2 |
アジア太平洋(東京) | ap-northeast-1 |
南アメリカ(サンパウロ) | sa-east-1 |
-
アドビリポジトリから最新バージョンの 1.6.x 機能パックをダウンロードします。
-
Tar または MongoDB ストレージと連携するように AEM を設定済みの場合は、続行する前に、既存の設定ファイルを <aem-install>/crx-quickstart/install フォルダーから削除します。削除する必要があるファイルは次のとおりです。
- TarMK の場合:org.apache.jackrabbit.oak.document.DocumentNodeStoreService.config
- MongoMK の場合:crx-quickstart/install の org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.config
-
機能パックを解凍した一時的な場所に戻り、次のフォルダーの内容をコピーします。
- jcr_root/libs/system/config
コピー先
- <aem-install>/crx-quickstart/install
現在の設定に必要な設定ファイルのみをコピーしてください。以下の詳細を参照してください。
- 専用データストア設定の場合、org.apache.jackrabbit.oak.plugins.blob.datastore.S3DataStore.config ファイルをコピーします。
- 共有データストア設定の場合、org.apache.jackrabbit.oak.plugins.blob.datastore.SharedS3DataStore.config ファイルをコピーします。
-
java -Xmx4096m -jar aem-quickstart-6.3.0.jar -v -x crx2oak -xargs -- --load-profile segment-custom-ds
java -Xmx4096m -jar aem-quickstart-6.3.0.jar -v -x crx2oak -xargs -- --load-profile mongo-custom-ds -T mongo-uri=mongo://mongo-host:mongo-port -T mongo-db=mongo-database-name
注意:
S3DataStore、CachingFileDataStore および AzureDataStore のデータストア実装では、ローカルファイルシステムのキャッシュがサポートされています。CachingFileDataStore の実装は、データストアがネットワークファイルシステム(NFS)上にある場合に便利です。
古いキャッシュ実装(Oak 1.6 より前)からアップグレードする場合は、ローカルファイルシステムのキャッシュディレクトリの構造に違いがあります。古いキャッシュ構造では、ダウンロードされたファイルとアップロードされたファイルの両方がキャッシュパスの直下に置かれていました。新しい構造では、ダウンロードとアップロードが分離され、キャッシュパスの下の upload と download という名前の 2 つのディレクトリに格納されます。アップグレードプロセスはシームレスにおこなわれ、保留中のアップロードがある場合はアップロードがスケジュールされ、キャッシュ内に以前にダウンロードされたファイルがある場合は初期化時にキャッシュに配置されます。
oak-run の datastorecacheupgrade コマンドを使用して、キャッシュをオフラインでアップグレードすることもできます。このコマンドの実行方法について詳しくは、oak-run モジュールの readme を参照してください。
キャッシュにはサイズ制限があり、cacheSize パラメーターを使用して設定できます。
ダウンロード
データストアからアクセスする前に、要求されたファイル/Blob のレコードがローカルキャッシュでチェックされます。ファイルをキャッシュに追加しているときに、設定された制限(cacheSize パラメーターを参照)をキャッシュが超えると、領域を再利用できるように、ファイルの一部が消去されます。
非同期アップロード
キャッシュでは、データストアへの非同期アップロードがサポートされています。ファイルは(ファイルシステム上の)キャッシュでローカルにステージングされ、非同期ジョブでファイルのアップロードが開始されます。非同期アップロードの数は、ステージングキャッシュのサイズによって制限されます。ステージングキャッシュのサイズは、stagingSplitPercentage パラメーターを使用して設定します。このパラメーターでは、ステージングキャッシュに使用するキャッシュサイズの割合(%)を定義します。また、ダウンロードに使用可能なキャッシュの割合(%)は、(100 - stagingSplitPercentage) * cacheSize として計算されます。
非同期アップロードはマルチスレッドです。スレッドの数は、uploadThreads パラメーターを使用して設定します。
アップロードが完了すると、ファイルはメインダウンロードキャッシュに移動します。ステージングキャッシュのサイズが制限を超えると、それまでの非同期アップロードが完了して、ステージングキャッシュ内の領域を再び使用できるようになるまで、ファイルは同期的にデータストアにアップロードされます。アップロードされたファイルは、定期ジョブによってステージング領域から削除されます。定期ジョブの間隔は、stagingPurgeInterval パラメーターで設定します。
(ネットワークの障害などが原因で)失敗したアップロードは再試行キューに配置され、定期的に再試行されます。再試行間隔は、stagingRetryInterval parameter パラメーターを使用して設定します。
-
まず、データストアを共有するために必要なデータストア設定ファイルを各インスタンスで作成します。
- FileDataStore を使用する場合、org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.config という名前のファイルを作成し、<aem-install>/crx-quickstart/install フォルダーに格納します。
- S3 をデータストアとして使用する場合、前述のように org.apache.jackrabbit.oak.plugins.blob.datastore.S3DataStore.config という名前のファイルを <aem-install>/crx-quickstart/install フォルダーに作成します。
-
同じデータストアを指すようにデータストア設定ファイルを各インスタンスで変更します。詳しくは、こちらの記事を参照してください。
-
インスタンスのクローンが既存のサーバーから作成された場合、リポジトリがオフラインになっている間に、最新の oak-run ツールを使用して新しいインスタンスの clusterId を削除する必要があります。実行する必要があるコマンドは次のとおりです。
java -jar oak-run.jar resetclusterid < repository path | Mongo URI >
注意:
セグメントノードストアを設定する場合、リポジトリパスを指定する必要があります。デフォルトでは、パスは <aem-install-folder>/crx-quickstart/repository/segmentstore です。ドキュメントノードストアを設定する場合、Mongo の接続文字列 URI を使用できます。
注意:
oak-run ツールは、次の場所からダウンロードできます。
http://mvnrepository.com/artifact/org.apache.jackrabbit/oak-run/
AEM インストールで使用している Oak バージョンに応じて、様々なバージョンのツールを使用する必要があることに注意してください。ツールを使用する前に、以下のバージョン要件を確認してください。
- Oak バージョン 1.2.x については、oak-run 1.2.12 以降を使用します。
- 上述のものよりも新しい Oak バージョンについては、AEM インストールの Oak コアと一致するバージョンの oak-run を使用します。
- Oak バージョン 1.2.x については、oak-run 1.2.12 以降を使用します。
-
最後に、設定を検証します。そのためには、データストアを共有する各リポジトリによってデータストアに追加された一意のファイルを探す必要があります。ファイルの形式は repository-[UUID] です。UUID は、個々のリポジトリの一意の識別子です。
つまり、正しい設定には、データストアを共有するリポジトリと同じ数の一意のファイルがあります。
ファイルは、データストアに応じて別々に格納されます。
- FileDataStore の場合、データストアフォルダーのルートパスにファイルが作成されます。
- S3DataStore の場合、設定済みの S3 バケットの META フォルダーにファイルが作成されます。
Microsoft の Azure ストレージサービスにデータを格納するように AEM を設定できます。このストアでは、org.apache.jackrabbit.oak.plugins.blob.datastore.AzureDataStore.config という PID を設定に使用します。
Azure データストア機能を有効にするには、Azure コネクタを含む機能パックをダウンロードしてインストールする必要があります。アドビリポジトリにアクセスし、1.6.x バージョンの機能パックの中から最新のバージョン(com.adobe.granite.oak.azureblobconnector-1.6.3.zip など)をダウンロードします。
注意:
TarMK を選択して AEM 6.3 を使用する場合、デフォルトでは、FileDataStore にバイナリが格納されます。Azure データストアと共に TarMK を使用するには、次のように、crx3tar-nofds 実行モードを使用して AEM を起動する必要があります。
java -jar aem6.3.jar -r crx3tar-nofds
次のオプションを指定して設定ファイルを使用できます。
- azureSas="":コネクタのバージョン 1.6.3 で、Azure Shared Access Signature(SAS)のサポートが追加されました。SAS とストレージ資格情報の両方が設定ファイルに存在する場合は、SAS が優先されます。SAS について詳しくは、公式ドキュメントを参照してください。「=」文字は必ず、「\=」のようにエスケープしてください。
- azureBlobEndpoint="":Azure Blob エンドポイントです。例えば、https://<storage-account>.blob.core.windows.net などです。
- accessKey="":ストレージアカウント名です。Microsoft Azure の認証の資格情報について詳しくは、公式ドキュメントを参照してください。
- secretKey="":ストレージアクセスキーです。「=」文字は必ず、「\=」のようにエスケープしてください。
- container="":Microsoft Azure の Blob ストレージコンテナ名です。コンテナは、一連の Blob をグループ化したものです。詳しくは、公式ドキュメントを参照してください。
- maxConnections="":操作ごとの同時要求の数です。デフォルト値は 1 です。
- maxErrorRetry="":要求ごとの再試行回数です。デフォルト値は 3 です。
- socketTimeout="":要求に使用するタイムアウト間隔(ミリ秒単位)です。デフォルト値は 5 分です。
上述の設定に加えて、次の設定も指定できます。
- path:データストアのパスです。デフォルト値は <aem-install>/repository/datastore です。
- RecordLength:データストアに格納するオブジェクトの最小サイズです。デフォルト値は 16 KB です。
- maxCachedBinarySize:このサイズ以下のサイズのバイナリがメモリキャッシュに格納されます。サイズはバイト単位です。デフォルト値は 17408(17 KB)です。
- cacheSize:キャッシュのサイズです。値はバイト単位で指定します。デフォルト値は 64 GB です。
- secret:共有データストア設定でバイナリなしのレプリケーションを使用する場合にのみ使用します。
- stagingSplitPercentage:非同期アップロードのステージングに使用するように設定するキャッシュサイズの割合(%)です。デフォルト値は 10 です。
- uploadThreads:非同期アップロードに使用するアップロードスレッドの数です。デフォルト値は 10 です。
- stagingPurgeInterval:完了したアップロードをステージングキャッシュからパージする間隔(秒単位)です。デフォルト値は 300 秒(5 分)です。
- stagingRetryInterval:失敗したアップロードの再試行間隔(秒単位)です。デフォルト値は 600 秒(10 分)です。
注意:
次のように、すべての設定を引用符で囲む必要があります。
accessKey="ASDASDERFAERAER" secretKey="28932hfjlkwdo8fufsdfas\=\="
注意:
この機能は、Apache Oak バージョン 1.2.x 以降で実行されている AEM 6.1 でのみ使用できます。
データストアのガベージコレクションプロセスは、データストア内の未使用のファイルを削除するために使用します。このプロセスによって、貴重なディスク領域が解放されます。
データストアのガベージコレクションを実行する手順は次のとおりです。
注意:
クラスターまたは共有データストア設定(Mongo または Segment Tar を使用)でガベージコレクションを実行すると、特定の Blob ID を削除できないことについての警告がログに表示されることがあります。これは、以前のガベージコレクションで削除された blob ID が、その ID が削除されたことを知らない他のクラスターまたは共有ノードによって誤って再度参照されることが原因で発生します。その結果、前回の実行時に既に削除された ID を、ガベージコレクションで再度削除しようとするので、警告がログに記録されます。この動作はパフォーマンスや機能に影響しません。
新しいバージョンの AEM では、複数のリポジトリによって共有されるデータストアでもガベージコレクションを実行できます。共有データストアでデータストアのガベージコレクションを実行できるようにするには、次の手順に従います。
-
バイナリガベージコレクションで説明されている手順を、データストアを共有するすべてのリポジトリインスタンスで個別に実行します。ただし、markOnly パラメーターに必ず true と入力してから「Invoke」ボタンをクリックしてください。