第25章 サイト間のレプリケーション
クロスサイト(x-site)レプリケーションにより、あるクラスターから他のクラスターにデータをバックアップできます。これは、地理的に異なる場所にある可能性があります。クロスサイトレプリケーションは JGroups の RELAY2 プロトコル 上に構築されます。本ガイド では、クロスサイトレプリケーションの技術的な設計について説明します。
サイト間のレプリケーションには、サイトマスターノード(バックアップを受信し、これを適用するノードなど)で実行しているバックアップキャッシュが必要です。バックアップキャッシュは、最初のバックアップ要求を受け取ると自動的に起動します。
25.1. デプロイメント例
以下の図は、複製されたサイトが可能なセットアップと、デプロイメントに含まれる個々の要素の説明を示しています。その後、オプションは今後の段落で広範囲に説明されています。上記の図のコメント:

- LON、NYC、および SFO の 3 つのサイトがあります。
- 各サイトには、Red Hat Data Grid クラスターには(通常)異なる数の物理ノード(LON の 3 ノード、SFO の NYC ノードおよび 3 つのノード)が実行されている Red Hat Data Grid クラスターがあります。
- 「users」キャッシュは、LON、NYC、および SFO でアクティブになっています。これらのサイトの「users」キャッシュの更新は、他のサイトにも複製されます。
- サイト間で異なるレプリケーションメカニズムを使用できます。例:1 つは、SFO がデータを同期的に NYC にバックアップし、非同期的に LON に設定できます。
- 「ユーザー」キャッシュは、あるサイトから別のサイトに異なる設定を持つことができます。たとえば、LON サイトの numOwners=2 で配布され、NYC サイトの REPL、SFO サイトの numOwners=1 で配布されます。
- JGroups はサイト間通信とサイト内通信の両方に使用されます。RELAY2 がサイト間の通信に使用されます。
- 「順序」は、LON のローカルサイトです。つまり、「orders」のデータの更新は、リモートサイトに複製されません。以下のセクションでは、サイト間のレプリケーションの特定の側面について詳細に説明しています。クロスサイトレプリケーション機能の基盤は RELAY2 であるため、クロスサイトに移動する前に JGroups の RELAY2 ドキュメントを読むことを強く推奨します。設定
クロスサイトのレプリケーション設定は、以下のファイルを分散します。
- 各キャッシュのバックアップポリシーは、Red Hat Data Grid .xml 設定ファイル(infinispan.xml)で定義されます。
- クラスターの JGroups xml 設定ファイル: RELAY2 プロトコルを JGroups プロトコルスタック(jgroups.xml)に追加する必要があります。
- RELAY2 設定ファイル: RELAY2 には独自の設定ファイル( relay2.xml )があります。
- RELAY2 によって使用される JGroups チャネルには、独自の設定ファイル(jgroups-relay2.xml)の Red Hat Data Grid XML 設定ファイルがあります。
ローカルサイトはグローバル設定セクションで定義されます。local は、この設定ファイルを使用するノードがあるサイトです(上記の例では、ローカルサイトは「LON」です)。
infinispan.xml
<transport site="LON" />
同じ設定をプログラムで実行できます。
GlobalConfigurationBuilder lonGc = GlobalConfigurationBuilder.defaultClusteredBuilder(); lonGc.site().localSite("LON");
サイトの名前(大文字)は、JGroups の RELAY2 プロトコル設定ファイル内で定義されたサイトの名前と一致する必要があります。各キャッシュはグローバル設定のほかに、「site」要素にそのバックアップポリシーを指定します。
infinispan.xml
<distributed-cache name="users"> <backups> <backup site="NYC" failure-policy="WARN" strategy="SYNC" timeout="12000"/> <backup site="SFO" failure-policy="IGNORE" strategy="ASYNC"/> <backup site="LON" strategy="SYNC" enabled="false"/> </backups> </distributed-cache>
「users」キャッシュは、そのデータを「NYC」および「SFO」サイトにバックアップします。「LON」がバックアップサイトとして表示されますが、「enabled」属性が false に設定されているため、無視されます。サイトのバックアップごとに、以下の設定属性を指定できます。
- strategy - データのバックアップに使用されるストラテジー(「SYNC」または「ASYNC」)。デフォルトは「ASYNC」です。
failure-policy: バックアップ中に失敗した場合にシステムが何を行うかを決定します。以下の値が使用できます。
- IGNORE - ローカル操作/トランザクションを成功させる
- WARN - IGNORE と同じですが、警告メッセージをログに記録します。デフォルトです。
- FAIL - "strategy" が "SYNC" の場合のみ有効で、ユーザーに例外をスローしてローカルクラスター操作/トランザクションが失敗します。
- CUSTOM: ユーザー提供。以下の「failurePolicyClass」を参照してください。
- failurePolicyClass: 'failure-policy' が 'CUSTOM' に設定されている場合、この属性は必須です。org.infinispan.xsite.CustomFailurePolicy を実装するクラスの完全修飾名が含まれる必要があります。
- timeout: データをリモートでバックアップする際に使用するタイムアウト(ミリ秒単位)。デフォルトは 10000(10 秒)です。
同じ設定をプログラムで実行できます。
ConfigurationBuilder lon = new ConfigurationBuilder(); lon.sites().addBackup() .site("NYC") .backupFailurePolicy(BackupFailurePolicy.WARN) .strategy(BackupConfiguration.BackupStrategy.SYNC) .replicationTimeout(12000) .sites().addInUseBackupSite("NYC") .sites().addBackup() .site("SFO") .backupFailurePolicy(BackupFailurePolicy.IGNORE) .strategy(BackupConfiguration.BackupStrategy.ASYNC) .sites().addInUseBackupSite("SFO")
上記の「ユーザー」キャッシュは、データがレプリケートされているリモートサイト上のキャッシュを認識しません。デフォルトでは、リモートサイトはバックアップデータを起点と同じ名前を持つキャッシュに書き込みます(つまり「users」)。この動作は、「backupFor」要素で上書きできます。たとえば、SFO で以下の設定により、「usersLONBackup」キャッシュが LON サイトにある「users」キャッシュのバックアップキャッシュとして機能します。
infinispan.xml
<infinispan> <cache-container default-cache=""> <distributed-cache name="usersLONBackup"> <backup-for remote-cache="users" remote-site="LON"/> </distributed-cache> </cache-container> </infinispan>
同じ設定をプログラムで実行できます。
ConfigurationBuilder cb = new ConfigurationBuilder(); cb.sites().backupFor().remoteCache("users").remoteSite("LON");
25.1.1. ローカルクラスターの jgroups .xml 設定
これは、ローカル(オンサイト)の Red Hat Data Grid クラスターの設定ファイルです。これは、Red Hat Data Grid 設定ファイルから参照されています。以下の「configurationFile」を参照してください。
infinispan.xml
<infinispan> <jgroups> <stack-file name="external-file" path="jgroups.xml"/> </jgroups> <cache-container> <transport stack="external-file" /> </cache-container> ... </infinispan>
サイト間の呼び出しを許可するには、RELAY2 プロトコルを jgroups 設定で定義されたプロトコルスタックに追加する必要があります(サンプルの接続済み jgroups.xml を参照してください)。
25.1.2. RELAY2 設定ファイル
RELAY2 設定ファイルは jgroups.xml からリンクされます(割り当てられる relay2.xml を参照)。リモートサイトと通信するために、このクラスターおよび RELAY2 によって使用される JGroups 設定ファイルも定義します。