Data Grid の埋め込み
Data Grid を埋め込みライブラリーとして実行
概要
Red Hat Data Grid リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、高性能の分散型インメモリーデータストアです。
- スキーマレスデータ構造
- さまざまなオブジェクトをキーと値のペアとして格納する柔軟性があります。
- グリッドベースのデータストレージ
- クラスター間でデータを分散および複製するように設計されています。
- エラスティックスケーリング
- サービスを中断することなく、ノードの数を動的に調整して要件を満たします。
- データの相互運用性
- さまざまなエンドポイントからグリッド内のデータを保存、取得、およびクエリーします。
Data Grid のドキュメント リンクのコピーリンクがクリップボードにコピーされました!
Data Grid のドキュメントは、Red Hat カスタマーポータルで入手できます。
Data Grid のダウンロード リンクのコピーリンクがクリップボードにコピーされました!
Red Hat カスタマーポータルで Data Grid Software Downloads にアクセスします。
Data Grid ソフトウェアにアクセスしてダウンロードするには、Red Hat アカウントが必要です。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
第1章 Data Grid Maven リポジトリーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid Java ディストリビューションは Maven から入手できます。
顧客ポータルから Data Grid Maven リポジトリーをダウンロードするか、パブリック Red Hat Enterprise Maven リポジトリーから Data Grid 依存関係をプルできます。
1.1. Data Grid Maven リポジトリーのダウンロード リンクのコピーリンクがクリップボードにコピーされました!
パブリック Red Hat Enterprise Maven リポジトリーを使用しない場合は、ローカルファイルシステム、Apache HTTP サーバー、または Maven リポジトリーマネージャーに Data Grid Maven リポジトリーをダウンロードし、インストールします。
手順
- Red Hat カスタマーポータルにログインします。
- Software Downloads for Data Grid に移動します。
- Red Hat Data Grid 8.2 Maven リポジトリーをダウンロードします。
- アーカイブされた Maven リポジトリーをローカルファイルシステムに展開します。
-
README.mdファイルを開き、適切なインストール手順に従います。
1.2. Red Hat Maven リポジトリーの追加 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat GA リポジトリーを Maven ビルド環境に組み込み、Data Grid アーティファクトおよび依存関係を取得します。
手順
Red Hat GA リポジトリーを Maven 設定ファイル (通常は
~/.m2/settings.xml) に追加するか、プロジェクトのpom.xmlファイルに直接追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. Data Grid POM の設定 リンクのコピーリンクがクリップボードにコピーされました!
Maven は、プロジェクトオブジェクトモデル (POM) ファイルと呼ばれる設定ファイルを使用して、プロジェクトを定義し、ビルドを管理します。POM ファイルは XML 形式であり、モジュールとコンポーネントの依存関係、ビルドの順序、および結果となるプロジェクトのパッケージ化と出力のターゲットを記述します。
手順
-
プロジェクト
pom.xmlを開いて編集します。 -
正しい Data Grid バージョンで
version.infinispanプロパティーを定義します。 dependencyManagementセクションにinfinispan-bomを含めます。BOM(Bill of Materials) は、依存関係バージョンを制御します。これにより、バージョンの競合が回避され、プロジェクトに依存関係として追加する Data Grid アーティファクトごとにバージョンを設定する必要がなくなります。
-
pom.xmlを保存して閉じます。
以下の例は、Data Grid のバージョンと BOM を示しています。
次のステップ
必要に応じて、Data Grid アーティファクトを依存関係として pom.xml に追加します。
第2章 Data Grid のプロジェクトへの追加 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid をプロジェクトに追加して、アプリケーションで組み込みキャッシュを作成します。
手順
-
以下のように、
infinispan-coreアーティファクトをpom.xmlの依存関係として追加します。
第3章 埋め込みキャッシュの初期化 リンクのコピーリンクがクリップボードにコピーされました!
Cache Manager を初期化し、プロジェクトに埋め込みキャッシュを追加して、アプリケーションで Data Grid の実行を開始します。
手順
- デフォルトの Cache Manager を初期化し、以下のような埋め込みキャッシュを追加します。
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
DefaultCacheManager cacheManager = new DefaultCacheManager(global.build());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC);
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("myCache", builder.build());
GlobalConfigurationBuilder global = GlobalConfigurationBuilder.defaultClusteredBuilder();
DefaultCacheManager cacheManager = new DefaultCacheManager(global.build());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC);
cacheManager.administration().withFlags(CacheContainerAdmin.AdminFlag.VOLATILE).getOrCreateCache("myCache", builder.build());
上記のコードは、デフォルトのクラスター化された Cache Manager を初期化します。Cache Manager にはキャッシュ定義が含まれ、キャッシュライフサイクルを制御します。
Data Grid はデフォルトのキャッシュ設定を提供しないため、デフォルトの Cache Manager を初期化した後は、キャッシュインスタンスを少なくとも 1 つ追加する必要があります。この例では、ConfigurationBuilder クラスを使用して、分散型同期キャッシュモードを使用する埋め込みキャッシュ定義を作成します。次に、クラスターのすべてのノードで "myCache" という名前のキャッシュを作成するか、すでに存在する場合はこれを返す getOrCreateCache() メソッドを呼び出します。
次のステップ
キャッシュが作成された実行中の Cache Manager ができたので、必要に応じて、キャッシュ定義を追加したり、データをキャッシュに入れたり、Data Grid を設定したりできます。
第4章 Data Grid 統計の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Cache Manager およびキャッシュの統計をエクスポートするように Data Grid を設定します。
手順
以下のいずれかの方法で、Data Grid 統計が有効化されるように設定を変更します。
-
宣言型:
statistics="true"属性を追加します。 -
プログラマティック:
.statistics()メソッドを呼び出します。
宣言型
<!-- Enables statistics for the Cache Manager. --> <cache-container statistics="true"> <!-- Enables statistics for the named cache. --> <local-cache name="mycache" statistics="true"/> </cache-container>
<!-- Enables statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Enables statistics for the named cache. -->
<local-cache name="mycache" statistics="true"/>
</cache-container>
プログラマティック
第5章 JMX MBean を登録するための Data Grid の設定 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、統計の収集と管理操作の実行に使用できる JMX MBean を登録できます。JMX とは別に統計を有効にする必要があります。そうしないと、Data Grid はすべての統計属性に 0 の値を提供します。
手順
以下のいずれかの方法でキャッシュコンテナー設定を変更し、JMX を有効にします。
-
宣言型:
<jmx enabled="true" />要素をキャッシュコンテナーに追加します。 -
プログラマティック:
.jmx().enable()メソッドを呼び出します。
宣言型
<cache-container> <jmx enabled="true" /> </cache-container>
<cache-container>
<jmx enabled="true" />
</cache-container>
プログラマティック
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder() .jmx().enable() .build();
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
5.1. Data Grid MBean リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、管理可能なリソースを表す JMX MBean を公開します。
org.infinispan:type=Cache- キャッシュインスタンスに使用できる属性および操作。
org.infinispan:type=CacheManager- Data Grid キャッシュやクラスターのヘルス統計など、Cache Manager で使用できる属性および操作。
使用できる JMX MBean の詳細な一覧および説明、ならびに使用可能な操作および属性については、Data Grid JMX Components のドキュメントを参照してください。
第6章 Setting Up Data Grid Clusters リンクのコピーリンクがクリップボードにコピーされました!
Data Grid には、ノードがクラスターに自動的に参加および離脱できるように、トランスポート層が必要です。また、トランスポート層により、Data Grid ノードはネットワーク上でデータを複製または分散し、リバランスや状態遷移などの操作を実施することができます。
6.1. デフォルトの JGroups スタック リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、infinispan-core-12.1.11.Final-redhat-00001.jar ファイル内の default-configs ディレクトリーに、デフォルトの JGroups スタックファイル default-jgroups-*.xml を提供します。
| File name | スタック名 | 説明 |
|---|---|---|
|
|
| トランスポートに UDP を使用し、検出に UDP マルチキャストを使用します。(100 ノードを超える) 大規模なクラスター、またはレプリケートされたキャッシュまたは無効化モードを使用している場合に適しています。オープンソケットの数を最小限に抑えます。 |
|
|
|
トランスポートには TCP を使用し、検出には |
|
|
|
トランスポートに TCP を使用し、検出に |
|
|
|
トランスポートに TCP を使用し、検出に |
|
|
|
トランスポートに TCP を使用し、検出に |
|
|
|
トランスポートに TCP を使用し、検出に |
6.2. クラスター検出プロトコル リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、ノードがネットワーク上でお互いを自動的に見つけてクラスターを形成できるようにするさまざまなプロトコルをサポートしています。
Data Grid が使用できる 2 種類の検出メカニズムがあります。
- ほとんどのネットワークで機能する汎用検出プロトコルで、外部サービスに依存しません。
-
Data Grid クラスターのトポロジー情報を保存し、取得するために外部サービスに依存する検出プロトコル。
たとえば、DNS_PING プロトコルは DNS サーバーレコードで検出を実行します。
ホスト型プラットフォームで Data Grid を実行するには、個別のクラウドプロバイダーが課すネットワーク制約に適合する検出メカニズムを使用する必要があります。
6.2.1. PING リンクのコピーリンクがクリップボードにコピーされました!
PING または UDPPING は、UDP プロトコルで動的なマルチキャストを使用する一般的な JGroups 検出メカニズムです。
結合時に、ノードは IP マルチキャストアドレスに PING 要求を送信し、Data Grid クラスターにある他のノードを検出します。各ノードは、コーディネーターノードのアドレスとその独自のアドレスが含まれるパケットで PING リクエストに応答します。C はコーディネーターのアドレスで、A は自分のアドレスです。ノードが PING 要求に応答すると、結合ノードは新しいクラスターのコーディネーターノードになります。
PING 設定の例
<PING num_discovery_runs="3"/>
<PING num_discovery_runs="3"/>
6.2.2. TCPPING リンクのコピーリンクがクリップボードにコピーされました!
TCPPING は、クラスターメンバーの静的アドレスリストを使用する汎用 JGroups 検索メカニズムです。
TCPPING を使用すると、ノードが相互に動的に検出できるようにするのではなく、JGroups スタックの一部として Data Grid クラスター内の各ノードの IP アドレスまたはホスト名を手動で指定します。
TCPPING 設定の例
<TCP bind_port="7800" />
<TCPPING timeout="3000"
initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}"
port_range="0"
num_initial_members="3"/>
<TCP bind_port="7800" />
<TCPPING timeout="3000"
initial_hosts="${jgroups.tcpping.initial_hosts:hostname1[port1],hostname2[port2]}"
port_range="0"
num_initial_members="3"/>
6.2.3. MPING リンクのコピーリンクがクリップボードにコピーされました!
MPING は IP マルチキャストを使用して Data Grid クラスターの初期メンバーシップを検出します。
MPING を使用して TCPPING 検出を TCP スタックに置き換え、初期ホストの静的リストの代わりに、検出にマルチキャストを使用できます。ただし、UDP スタックで MPING を使用することもできます。
MPING 設定の例
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.mcast_port:46655}"
num_discovery_runs="3"
ip_ttl="${jgroups.udp.ip_ttl:2}"/>
<MPING mcast_addr="${jgroups.mcast_addr:228.6.7.8}"
mcast_port="${jgroups.mcast_port:46655}"
num_discovery_runs="3"
ip_ttl="${jgroups.udp.ip_ttl:2}"/>
6.2.4. TCPGOSSIP リンクのコピーリンクがクリップボードにコピーされました!
gossip ルーターは、Data Grid クラスターが他のノードのアドレスを取得できるネットワーク上の集中的な場所を提供します。
以下のように、Gosssip ルーターのアドレス (IP:PORT) を Data Grid ノードに挿入します。
-
このアドレスをシステムプロパティーとして JVM に渡します (例:
-DGossipRouterAddress="10.10.2.4[12001]")。 - JGroups 設定ファイルのそのシステムプロパティーを参照します。
Gossip ルーター設定の例
<TCP bind_port="7800" />
<TCPGOSSIP timeout="3000"
initial_hosts="${GossipRouterAddress}"
num_initial_members="3" />
<TCP bind_port="7800" />
<TCPGOSSIP timeout="3000"
initial_hosts="${GossipRouterAddress}"
num_initial_members="3" />
6.2.5. JDBC_PING リンクのコピーリンクがクリップボードにコピーされました!
JDBC_PING は共有データベースを使用して Data Grid クラスターに関する情報を保存します。このプロトコルは、JDBC 接続を使用できるすべてのデータベースをサポートします。
ノードは IP アドレスを共有データベースに書き込むため、ノードに結合してネットワーク上の Data Grid クラスターを検索できます。ノードが Data Grid クラスターのままにすると、共有データベースから IP アドレスを削除します。
JDBC_PING 設定の例
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name"
connection_username="user"
connection_password="password"
connection_driver="com.mysql.jdbc.Driver"/>
<JDBC_PING connection_url="jdbc:mysql://localhost:3306/database_name"
connection_username="user"
connection_password="password"
connection_driver="com.mysql.jdbc.Driver"/>
適切な JDBC ドライバーをクラスパスに追加して、Data Grid が JDBC_PING を使用できるようにします。
6.2.6. DNS_PING リンクのコピーリンクがクリップボードにコピーされました!
JGroups DNS_PING は DNS サーバーをクエリーし、OKD や Red Hat OpenShift などの Kubernetes 環境で Data Grid クラスターメンバーを検出します。
DNS_PING 設定の例
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
<dns.DNS_PING dns_query="myservice.myproject.svc.cluster.local" />
6.2.7. Cloud Discovery プロトコル リンクのコピーリンクがクリップボードにコピーされました!
Data Grid には、クラウドプロバイダーに固有の検出プロトコル実装を使用するデフォルトの JGroups スタックが含まれています。
| 検出プロトコル | デフォルトのスタックファイル | アーティファクト | バージョン |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cloud Discovery プロトコルの依存関係の提供
NATIVE_S3_PING、GOOGLE_PING2、または AZURE_PING の Cloud Discovery プロトコルを使用するには、依存するライブラリーを Data Grid に提供する必要があります。
手順
-
アーティファクト依存関係をプロジェクトの
pom.xmlに追加します。
続いて、JGroups スタックファイルの一部として、またはシステムプロパティーを使用して、クラウド検出プロトコルを設定できます。
6.3. デフォルトの JGroups スタックの使用 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は JGroups プロトコルスタックを使用するため、ノードは専用のクラスターチャネルに相互に送信できるようにします。
Data Grid は、UDP プロトコルおよび TCP プロトコルに事前設定された JGroups スタックを提供します。これらのデフォルトスタックは、ネットワーク要件向けに最適化されたカスタムクラスタートランスポート設定を構築する際の開始点として使用することができます。
手順
デフォルトの JGroups スタックの 1 つを使用するには、以下のいずれかを行います。
infinispan.xmlファイルのstack属性を使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow addProperty()メソッドを使用して JGroups スタックファイルを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Data Grid は、以下のメッセージをログに記録して、使用するスタックを示します。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack udp
6.4. JGroups スタックのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
プロパティーを調整してチューニングし、ネットワーク要件に対応するクラスタートランスポート設定を作成します。
Data Grid は、設定を容易にするためにデフォルトの JGroups スタックを拡張する属性を提供します。他のプロパティーを組み合わせてデフォルトスタックからプロパティーの継承、削除、置き換えを行うことができます。
手順
-
infinispan.xmlファイルに新しい JGroups スタック宣言を作成します。 -
extends属性を追加し、プロパティーを継承する JGroups スタックを指定します。 -
stack.combine属性を使用して、継承されたスタックに設定されたプロトコルのプロパティーを変更します。 -
stack.position属性を使用して、カスタムスタックの場所を定義します。 スタック名を
transport設定のstack属性の値として指定します。たとえば、以下のようにデフォルトの TCP スタックで Gosssip ルーターと対称暗号化を使用して評価できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Data Grid ログをチェックして、スタックを使用していることを確認します。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stack
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack my-stackCopy to Clipboard Copied! Toggle word wrap Toggle overflow
参照資料
- JGroups cluster transport configuration for Data Grid 8.x (Red Hat ナレッジベースの記事)
6.4.1. 継承属性 リンクのコピーリンクがクリップボードにコピーされました!
JGroups スタックを拡張すると、継承属性により、拡張しているスタックでプロトコルやプロパティーを調整できます。
-
stack.positionは、変更するプロトコルを指定します。 stack.combineは、次の値を使用して JGroups スタックを拡張します。Expand 値 説明 COMBINEプロトコルプロパティーをオーバーライドします。
REPLACEプロトコルを置き換えます。
INSERT_AFTER別のプロトコルの後にプロトコルをスタックに追加します。挿入ポイントとして指定するプロトコルには影響しません。
JGroups スタックのプロトコルは、スタック内の場所を基にして相互に影響します。
NAKACK2がセキュリティーで保護されるように、たとえば、SYM_ENCRYPTプロトコルまたはASYM_ENCRYPTプロトコル後にNAKACK2などのプロトコルを置く必要があります。INSERT_BEFORE別のプロトコルの前にプロトコルをスタックに挿入します。挿入ポイントとして指定するプロトコルに影響します。
REMOVEスタックからプロトコルを削除します。
6.5. JGroups システムプロパティーの使用 リンクのコピーリンクがクリップボードにコピーされました!
起動時にシステムプロパティーを Data Grid に渡して、クラスターのトランスポートを調整します。
手順
-
-D<property-name>=<property-value>引数を使用して JGroups システムプロパティーを必要に応じて設定します。
たとえば、以下のようにカスタムバインドポートと IP アドレスを設定します。
java -cp ... -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
$ java -cp ... -Djgroups.bind.port=1234 -Djgroups.bind.address=192.0.2.0
クラスター化された Red Hat JBoss EAP アプリケーションに Data Grid クラスターを組み込むと、JGroups システムプロパティーは競合したり、互いに上書きしたりする可能性があります。
たとえば、Data Grid クラスターまたは Red Hat JBoss EAP アプリケーションのいずれかに一意のバインドアドレスを設定しないでください。この場合、Data Grid と Red Hat JBoss EAP アプリケーションの両方が JGroups のデフォルトプロパティーを使用し、同じバインドアドレスを使用してクラスターを形成しようとします。
6.5.1. クラスタートランスポートプロパティー リンクのコピーリンクがクリップボードにコピーされました!
以下のプロパティーを使用して JGroups クラスタートランスポートをカスタマイズします。
| システムプロパティー | 説明 | デフォルト値 | 必須/オプション |
|---|---|---|---|
|
| クラスタートランスポートのバインドアドレス。 |
| 任意 |
|
| ソケットのバインドポート。 |
| 任意 |
|
| マルチキャストの IP アドレス (検出およびクラスター間の通信の両方)。IP アドレスは、IP マルチキャストに適した有効なクラス D アドレスである必要があります。 |
| 任意 |
|
| マルチキャストソケットのポート。 |
| 任意 |
|
| IP マルチキャストパケットの Time-to-live (TTL)この値は、パケットが破棄される前にパケットが作成できるネットワークホップの数を定義します。 | 2 | 任意 |
|
| スレッドプールの最小スレッド数 | 0 | 任意 |
|
| スレッドプールの最大スレッド数 | 200 | 任意 |
|
| 結合リクエストが正常に実行されるまで待機する最大時間 (ミリ秒単位)。 | 2000 | 任意 |
|
| スレッドダンプがログに記録される前にスレッドプールが満杯である必要がある回数。 | 10000 | 任意 |
6.5.2. Cloud Discovery プロトコルのシステムプロパティー リンクのコピーリンクがクリップボードにコピーされました!
以下のプロパティーを使用して、ホストされたプラットフォームの JGroups 検出プロトコルを設定します。
6.5.2.1. Amazon EC2 リンクのコピーリンクがクリップボードにコピーされました!
NATIVE_S3_PING を設定するためのシステムプロパティー。
| システムプロパティー | 説明 | デフォルト値 | 必須/オプション |
|---|---|---|---|
|
| Amazon S3 リージョンの名前。 | デフォルト値はありません。 | 任意 |
|
| Amazon S3 バケットの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | 任意 |
6.5.2.2. Google Cloud Platform リンクのコピーリンクがクリップボードにコピーされました!
GOOGLE_PING2 を設定するためのシステムプロパティー。
| システムプロパティー | 説明 | デフォルト値 | 必須/オプション |
|---|---|---|---|
|
| Google Compute Engine バケットの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | 必須 |
6.5.2.3. Azure リンクのコピーリンクがクリップボードにコピーされました!
AZURE_PING のシステムプロパティー。
| システムプロパティー | 説明 | デフォルト値 | 必須/オプション |
|---|---|---|---|
|
| Azure ストレージアカウントの名前。名前は存在し、一意でなければなりません。 | デフォルト値はありません。 | 必須 |
|
| Azure ストレージアクセスキーの名前。 | デフォルト値はありません。 | 必須 |
|
| ping 情報を格納するコンテナーの有効な DNS 名。 | デフォルト値はありません。 | 必須 |
6.5.2.4. OpenShift リンクのコピーリンクがクリップボードにコピーされました!
DNS_PING のシステムプロパティー。
| システムプロパティー | 説明 | デフォルト値 | 必須/オプション |
|---|---|---|---|
|
| クラスターメンバーを返す DNS レコードを設定します。 | デフォルト値はありません。 | 必須 |
6.6. インライン JGroups スタックの使用 リンクのコピーリンクがクリップボードにコピーされました!
完全な JGroups スタックの定義を infinispan.xml ファイルに挿入することができます。
手順
カスタム JGroups スタック宣言を
infinispan.xmlファイルに埋め込みます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. 外部 JGroups スタックの使用 リンクのコピーリンクがクリップボードにコピーされました!
infinispan.xml ファイルでカスタム JGroups スタックを定義する外部ファイルを参照します。
手順
カスタム JGroups スタックファイルをアプリケーションクラスパスに配置します。
または、外部スタックファイルを宣言する際に絶対パスを指定することもできます。
stack-file要素を使用して、外部スタックファイルを参照します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
TransportConfigurationBuilder クラスで addProperty() メソッドを使用して、以下のようにカスタム JGroups スタックファイルを指定することもできます。
この例では、my-jgroups-udp.xml は、以下のようなカスタムプロパティーで UDP スタックを参照します。
カスタム UDP スタックの例
6.8. カスタム JChannels の使用 リンクのコピーリンクがクリップボードにコピーされました!
以下の例のように、カスタム JGroups JChannels を構築します。
Data Grid は、すでに接続されているカスタム JChannels を使用できません。
参照資料
6.9. クラスタートランスポートの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
ノードが暗号化されたメッセージと通信できるように、クラスタートランスポートを保護します。また、有効なアイデンティティーを持つノードのみが参加できるように、証明書認証を実行するように Data Grid クラスターを設定することもできます。
6.9.1. Data Grid クラスターのセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
クラスタートラフィックのセキュリティーを保護するには、Data Grid ノードを設定し、シークレットキーで JGroups メッセージペイロードを暗号化します。
Data Grid ノードは、以下のいずれかから秘密鍵を取得できます。
- コーディネーターノード (非対称暗号化)
- 共有キーストア (対称暗号化)
コーディネーターノードからの秘密鍵の取得
非対称暗号化は、Data Grid 設定の JGroups スタックに ASYM_ENCRYPT プロトコルを追加して対称暗号化を設定します。これにより、Data Grid クラスターはシークレットキーを生成して配布できます。
非対称暗号化を使用する場合は、ノードが証明書認証を実行し、シークレットキーを安全に交換できるようにキーストアを提供する必要もあります。これにより、中間者 (MitM) 攻撃からクラスターが保護されます。
非対称暗号化は、以下のようにクラスタートラフィックのセキュリティーを保護します。
- Data Grid クラスターの最初のノードであるコーディネーターノードは、秘密鍵を生成します。
- 参加ノードは、コーディネーターとの証明書認証を実行して、相互に ID を検証します。
- 参加ノードは、コーディネーターノードに秘密鍵を要求します。その要求には、参加ノードの公開鍵が含まれています。
- コーディネーターノードは、秘密鍵を公開鍵で暗号化し、参加ノードに返します。
- 参加ノードは秘密鍵を復号してインストールします。
- ノードはクラスターに参加し、秘密鍵でメッセージを暗号化および復号化します。
共有キーストアからの秘密鍵の取得
対称暗号化は、Data Grid 設定の JGroups スタックに SYM_ENCRYPT プロトコルを追加して対称暗号化を設定します。これにより、Data Grid クラスターは、指定したキーストアから秘密鍵を取得できます。
- ノードは、起動時に Data Grid クラスパスのキーストアから秘密鍵をインストールします。
- ノードはクラスターに参加し、秘密鍵でメッセージを暗号化および復号化します。
非対称暗号化と対称暗号化の比較
証明書認証を持つ ASYM_ENCRYPT は、SYM_ENCRYPT と比較して、暗号化の追加の層を提供します。秘密鍵のコーディネーターノードへのリクエストを暗号化するキーストアを提供します。Data Grid は、そのシークレットキーを自動的に生成し、クラスタートラフィックを処理し、秘密鍵の生成時に指定します。たとえば、ノードが離れる場合に新規のシークレットキーを生成するようにクラスターを設定できます。これにより、ノードが証明書認証を回避して古いキーで参加できなくなります。
一方、SYM_ENCRYPT は ASYM_ENCRYPT よりも高速です。ノードがクラスターコーディネーターとキーを交換する必要がないためです。SYM_ENCRYPT への潜在的な欠点は、クラスターのメンバーシップの変更時に新規シークレットキーを自動的に生成するための設定がないことです。ユーザーは、ノードがクラスタートラフィックを暗号化するのに使用するシークレットキーを生成して配布する必要があります。
6.9.2. 非対称暗号化を使用したクラスタートランスポートの設定 リンクのコピーリンクがクリップボードにコピーされました!
Data Grid クラスターを設定し、JGroups メッセージを暗号化するシークレットキーを生成して配布します。
手順
- Data Grid がノードの ID を検証できるようにする証明書チェーンでキーストアを作成します。
クラスター内の各ノードのクラスパスにキーストアを配置します。
Data Grid Server の場合は、$RHDG_HOME ディレクトリーにキーストアを配置します。
以下の例のように、
SSL_KEY_EXCHANGEプロトコルおよびASYM_ENCRYPTプロトコルを Data Grid 設定の JGroups スタックに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Data Grid クラスターを起動した際、以下のログメッセージは、クラスターがセキュアな JGroups スタックを使用していることを示しています。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
Data Grid ノードは ASYM_ENCRYPT を使用している場合のみクラスターに参加でき、コーディネーターノードからシークレットキーを取得できます。それ以外の場合は、次のメッセージが Data Grid ログに書き込まれます。
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.ASYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参照資料
この手順の ASYM_ENCRYPT の設定例は、一般的に使用されるパラメーターを示しています。利用可能なパラメーターの完全なセットについては、JGroups のドキュメントを参照してください。
6.9.3. 対称暗号化を使用したクラスタートランスポートの設定 リンクのコピーリンクがクリップボードにコピーされました!
指定したキーストアからの秘密鍵を使用して JGroups メッセージを暗号化するように Data Grid クラスターを設定します。
手順
- シークレットキーが含まれるキーストアを作成します。
クラスター内の各ノードのクラスパスにキーストアを配置します。
Data Grid Server の場合は、$RHDG_HOME ディレクトリーにキーストアを配置します。
-
Data Grid 設定の JGroups スタックに
SYM_ENCRYPTプロトコルを追加します。
検証
Data Grid クラスターを起動した際、以下のログメッセージは、クラスターがセキュアな JGroups スタックを使用していることを示しています。
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
[org.infinispan.CLUSTER] ISPN000078: Starting JGroups channel cluster with stack <encrypted_stack_name>
Data Grid ノードは、SYM_ENCRYPT を使用し、共有キーストアからシークレットキーを取得できる場合に限りクラスターに参加できます。それ以外の場合は、次のメッセージが Data Grid ログに書き込まれます。
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
[org.jgroups.protocols.SYM_ENCRYPT] <hostname>: received message without encrypt header from <hostname>; dropping it
参照資料
この手順の SYM_ENCRYPT の設定例は、一般的に使用されるパラメーターを示しています。利用可能なパラメーターの完全なセットについては、JGroups のドキュメントを参照してください。
6.10. クラスタートラフィックの TCP および UDP ポート リンクのコピーリンクがクリップボードにコピーされました!
Data Grid は、クラスタートランスポートメッセージに以下のポートを使用します。
| デフォルトのポート | Protocol | 説明 |
|---|---|---|
|
| TCP/UDP | JGroups クラスターバインドポート |
|
| UDP | JGroups マルチキャスト |
クロスサイトレプリケーション
Data Grid は、JGroups RELAY2 プロトコルに以下のポートを使用します。
7900- OpenShift で実行している Data Grid クラスターの向け。
7800- ノード間のトラフィックに UDP を使用し、クラスター間のトラフィックに TCP を使用する場合。
7801- ノード間のトラフィックに TCP を使用し、クラスター間のトラフィックに TCP を使用する場合。